]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLAVariantRecordDataType.cxx
Ensure uniform are there before trying to use them
[simgear.git] / simgear / hla / HLAVariantRecordDataType.cxx
index ff7488b9800dbf0ee4cb7aafbf8fa18616a2697a..d5c5d44b0ebcec6e14811c9d09fc8478b19ff496 100644 (file)
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
 
+#ifdef HAVE_CONFIG_H
+#  include <simgear_config.h>
+#endif
+
+#include <simgear/compiler.h>
+
 #include "HLAVariantRecordDataType.hxx"
 
 #include "HLADataTypeVisitor.hxx"
@@ -43,6 +49,13 @@ HLAVariantRecordDataType::toVariantRecordDataType() const
     return this;
 }
 
+void
+HLAVariantRecordDataType::releaseDataTypeReferences()
+{
+    for (AlternativeList::iterator i = _alternativeList.begin(); i != _alternativeList.end(); ++i)
+        i->_dataType = 0;
+}
+
 bool
 HLAVariantRecordDataType::decode(HLADecodeStream& stream, HLAAbstractVariantRecordDataElement& value) const
 {
@@ -94,8 +107,20 @@ HLAVariantRecordDataType::addAlternative(const std::string& name, const std::str
     _alternativeList[index]._name = name;
     _alternativeList[index]._dataType = dataType;
     _alternativeList[index]._semantics = semantics;
-    setAlignment(SGMisc<unsigned>::max(getAlignment(), dataType->getAlignment()));
     return true;
 }
 
+void
+HLAVariantRecordDataType::_recomputeAlignmentImplementation()
+{
+    unsigned alignment = 1;
+    if (const HLADataType* dataType = getEnumeratedDataType())
+        alignment = std::max(alignment, dataType->getAlignment());
+    for (unsigned i = 0; i < getNumAlternatives(); ++i) {
+        if (const HLADataType* dataType = getAlternativeDataType(i))
+            alignment = std::max(alignment, dataType->getAlignment());
+    }
+    setAlignment(alignment);
+}
+
 } // namespace simgear