X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=ETL%2Ftrunk%2FETL%2F_handle.h;h=3889d6bb18fde658e70b21969d9e45b757ceb32e;hb=36d01e1527fda602a9aed07d209eb34e6770bca8;hp=0cf5af2854d39121098831818d7e5001ec919431;hpb=b3016b249333ac0ab0008d8c6c4d9029b2ff30c9;p=synfig.git diff --git a/ETL/trunk/ETL/_handle.h b/ETL/trunk/ETL/_handle.h index 0cf5af2..3889d6b 100644 --- a/ETL/trunk/ETL/_handle.h +++ b/ETL/trunk/ETL/_handle.h @@ -1,6 +1,6 @@ /* === E T L =============================================================== */ /*! \file _handle.h -** $Id: _handle.h,v 1.1.1.1 2005/01/04 01:31:47 darco Exp $ +** $Id$ ** \brief Template Object Handle Implementation ** \internal ** @@ -66,7 +66,7 @@ class shared_object { private: mutable int refcount; - + protected: shared_object():refcount(0) { } @@ -75,11 +75,11 @@ protected: #else ~shared_object() { } #endif - -public: + +public: void ref()const { assert(refcount>=0); refcount++; } - + //! Returns \c false if object needs to be deleted bool unref()const { @@ -97,7 +97,7 @@ public: return true; } - + int count()const { return refcount; } }; // END of class shared_object @@ -182,7 +182,7 @@ public: return *this; } */ - + //! Assignment operator handle & operator=(const handle &x) @@ -229,7 +229,7 @@ public: void reset() { detach(); } bool empty()const { return obj==0; } - + //! Creates a new instance of a T object and puts it in the handle. /*! Uses the default constructor */ void spawn() { operator=(handle(new T())); } @@ -257,14 +257,14 @@ public: operator->()const { assert(obj); return obj; } - //! static_cast<> overload -- Useful for implicit casts - template - operator handle()const - { return handle(static_cast(obj)); } + //! More explicit bool cast + operator bool()const + { return obj!=NULL; } operator handle()const { return handle(static_cast(obj)); } + //! static_cast\<\> wrapper template static handle cast_static(const handle &x) @@ -303,13 +303,14 @@ public: //! Returns pointer to the object that is being wrapped pointer get()const { return obj; } - //! More explicit bool cast - operator bool()const - { return obj!=NULL; } - bool operator!()const { return !obj; } + + //! static_cast<> overload -- Useful for implicit casts + template + operator handle()const + { return handle(static_cast(obj)); } }; // END of template class handle // ======================================================================== @@ -326,20 +327,20 @@ private: public: void *front_; void *back_; - + protected: rshared_object():rrefcount(0),front_(0),back_(0) { } - -public: + +public: void rref()const { rrefcount++; } - + void runref()const { assert(rrefcount>0); rrefcount--; } - + int rcount()const { return rrefcount; } }; // END of class rshared_object @@ -371,7 +372,7 @@ public: using handle::get; using handle::operator *; using handle::operator ->; - + /* operator const handle&()const { return *this; } @@ -379,7 +380,7 @@ public: private: using handle::obj; - + rhandle *prev_; rhandle *next_; @@ -397,7 +398,7 @@ private: prev_=next_=0; return; } - + prev_=reinterpret_cast*>(obj->back_); next_=0; prev_->next_=this; @@ -428,7 +429,7 @@ private: else next_->prev_=prev_; } - + public: //! Default constructor - empty handle @@ -456,7 +457,7 @@ public: //! Handle is released on deletion ~rhandle() { detach(); } - + //! Template Assignment operator /*! \note This class may not be necessary, and may be removed ** at some point in the future. @@ -479,7 +480,7 @@ public: return *this; } */ - + //! Assignment operator rhandle & operator=(const rhandle &x) @@ -577,32 +578,32 @@ public: // value_type*& obj(handle::obj); // Required to keep gcc 3.4.2 form barfing assert(obj); assert(x.get()!=obj); - + if(x.get()==obj) return 0; - + rhandle *iter; rhandle *next; - + iter=reinterpret_cast*>(obj->front_); - assert(iter); + assert(iter); next=iter->next_; - + int i=0; #ifndef NDEBUG pointer obj_=obj; #endif - + for(;iter;iter=next,next=iter?iter->next_:0,i++) { - assert(iter->get()==obj_); + assert(iter->get()==obj_); (*iter)=x; } assert(obj==x.get()); - + return i; } @@ -710,7 +711,7 @@ public: //void release() { detach(); } void reset() { detach(); } - + bool empty()const { return obj==0; } handle clone()const { assert(obj); return obj->clone(); } @@ -781,8 +782,8 @@ template template handle handle::cast_reinterpret(const loose_handle &x) { return handle(reinterpret_cast(x.get())); } - - + + template template handle handle::cast_static(const rhandle &x) { return handle(static_cast(x.get())); } @@ -799,8 +800,8 @@ template template handle handle::cast_reinterpret(const rhandle &x) { return handle(reinterpret_cast(x.get())); } - - + + template template handle handle::cast_static(U* x) { return handle(static_cast(x)); }