X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLAFixedRecordDataElement.cxx;h=f1275808537b384a1c583652958438a2eb30d81d;hb=201cb61f842ef50a19438e3872ba22e588fa1afc;hp=000339823eda0fa58a9b5c2edc0b6cef397fc6b1;hpb=d6361dfee43c0595a19d409b438c6d1cdd65d2ea;p=simgear.git diff --git a/simgear/hla/HLAFixedRecordDataElement.cxx b/simgear/hla/HLAFixedRecordDataElement.cxx index 00033982..f1275808 100644 --- a/simgear/hla/HLAFixedRecordDataElement.cxx +++ b/simgear/hla/HLAFixedRecordDataElement.cxx @@ -146,6 +146,54 @@ HLAFixedRecordDataElement::setDataType(const HLADataType* dataType) return true; } +bool +HLAFixedRecordDataElement::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 (getNumFields() <= index) + return false; + if (!getField(index) && getFieldDataType(index)) { + HLADataElementFactoryVisitor visitor; + getFieldDataType(index)->accept(visitor); + setField(index, visitor.getDataElement()); + } + if (!getField(index)) + return false; + return getField(index)->setDataElement(begin, end, dataElement); + } else { + if (!dataElement->setDataType(getFieldDataType(index))) + return false; + setField(index, dataElement); + return true; + } +} + +HLADataElement* +HLAFixedRecordDataElement::getDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end) +{ + if (begin == end) + return this; + HLADataElement* dataElement = getField(*begin); + if (!dataElement) + return 0; + return dataElement->getDataElement(++begin, end); +} + +const HLADataElement* +HLAFixedRecordDataElement::getDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end) const +{ + if (begin == end) + return this; + const HLADataElement* dataElement = getField(*begin); + if (!dataElement) + return 0; + return dataElement->getDataElement(++begin, end); +} + bool HLAFixedRecordDataElement::decodeField(HLADecodeStream& stream, unsigned i) {