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