- /// Generic callback to execute some notification on objects in a way that they are not prone to
- /// ConcurrentAccess exceptions.
- class QueueCallback : public SGReferenced {
- public:
- virtual ~QueueCallback() {}
- virtual void operator()() = 0;
- };
-
- class DiscoverObjectCallback : public QueueCallback {
- public:
- DiscoverObjectCallback(SGSharedPtr<RTIObjectClass> objectClass, SGSharedPtr<RTIObjectInstance> objectInstance, const RTIData& tag) :
- _objectClass(objectClass),
- _objectInstance(objectInstance),
- _tag(tag)
- { }
- virtual void operator()()
- {
- _objectClass->discoverInstance(_objectInstance.get(), _tag);
- _objectInstance->requestObjectAttributeValueUpdate();
- }
- private:
- SGSharedPtr<RTIObjectClass> _objectClass;
- SGSharedPtr<RTIObjectInstance> _objectInstance;
- RTIData _tag;
- };
- class RemoveObjectCallback : public QueueCallback {
- public:
- RemoveObjectCallback(SGSharedPtr<RTIObjectInstance> objectInstance, const RTIData& tag) :
- _objectInstance(objectInstance),
- _tag(tag)
- { }
- virtual void operator()()
- {
- _objectInstance->removeInstance(_tag);
- }
- private:
- SGSharedPtr<RTIObjectInstance> _objectInstance;
- RTIData _tag;
- };
-