// 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 "HLADataElement.hxx"
#include <simgear/debug/logstream.hxx>
+#include "HLADataElementVisitor.hxx"
+
namespace simgear {
HLADataElement::PathElement::Data::~Data()
{
}
+void
+HLADataElement::setTimeStamp(const SGTimeStamp& timeStamp)
+{
+ if (!_stamp.valid())
+ return;
+ _stamp->setTimeStamp(timeStamp);
+}
+
+void
+HLADataElement::setTimeStampValid(bool timeStampValid)
+{
+ if (!_stamp.valid())
+ return;
+ _stamp->setTimeStampValid(timeStampValid);
+}
+
+double
+HLADataElement::getTimeDifference(const SGTimeStamp& timeStamp) const
+{
+ if (!_stamp.valid())
+ return 0;
+ if (!_stamp->getTimeStampValid())
+ return 0;
+ return (timeStamp - _stamp->getTimeStamp()).toSecs();
+}
+
+void
+HLADataElement::createStamp()
+{
+ _setStamp(new Stamp);
+ setDirty(true);
+}
+
+void
+HLADataElement::attachStamp(HLADataElement& dataElement)
+{
+ _setStamp(dataElement._getStamp());
+}
+
+void
+HLADataElement::clearStamp()
+{
+ _setStamp(0);
+}
+
+void
+HLADataElement::accept(HLADataElementVisitor& visitor)
+{
+ visitor.apply(*this);
+}
+
+void
+HLADataElement::accept(HLAConstDataElementVisitor& visitor) const
+{
+ visitor.apply(*this);
+}
+
std::string
HLADataElement::toString(const Path& path)
{
return s;
}
-HLADataElement::AttributePathPair
-HLADataElement::toAttributePathPair(const std::string& s)
+HLADataElement::StringPathPair
+HLADataElement::toStringPathPair(const std::string& s)
{
Path path;
- // Skip the initial attribute name if given
+ // Skip the initial attribute/parameter name if given
std::string::size_type i = s.find_first_of("[.");
std::string attribute = s.substr(0, i);
while (i < s.size()) {
if (10 <= v) {
SG_LOG(SG_NETWORK, SG_WARN, "HLADataElement: invalid character in array subscript for \""
<< s << "\" at \"" << attribute << toString(path) << "\"!");
- return AttributePathPair();
+ return StringPathPair();
}
index *= 10;
index += v;
if (s.size() <= ++i) {
SG_LOG(SG_NETWORK, SG_WARN, "HLADataElement: invalid terminating '.' for \""
<< s << "\"!");
- return AttributePathPair();
+ return StringPathPair();
}
std::string::size_type e = s.find_first_of("[.", i);
path.push_back(s.substr(i, e - i));
}
}
- return AttributePathPair(attribute, path);
+ return StringPathPair(attribute, path);
+}
+
+void
+HLADataElement::_setStamp(HLADataElement::Stamp* stamp)
+{
+ _stamp = stamp;
}
}