-// 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"
namespace simgear {
HLAArrayDataType::HLAArrayDataType(const std::string& name) :
- HLADataType(name)
+ HLADataType(name),
+ _isOpaque(false),
+ _isString(false)
{
}
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) :
}
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