1.1 --- a/jitcraft/Barriers.h Sat Jun 30 19:38:53 2012 -0700
1.2 +++ b/jitcraft/Barriers.h Sat Jun 30 20:20:39 2012 -0700
1.3 @@ -55,6 +55,39 @@
1.4 }
1.5 };
1.6
1.7 +// Used to store unbarriered heap locations.
1.8 +template <typename T>
1.9 +class Barriered
1.10 +{
1.11 + Object *obj_;
1.12 +
1.13 + public:
1.14 + Barriered()
1.15 + : obj_(NULL)
1.16 + {
1.17 + }
1.18 +
1.19 + T *operator ->() const {
1.20 + return operator *();
1.21 + }
1.22 + T *operator *() const {
1.23 + return static_cast<T *>(obj_);
1.24 + }
1.25 + Barriered &operator =(T *obj) {
1.26 + obj_ = obj;
1.27 + return *this;
1.28 + }
1.29 + Object **addr() {
1.30 + return &obj_;
1.31 + }
1.32 + operator bool () const {
1.33 + return !!obj_;
1.34 + }
1.35 + operator T*() const {
1.36 + return static_cast<T *>(obj_);
1.37 + }
1.38 +};
1.39 +
1.40 }
1.41
1.42 #endif // _include_jitcraft_barriers_h_