17 #include <vl/stateEncoderFactory.h>
19 namespace makVrfVrlinkExtToolkit
23 template <
typename StateRepType>
26 std::map<DtString, RTI::AttributeHandle> attrNamesToHandles;
28 const RTI::AttributeHandleSet& ahs = desc->attrHandleSet();
34 DtObjClassDesc* baseClass = desc->baseClass();
37 RTI::AttributeHandleSet::const_iterator itr = ahs.begin();
38 const RTI::AttributeHandleSet::const_iterator end = ahs.end();
39 for (; itr != end; itr++)
41 DtString attrName = desc->attributeNameByHandle(*itr);
42 if(!baseClass->hasAttribute(attrName.c_str()))
44 attrNamesToHandles.insert(std::make_pair(attrName, *itr));
50 for (RTI::ULong i = 0; i < ahs.size(); i++)
52 RTI::AttributeHandle hdl = ahs.getHandle(i);
53 DtString attrName = desc->attributeNameByHandle(hdl);
54 if(!baseClass->hasAttribute(attrName.c_str()))
56 attrNamesToHandles.insert(std::make_pair(attrName, hdl));
68 const DtString hla13RootName(
"ObjectRoot.");
69 const DtString hla1516RootName(
"HLAobjectRoot.");
71 const char* name1Ptr = name1.c_str();
72 const char* name2Ptr = name2.c_str();
74 if (name1.findString(hla13RootName) == 0)
76 name1Ptr += hla13RootName.size();
78 else if (name1.findString(hla1516RootName) == 0)
80 name1Ptr += hla1516RootName.size();
83 if (name2.findString(hla13RootName) == 0)
85 name2Ptr += hla13RootName.size();
87 else if (name2.findString(hla1516RootName) == 0)
89 name2Ptr += hla1516RootName.size();
92 return (strcmp(name1Ptr, name2Ptr) == 0);
101 template <
typename StateRepType,
typename EncoderType,
typename PublisherType,
typename ReflectedObjType>
105 DtExerciseConn* exConn)
114 theFullClassName = fullClassName;
115 thePublisherName = publisherName;
116 theReflListName = reflListName;
118 DtObjClassDesc* classDesc = exConn->fom()->objClassByName(theFullClassName.c_str());
125 exConn->fomMapper()->stateEncoderFactory()->addEncoder(classDesc->handle(),
129 classDesc->setUnknownAttributeEncoder((DtHlaStateEncoder::DtAttributeEncoder)
133 classDesc->setUnknownAttributeDecoder((DtHlaStateDecoder::DtAttributeDecoder)
138 std::set<DtString> objClassNames;
139 const std::set<DtString>* currObjClassNames = exConn->fomMapper()->objectClassNames(theReflListName.c_str());
140 if(currObjClassNames)
142 objClassNames = *currObjClassNames;
147 bool alreadyPresent =
false;
148 std::set<DtString>::const_iterator objClassIter = objClassNames.begin();
149 for (; objClassIter != objClassNames.end() && !alreadyPresent; ++objClassIter)
153 alreadyPresent =
true;
159 objClassNames.insert(theFullClassName);
160 exConn->fomMapper()->setObjectClassNames(theReflListName.c_str(), objClassNames);
164 PublisherType::setStateRepCreator((
typename PublisherType::DtStateRepCreator)
166 ReflectedObjType::setStateRepCreator((
typename ReflectedObjType::DtStateRepCreator)
167 DtGenericAttributeStateRepository<StateRepType>::create);
170 exConn->fomMapper()->setObjectClassToChoose(thePublisherName.c_str(), theFullClassName.c_str());
173 setAttributeNameToHandleMap<StateRepType>(classDesc);
185 template <
typename StateRepType,
typename EncoderType,
typename PublisherType,
typename ReflectedObjType>
189 DtFomMapper::DtObjectClassChooser classChooser,
190 DtExerciseConn* exConn)
192 static std::vector<DtString> theFullClassNames;
195 theFullClassNames = fullClassNames;
196 thePublisherName = publisherName;
197 theReflListName = reflListName;
199 std::set<DtString> objClassNames;
202 const std::set<DtString>* currObjClassNames = *exConn->fomMapper()->objectClassNames(theReflListName.c_str());
203 if(currObjClassNames)
205 objClassNames = *currObjClassNames;
209 PublisherType::setStateRepCreator((
typename PublisherType::DtStateRepCreator)StateRepType::create);
210 ReflectedObjType::setStateRepCreator((
typename ReflectedObjType::DtStateRepCreator)StateRepType::create);
212 for(
int i = 0; i < theFullClassNames.size(); ++i)
214 DtObjClassDesc* classDesc = exConn->fom()->objClassByName(theFullClassNames[i].c_str());
221 exConn->fomMapper()->stateEncoderFactory()->addEncoder(classDesc->handle(),
225 classDesc->setUnknownAttributeEncoder((DtHlaStateEncoder::DtAttributeEncoder)
229 classDesc->setUnknownAttributeDecoder((DtHlaStateDecoder::DtAttributeDecoder)
234 bool alreadyPresent =
false;
235 std::set<DtString>::const_iterator objClassIter = objClassNames.begin();
236 for (; objClassIter != objClassNames.end() && !alreadyPresent; ++objClassIter)
240 alreadyPresent =
true;
246 objClassNames.insert(theFullClassNames[i]);
247 exConn->fomMapper()->setObjectClassNames(theReflListName.c_str(), objClassNames);
251 setAttributeNameToHandleMap<StateRepType>(classDesc);
257 exConn->fomMapper()->setObjectClassNames(theReflListName.c_str(), objClassNames);
260 exConn->fomMapper()->setObjectClassChooser(thePublisherName.c_str(), classChooser);