X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLAArrayDataElement.cxx;h=191a84eb1d766130bcbe0c789c710526d1c923e5;hb=d4310a7f3b27b8403ba1ec030cfd3b4c6c565f24;hp=5fcbbd0a0ecc173ada7b6986d2d65c4b216e5d11;hpb=a07ca86207108af66ca3335e4fcc11935c5ef079;p=simgear.git diff --git a/simgear/hla/HLAArrayDataElement.cxx b/simgear/hla/HLAArrayDataElement.cxx index 5fcbbd0a..191a84eb 100644 --- a/simgear/hla/HLAArrayDataElement.cxx +++ b/simgear/hla/HLAArrayDataElement.cxx @@ -15,6 +15,12 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + #include "HLAArrayDataElement.hxx" #include @@ -102,6 +108,54 @@ HLAArrayDataElement::~HLAArrayDataElement() clearStamp(); } +bool +HLAArrayDataElement::setDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end, HLADataElement* dataElement) +{ + // Must have happened in the parent + if (begin == end) + return false; + unsigned index = *begin; + if (++begin != end) { + if (getNumElements() <= index && !setNumElements(index + 1)) + return false; + if (!getElement(index) && getElementDataType()) { + HLADataElementFactoryVisitor visitor; + getElementDataType()->accept(visitor); + setElement(index, visitor.getDataElement()); + } + if (!getElement(index)) + return false; + return getElement(index)->setDataElement(begin, end, dataElement); + } else { + if (!dataElement->setDataType(getElementDataType())) + return false; + setElement(index, dataElement); + return true; + } +} + +HLADataElement* +HLAArrayDataElement::getDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end) +{ + if (begin == end) + return this; + HLADataElement* dataElement = getElement(*begin); + if (!dataElement) + return 0; + return dataElement->getDataElement(++begin, end); +} + +const HLADataElement* +HLAArrayDataElement::getDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end) const +{ + if (begin == end) + return this; + const HLADataElement* dataElement = getElement(*begin); + if (!dataElement) + return 0; + return dataElement->getDataElement(++begin, end); +} + bool HLAArrayDataElement::setNumElements(unsigned size) { @@ -111,6 +165,7 @@ HLAArrayDataElement::setNumElements(unsigned size) _elementVector.resize(size); for (unsigned i = oldSize; i < size; ++i) _elementVector[i] = newElement(i); + setDirty(true); return true; } @@ -177,6 +232,7 @@ HLAArrayDataElement::setElement(unsigned index, HLADataElement* value) _elementVector[index] = value; if (value) value->attachStamp(*this); + setDirty(true); } void @@ -252,6 +308,7 @@ HLAVariantArrayDataElement::setNumElements(unsigned size) _elementVector.resize(size); for (unsigned i = oldSize; i < size; ++i) _elementVector[i] = newElement(); + setDirty(true); return true; } @@ -318,6 +375,7 @@ HLAVariantArrayDataElement::setElement(unsigned index, HLAVariantRecordDataEleme _elementVector[index] = value; if (value) value->attachStamp(*this); + setDirty(true); } void