#include "munga.h" #pragma hdrstop #include "watcher.h" #include "entity.h" #include "cstr.h" #include "objstrm.h" #include "namelist.h" #include "subsystm.h" //############################################################################# //########################## AttributeWatcher ########################### //############################################################################# // //############################################################################# //############################################################################# // AttributeWatcher::~AttributeWatcher() { } // //############################################################################# //############################################################################# // AttributeWatcher::AttributeWatcher( PlugStream *stream, Entity *entity ): Component(stream) { Check(stream); Check(entity); #if 0 // // Get attribute ptr // int subsystem_ID; DynamicMemoryStream_Read(stream, &subsystem_ID); Simulation *simulation; if ((simulation = entity->GetSubsystem(subsystem_ID)) == NULL) { simulation = entity; } Check(simulation); Simulation::AttributeID attribute_ID; DynamicMemoryStream_Read(stream, &attribute_ID); attributePointer = simulation->GetAttributePointer(attribute_ID); Check_Pointer(attributePointer); #else // // HACK - Get attribute pointer using names // CString subsystem_name; *stream >> subsystem_name; if ((simulation = entity->FindSubsystem(subsystem_name)) == NULL) { #if DEBUG_LEVEL>0 { CString entity_name("Entity"); if (!(subsystem_name == entity_name)) { Dump(subsystem_name); } Verify(subsystem_name == entity_name); } #else { CString entity_name("Entity"); if (!(subsystem_name == entity_name)) { DEBUG_STREAM << "AttributeWatcher::AttributeWatcher - subsystem " << subsystem_name << "\n"; Fail("AttributeWatcher::AttributeWatcher - subsystem not found\n"); } } #endif simulation = entity; } Check(simulation); CString attribute_name; *stream >> attribute_name; #if DEBUG_LEVEL>2 Tell("AttributeWatcher::AttributeWatcher - " << attribute_name << "\n"); #endif attributePointer = simulation->GetAttributePointer(attribute_name); #if DEBUG_LEVEL>0 if (attributePointer == NULL) { Dump(attribute_name); } #else if (attributePointer == NULL) { DEBUG_STREAM << "AttributeWatcher::AttributeWatcher - attribute " << attribute_name << "\n"; Fail("AttributeWatcher::AttributeWatcher - attribute not found\n"); } #endif Check_Pointer(attributePointer); #endif // // Get other fields // *stream >> sendNotificationOnChange; attributeChanged = False; } // //############################################################################# // BuildFromPage //############################################################################# // void AttributeWatcher::BuildFromPage( PlugStream *stream, NameList *name_list, ClassID class_ID, ObjectID object_ID ) { Component::BuildFromPage(stream, name_list, class_ID, object_ID); // // HACK - Store attribute pointer using names // MEM_STRM_WRITE_ENTRY(*stream, name_list, CString, subsystem); MEM_STRM_WRITE_ENTRY(*stream, name_list, CString, attribute); // // Store other fields // Logical send_notification_on_change = True; *stream << send_notification_on_change; } // //############################################################################# //############################################################################# // Logical AttributeWatcher::TestInstance() const { Component::TestInstance(); Check(simulation); Check_Pointer(attributePointer); return True; } // //############################################################################# //############################################################################# // Logical AttributeWatcher::DidAttributeChange() { if (attributeChanged) { attributeChanged = False; return True; } return False; } // //############################################################################# //############################################################################# // void AttributeWatcher::SendNotificationOfChange() { Fail("AttributeWatcher::SendNotificationOfChange - Should never reach here"); } #ifdef TEST_CLASS # include "watcher.tcp" #endif