int main() { BaseA ba; BaseB bb; DerivA da; DerivB db; Any any; assert(!any.isSet()); any.set(ba); assert(any.isSet()); assert(any.get<BaseA>() == &ba); assert(any.get<BaseB>() == NULL); assert(any.get<DerivA>() == NULL); assert(any.get<DerivB>() == NULL); any.clear(); assert(!any.isSet()); assert(any.get<BaseA>() == NULL); assert(any.get<BaseB>() == NULL); assert(any.get<DerivA>() == NULL); assert(any.get<DerivB>() == NULL); any = bb; assert(any.isSet()); assert(any.get<BaseA>() == NULL); assert(any.get<BaseB>() == &bb); assert(any.get<DerivA>() == NULL); assert(any.get<DerivB>() == NULL); any = da; assert(any.isSet()); assert(any.get<BaseA>() == NULL); assert(any.get<BaseB>() == NULL); assert(any.get<DerivA>() == &da); assert(any.get<DerivB>() == NULL); any = db; assert(any.isSet()); assert(any.get<BaseA>() == NULL); assert(any.get<BaseB>() == NULL); assert(any.get<DerivA>() == NULL); assert(any.get<DerivB>() == &db); Any any2 = any; assert(any.isSet()); assert(any.get<BaseA>() == NULL); assert(any.get<BaseB>() == NULL); assert(any.get<DerivA>() == NULL); assert(any.get<DerivB>() == &db); Any any3(any2); assert(any.isSet()); assert(any.get<BaseA>() == NULL); assert(any.get<BaseB>() == NULL); assert(any.get<DerivA>() == NULL); assert(any.get<DerivB>() == &db); return 0; }
Any VisibleEntity::toAny() const { Any a = Entity::toAny(); a.setName("VisibleEntity"); a.set("visible", m_visible); // Model and pose must already have been set, so no need to change anything return a; }
Any VisibleEntity::toAny(const bool forceAll) const { Any a = Entity::toAny(forceAll); a.setName("VisibleEntity"); AnyTableReader oldValues(a); bool visible; if (forceAll || (oldValues.getIfPresent("visible", visible) && visible != m_visible)) { a.set("visible", m_visible); } // Model and pose must already have been set, so no need to change anything return a; }
static void testRefCount2() { // Explicit allocation so that we can control destruction Any* a = new Any(Any::TABLE); // Put something complex the table, so that we have chains of dependencies a->set("x", Any(Any::TABLE)); Any* b = new Any(); // Create alias *b = *a; // a->m_data->referenceCount.m_value should now be 2 delete b; b = NULL; // Reference count should now be 1 delete a; a = NULL; // Reference count should now be zero (and the object deallocated) }