]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLAArrayDataElement.cxx
HTTP: Rename urlretrieve/urlload to save/load.
[simgear.git] / simgear / hla / HLAArrayDataElement.cxx
index 47cebb58bc566bf994be8590f7e353aa8c81f85b..1d7f40d5b06be4dbf858904a550a6abdf175a561 100644 (file)
@@ -108,6 +108,69 @@ 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::setDataType(const HLADataType* dataType)
+{
+    if (!HLAAbstractArrayDataElement::setDataType(dataType))
+        return false;
+    for (unsigned i = 0; i < getNumElements(); ++i) {
+        HLADataElement* dataElement = getElement(i);
+        if (!dataElement)
+            continue;
+        if (!dataElement->setDataType(getElementDataType()))
+            return false;
+    }
+    return true;
+}
+
 bool
 HLAArrayDataElement::setNumElements(unsigned size)
 {