]> git.mxchange.org Git - simgear.git/blobdiff - simgear/hla/HLADataElement.cxx
hla: Remove HLADataElement::Path based attribute handling.
[simgear.git] / simgear / hla / HLADataElement.cxx
index ae981128543722ed91837ab955ef1ae2021750a4..da0c8e9a506b109c95ad38fa3492d2e22d0b0ac5 100644 (file)
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
 
-#include "HLADataElement.hxx"
+#ifdef HAVE_CONFIG_H
+#  include <simgear_config.h>
+#endif
 
-#include <simgear/debug/logstream.hxx>
+#include <simgear/compiler.h>
 
-namespace simgear {
+#include "HLADataElement.hxx"
 
-HLADataElement::PathElement::Data::~Data()
-{
-}
+#include <simgear/debug/logstream.hxx>
 
-const HLADataElement::PathElement::FieldData*
-HLADataElement::PathElement::Data::toFieldData() const
-{
-    return 0;
-}
+#include "HLADataElementVisitor.hxx"
 
-const HLADataElement::PathElement::IndexData*
-HLADataElement::PathElement::Data::toIndexData() const
-{
-    return 0;
-}
+namespace simgear {
 
-HLADataElement::PathElement::FieldData::FieldData(const std::string& name) :
-    _name(name)
+HLADataElement::~HLADataElement()
 {
 }
 
-HLADataElement::PathElement::FieldData::~FieldData()
+bool
+HLADataElement::setDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end, HLADataElement* dataElement)
 {
+    return false;
 }
 
-const HLADataElement::PathElement::FieldData*
-HLADataElement::PathElement::FieldData::toFieldData() const
+HLADataElement*
+HLADataElement::getDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end)
 {
+    if (begin != end)
+        return 0;
     return this;
 }
 
-bool
-HLADataElement::PathElement::FieldData::less(const Data* data) const
+const HLADataElement*
+HLADataElement::getDataElement(HLADataElementIndex::const_iterator begin, HLADataElementIndex::const_iterator end) const
 {
-    const FieldData* fieldData = data->toFieldData();
-    // IndexData is allways smaller than FieldData
-    if (!fieldData)
-        return false;
-    return _name < fieldData->_name;
-}
-
-bool
-HLADataElement::PathElement::FieldData::equal(const Data* data) const
-{
-    const FieldData* fieldData = data->toFieldData();
-    // IndexData is allways smaller than FieldData
-    if (!fieldData)
-        return false;
-    return _name == fieldData->_name;
+    if (begin != end)
+        return 0;
+    return this;
 }
 
 void
-HLADataElement::PathElement::FieldData::append(std::string& s) const
-{
-    s.append(1, std::string::value_type('.'));
-    s.append(_name);
-}
-
-HLADataElement::PathElement::IndexData::IndexData(unsigned index) :
-    _index(index)
+HLADataElement::setTimeStamp(const SGTimeStamp& timeStamp)
 {
+    if (!_stamp.valid())
+        return;
+    _stamp->setTimeStamp(timeStamp);
 }
 
-HLADataElement::PathElement::IndexData::~IndexData()
+void
+HLADataElement::setTimeStampValid(bool timeStampValid)
 {
+    if (!_stamp.valid())
+        return;
+    _stamp->setTimeStampValid(timeStampValid);
 }
 
-const HLADataElement::PathElement::IndexData*
-HLADataElement::PathElement::IndexData::toIndexData() const
+double
+HLADataElement::getTimeDifference(const SGTimeStamp& timeStamp) const
 {
-    return this;
+    if (!_stamp.valid())
+        return 0;
+    if (!_stamp->getTimeStampValid())
+        return 0;
+    return (timeStamp - _stamp->getTimeStamp()).toSecs();
 }
 
-bool
-HLADataElement::PathElement::IndexData::less(const Data* data) const
+void
+HLADataElement::createStamp()
 {
-    const IndexData* indexData = data->toIndexData();
-    // IndexData is allways smaller than FieldData
-    if (!indexData)
-        return true;
-    return _index < indexData->_index;
+    _setStamp(new Stamp);
+    setDirty(true);
 }
 
-bool
-HLADataElement::PathElement::IndexData::equal(const Data* data) const
+void
+HLADataElement::attachStamp(HLADataElement& dataElement)
 {
-    const IndexData* indexData = data->toIndexData();
-    // IndexData is allways smaller than FieldData
-    if (!indexData)
-        return false;
-    return _index == indexData->_index;
+    _setStamp(dataElement._getStamp());
 }
 
 void
-HLADataElement::PathElement::IndexData::append(std::string& s) const
+HLADataElement::clearStamp()
 {
-    s.append(1, std::string::value_type('['));
-    unsigned value = _index;
-    do {
-        s.append(1, std::string::value_type('0' + value % 10));
-    } while (value /= 10);
-    s.append(1, std::string::value_type(']'));
+    _setStamp(0);
 }
 
-HLADataElement::~HLADataElement()
+void
+HLADataElement::accept(HLADataElementVisitor& visitor)
 {
+    visitor.apply(*this);
 }
 
-std::string
-HLADataElement::toString(const Path& path)
+void
+HLADataElement::accept(HLAConstDataElementVisitor& visitor) const
 {
-    std::string s;
-    for (Path::const_iterator i = path.begin(); i != path.end(); ++i)
-        i->append(s);
-    return s;
+    visitor.apply(*this);
 }
 
-HLADataElement::AttributePathPair
-HLADataElement::toAttributePathPair(const std::string& s)
+void
+HLADataElement::_setStamp(HLADataElement::Stamp* stamp)
 {
-    Path path;
-    // Skip the initial attribute name if given
-    std::string::size_type i = s.find_first_of("[.");
-    std::string attribute = s.substr(0, i);
-    while (i < s.size()) {
-        if (s[i] == '[') {
-            ++i;
-            unsigned index = 0;
-            while (i < s.size()) {
-                if (s[i] == ']')
-                    break;
-                unsigned v = s[i] - '0';
-                // Error, no number
-                if (10 <= v) {
-                    SG_LOG(SG_NETWORK, SG_WARN, "HLADataElement: invalid character in array subscript for \""
-                           << s << "\" at \"" << attribute << toString(path) << "\"!");
-                    return AttributePathPair();
-                }
-                index *= 10;
-                index += v;
-                ++i;
-            }
-            path.push_back(index);
-            ++i;
-            continue;
-        }
-        if (s[i] == '.') {
-            // Error, . cannot be last
-            if (s.size() <= ++i) {
-                SG_LOG(SG_NETWORK, SG_WARN, "HLADataElement: invalid terminating '.' for \""
-                       << s << "\"!");
-                return AttributePathPair();
-            }
-            std::string::size_type e = s.find_first_of("[.", i);
-            path.push_back(s.substr(i, e - i));
-            i = e;
-            continue;
-        }
-    }
-
-    return AttributePathPair(attribute, path);
+    _stamp = stamp;
 }
 
 }