]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLAFixedRecordDataElement.cxx
math: Move lerp function into SGMisc.
[simgear.git] / simgear / hla / HLAFixedRecordDataElement.cxx
index d0980b957d22eab206cdf61bfde561e5651ad6a1..9a0311bdec0a83b2ef8ee1447db031e291c36345 100644 (file)
@@ -20,6 +20,8 @@
 #include <string>
 #include <vector>
 #include <simgear/debug/logstream.hxx>
+
+#include "HLADataElementVisitor.hxx"
 #include "HLADataTypeVisitor.hxx"
 
 namespace simgear {
@@ -33,6 +35,18 @@ HLAAbstractFixedRecordDataElement::~HLAAbstractFixedRecordDataElement()
 {
 }
 
+void
+HLAAbstractFixedRecordDataElement::accept(HLADataElementVisitor& visitor)
+{
+    visitor.apply(*this);
+}
+
+void
+HLAAbstractFixedRecordDataElement::accept(HLAConstDataElementVisitor& visitor) const
+{
+    visitor.apply(*this);
+}
+
 bool
 HLAAbstractFixedRecordDataElement::decode(HLADecodeStream& stream)
 {
@@ -106,6 +120,7 @@ HLAFixedRecordDataElement::HLAFixedRecordDataElement(const HLAFixedRecordDataTyp
 
 HLAFixedRecordDataElement::~HLAFixedRecordDataElement()
 {
+    clearStamp();
 }
 
 bool
@@ -167,7 +182,12 @@ HLAFixedRecordDataElement::setField(unsigned index, HLADataElement* value)
 {
     if (getNumFields() <= index)
         return;
+    if (_fieldVector[index].valid())
+        _fieldVector[index]->clearStamp();
     _fieldVector[index] = value;
+    if (value)
+        value->attachStamp(*this);
+    setDirty(true);
 }
 
 void
@@ -176,4 +196,15 @@ HLAFixedRecordDataElement::setField(const std::string& name, HLADataElement* val
     setField(getFieldNumber(name), value);
 }
 
+void
+HLAFixedRecordDataElement::_setStamp(Stamp* stamp)
+{
+    HLAAbstractFixedRecordDataElement::_setStamp(stamp);
+    for (FieldVector::iterator i = _fieldVector.begin(); i != _fieldVector.end(); ++i) {
+        if (!i->valid())
+            continue;
+        (*i)->attachStamp(*this);
+    }
+}
+
 }