]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLAVariantRecordDataElement.cxx
Fix some warnings reported from msvc
[simgear.git] / simgear / hla / HLAVariantRecordDataElement.cxx
index 5dac6d52ba82b4b042b38fc4dcb7b4f232ff1652..704d4360d459e0e71f72627ea1f4e4e370979c00 100644 (file)
 // 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 "HLAVariantRecordDataElement.hxx"
 
 #include <simgear/debug/logstream.hxx>
 
 #include "HLADataElementVisitor.hxx"
+#include "HLADataTypeVisitor.hxx"
 
 namespace simgear {
 
@@ -116,6 +123,58 @@ HLAVariantRecordDataElement::~HLAVariantRecordDataElement()
     clearStamp();
 }
 
+bool
+HLAVariantRecordDataElement::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 (!setAlternativeIndex(index))
+            return false;
+        if (!_dataElement.valid() && getAlternativeDataType()) {
+            HLADataElementFactoryVisitor visitor;
+            getAlternativeDataType()->accept(visitor);
+            _dataElement = visitor.getDataElement();
+        }
+        if (!_dataElement.valid())
+            return false;
+        return _dataElement->setDataElement(begin, end, dataElement);
+    } else {
+        if (!setAlternativeIndex(index))
+            return false;
+        if (!dataElement->setDataType(getAlternativeDataType()))
+            return false;
+        _dataElement = dataElement;
+        return true;
+    }
+}
+
+HLADataElement*
+HLAVariantRecordDataElement::getDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end)
+{
+    if (begin == end)
+        return this;
+    if (getAlternativeIndex() != *begin)
+        return 0;
+    if (!_dataElement.valid())
+        return 0;
+    return _dataElement->getDataElement(++begin, end);
+}
+
+const HLADataElement*
+HLAVariantRecordDataElement::getDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end) const
+{
+    if (begin == end)
+        return this;
+    if (getAlternativeIndex() != *begin)
+        return 0;
+    if (!_dataElement.valid())
+        return 0;
+    return _dataElement->getDataElement(++begin, end);
+}
+
 bool
 HLAVariantRecordDataElement::setAlternativeIndex(unsigned index)
 {