00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 #ifndef _cvcl__include__cdflags_h_
00031 #define _cvcl__include__cdflags_h_
00032 
00033 #include "context.h"
00034 
00035 namespace CVCL {
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 class CDFlags :public ContextObj {
00045   unsigned d_flags;
00046 
00047   virtual ContextObj* makeCopy(void) { return new CDFlags(*this); }
00048   virtual void restoreData(ContextObj* data)
00049     { d_flags = ((CDFlags*)data)->d_flags; }
00050   virtual void setNull(void) { FatalAssert(false, "Should never be called"); }
00051 
00052   void update(unsigned mask, int scope, bool setMask);
00053 
00054   
00055   
00056   CDFlags(const CDFlags& cdflags): ContextObj(cdflags), d_flags(cdflags.d_flags) { }
00057   CDFlags& operator=(const CDFlags& cdflags) { return *this; }
00058 
00059 public:
00060   CDFlags(Context* context) : ContextObj(context), d_flags(0)
00061     { IF_DEBUG(setName("CDFlags")); }
00062   ~CDFlags() { TRACE("context verbose", "~CDFlags[", this, "]"); }
00063   void set(unsigned mask, int scope=-1) { update(mask, scope, true); }
00064   void clear(unsigned mask, int scope=-1) { update(mask, scope, false); }
00065   bool get(unsigned mask) const { return d_flags & mask; }
00066 };
00067 
00068 }
00069 
00070 #endif