33 template<
typename TYPE>
36 union Un { FXuval val; TYPE* ptr; };
57 TYPE* ptr()
const { Un x={as.val&~1L};
return x.ptr; }
60 void ptr(TYPE* p){ FXuval v=as&1; as.ptr=p; as.val|=v; }
63 operator TYPE*()
const {
return ptr(); }
66 TYPE& operator*()
const {
return *ptr(); }
69 TYPE* operator->()
const {
return ptr(); }
72 operator FXbool()
const {
return !!ptr(); }
75 FXbool operator!()
const {
return !ptr(); }
78 FXbool operator==(TYPE *p)
const {
return ptr()==p; }
81 FXbool operator!=(TYPE *p)
const {
return ptr()!=p; }
84 FXbool flag()
const {
return !!(as.val&1L); }
87 void flag(FXbool flg){ as.val^=((0-flg)^as.val)&1L; }
90 void flip(){ as.val^=1L; }
Marked pointer keeps a flag bit inside of a dynamically allocated pointer; this is possible because m...
Definition: FXMarkedPtr.h:34
Definition: FX4Splitter.h:28