33 DebugAssert(mask && (mask & (mask-1)) == 0,
"Expected single bit mask");
34 if (scope < 0 || d_scope->level() <= scope) {
36 if (setMask) d_flags = d_flags | mask;
37 else d_flags = d_flags & ~mask;
42 IF_DEBUG(
bool on = (d_flags & mask) != 0;)
45 if (setMask) d_flags = d_flags | mask;
46 else d_flags = d_flags & ~mask;
50 Scope* lastScope = d_scope;
55 pastFlags = (
CDFlags*)((*lastPtr)->d_data);
56 DebugAssert(pastFlags != NULL,
"expected non-NULL data");
57 if (pastFlags->d_scope->
level() >= scope) {
59 || (!on && !(pastFlags->
d_flags & mask)),
60 "Expected no change in flag since scope");
67 if (pastFlags->d_scope->
level() == scope) {
70 lastScope = pastFlags->d_scope;
72 lastPtr = &((*lastPtr)->d_restore);
73 DebugAssert(*lastPtr != NULL,
"Should always be object at scope 0");
79 lastScope->
level() > scope,
80 "Expected lastScope to be above target scope");
81 while (lastScope->
level() > scope) lastScope = lastScope->
prevScope();
85 pastFlags->d_scope = lastScope;
ContextObjChain * d_restore
The list of values on previous scopes; our destructor should clean up those.
ContextObjChain * d_restore
Pointer to the previous copy which belongs to the same master.
#define DebugAssert(cond, str)
virtual ContextObj * makeCopy(ContextMemoryManager *cmm)
Make a copy of the current object so it can be restored to its current state.
Context Dependent Vector of Flags.
ContextMemoryManager * getCMM() const
void addToChain(ContextObjChain *obj)
Called by ContextObj when created.
Scope * prevScope() const
Access functions.
Stack-based memory manager.
void update(unsigned mask, int scope, bool setMask)