X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLAArrayDataType.cxx;h=e5302a8bcaa36d29cfdbba1670e0b00918e114e5;hb=7dc8bf3aa41655e8ae63a7193fe99b5a7802a6b7;hp=0eac23648aed893c2aab31169f6f9e98cfd63870;hpb=44ff23b227dcc1f3efbd10a4df4d8b723165c11c;p=simgear.git diff --git a/simgear/hla/HLAArrayDataType.cxx b/simgear/hla/HLAArrayDataType.cxx index 0eac2364..e5302a8b 100644 --- a/simgear/hla/HLAArrayDataType.cxx +++ b/simgear/hla/HLAArrayDataType.cxx @@ -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 @@ -15,6 +15,12 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + #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::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