jitcraft/Barriers.h
changeset 13 627b6b94e774
parent 12 75e385f68b7e
child 28 a9665857cfd5
     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_