]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLAArrayDataType.cxx
hla: Fixes for the data element index implementation.
[simgear.git] / simgear / hla / HLAArrayDataType.cxx
index 0eac23648aed893c2aab31169f6f9e98cfd63870..e5302a8bcaa36d29cfdbba1670e0b00918e114e5 100644 (file)
@@ -1,4 +1,4 @@
-// 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
 // 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 "HLAArrayDataType.hxx"
 
 #include "HLAArrayDataElement.hxx"
@@ -22,7 +28,9 @@
 namespace simgear {
 
 HLAArrayDataType::HLAArrayDataType(const std::string& name) :
-    HLADataType(name)
+    HLADataType(name),
+    _isOpaque(false),
+    _isString(false)
 {
 }
 
@@ -42,15 +50,40 @@ HLAArrayDataType::toArrayDataType() const
     return this;
 }
 
+void
+HLAArrayDataType::releaseDataTypeReferences()
+{
+    _elementDataType = 0;
+    HLADataType::releaseDataTypeReferences();
+}
+
 void
 HLAArrayDataType::setElementDataType(const HLADataType* elementDataType)
 {
-    // FIXME this only works if we do not reset the alignment to something smaller
-    if (getAlignment() < elementDataType->getAlignment())
-        setAlignment(elementDataType->getAlignment());
     _elementDataType = elementDataType;
 }
 
+void
+HLAArrayDataType::setIsOpaque(bool isOpaque)
+{
+    _isOpaque = isOpaque;
+}
+
+void
+HLAArrayDataType::setIsString(bool isString)
+{
+    _isString = isString;
+}
+
+void
+HLAArrayDataType::_recomputeAlignmentImplementation()
+{
+    unsigned alignment = 1;
+    if (const HLADataType* dataType = getElementDataType())
+        alignment = std::max(alignment, dataType->getAlignment());
+    setAlignment(alignment);
+}
+
 ///////////////////////////////////////////////////////////////////////////////////
 
 HLAFixedArrayDataType::HLAFixedArrayDataType(const std::string& name) :
@@ -146,13 +179,20 @@ HLAVariableArrayDataType::encode(HLAEncodeStream& stream, const HLAAbstractArray
 }
 
 void
-HLAVariableArrayDataType::setSizeDataType(const HLADataType* sizeDataType)
+HLAVariableArrayDataType::setSizeDataType(const HLABasicDataType* sizeDataType)
 {
-    // FIXME this only works if we do not reset the alignment to something smaller
-    if (getAlignment() < sizeDataType->getAlignment())
-        setAlignment(sizeDataType->getAlignment());
     _sizeDataType = sizeDataType;
-    // setAlignment(SGMisc<unsigned>::max(_sizeDataType->getAlignment(), _elementDataType->getAlignment());
+}
+
+void
+HLAVariableArrayDataType::_recomputeAlignmentImplementation()
+{
+    unsigned alignment = 1;
+    if (const HLADataType* dataType = getElementDataType())
+        alignment = std::max(alignment, dataType->getAlignment());
+    if (const HLADataType* dataType = getSizeDataType())
+        alignment = std::max(alignment, dataType->getAlignment());
+    setAlignment(alignment);
 }
 
 } // namespace simgear