// 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 "HLAArrayDataElement.hxx"
#include <simgear/debug/logstream.hxx>
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)
{
_elementVector.resize(size);
for (unsigned i = oldSize; i < size; ++i)
_elementVector[i] = newElement(i);
+ setDirty(true);
return true;
}
_elementVector[index] = value;
if (value)
value->attachStamp(*this);
+ setDirty(true);
}
void
_elementVector.resize(size);
for (unsigned i = oldSize; i < size; ++i)
_elementVector[i] = newElement();
+ setDirty(true);
return true;
}
_elementVector[index] = value;
if (value)
value->attachStamp(*this);
+ setDirty(true);
}
void