-// Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
+// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
#define RTIObjectClass_hxx
#include <string>
-#include <vector>
#include "simgear/structure/SGReferenced.hxx"
-#include "simgear/structure/SGSharedPtr.hxx"
-#include "simgear/structure/SGWeakPtr.hxx"
#include "RTIData.hxx"
#include "HLAObjectClass.hxx"
namespace simgear {
+class RTIData;
class RTIObjectInstance;
class HLAObjectClass;
class RTIObjectClass : public SGReferenced {
public:
- RTIObjectClass(HLAObjectClass* hlaObjectClass);
+ RTIObjectClass(HLAObjectClass* objectClass);
virtual ~RTIObjectClass();
- virtual std::string getName() const = 0;
+ virtual bool resolveAttributeIndex(const std::string& name, unsigned index) = 0;
virtual unsigned getNumAttributes() const = 0;
- virtual unsigned getAttributeIndex(const std::string& name) const = 0;
- virtual unsigned getOrCreateAttributeIndex(const std::string& name) = 0;
- virtual bool publish(const std::set<unsigned>& indexSet) = 0;
+ virtual bool publish(const HLAIndexList& indexList) = 0;
virtual bool unpublish() = 0;
- virtual bool subscribe(const std::set<unsigned>& indexSet, bool) = 0;
+ virtual bool subscribe(const HLAIndexList& indexList, bool) = 0;
virtual bool unsubscribe() = 0;
// Factory to create an object instance that can be used in this current federate
virtual RTIObjectInstance* registerObjectInstance(HLAObjectInstance*) = 0;
+ // Call back into HLAObjectClass
void discoverInstance(RTIObjectInstance* objectInstance, const RTIData& tag) const;
void startRegistration() const;
void stopRegistration() const;
- void setAttributeDataType(unsigned index, SGSharedPtr<const HLADataType> dataType)
- {
- if (_attributeDataVector.size() <= index)
- return;
- _attributeDataVector[index]._dataType = dataType;
- }
- const HLADataType* getAttributeDataType(unsigned index) const
- {
- if (_attributeDataVector.size() <= index)
- return 0;
- return _attributeDataVector[index]._dataType.get();
- }
-
- HLAUpdateType getAttributeUpdateType(unsigned index) const
- {
- if (_attributeDataVector.size() <= index)
- return HLAUndefinedUpdate;
- return _attributeDataVector[index]._updateType;
- }
- void setAttributeUpdateType(unsigned index, HLAUpdateType updateType)
- {
- if (_attributeDataVector.size() <= index)
- return;
- _attributeDataVector[index]._updateType = updateType;
- }
-
- bool getAttributeSubscribed(unsigned index) const
- {
- if (_attributeDataVector.size() <= index)
- return false;
- return _attributeDataVector[index]._subscribed;
- }
- bool getAttributePublished(unsigned index) const
- {
- if (_attributeDataVector.size() <= index)
- return false;
- return _attributeDataVector[index]._published;
- }
- std::string getAttributeName(unsigned index) const
- {
- if (_attributeDataVector.size() <= index)
- return std::string();
- return _attributeDataVector[index]._name;
- }
-
-protected:
- struct AttributeData {
- AttributeData(const std::string& name) : _name(name), _subscribed(false), _published(false), _updateType(HLAUndefinedUpdate) {}
- std::string _name;
- SGSharedPtr<const HLADataType> _dataType;
- bool _subscribed;
- bool _published;
- HLAUpdateType _updateType;
- };
- typedef std::vector<AttributeData> AttributeDataVector;
- AttributeDataVector _attributeDataVector;
-
private:
- SGWeakPtr<HLAObjectClass> _hlaObjectClass;
+ HLAObjectClass* _objectClass;
+
+ friend class HLAObjectClass;
};
}