X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fhla%2FHLADataElement.cxx;h=da0c8e9a506b109c95ad38fa3492d2e22d0b0ac5;hb=9fd90e26f7da96ec968ad22dc20fc0041bc02136;hp=ae981128543722ed91837ab955ef1ae2021750a4;hpb=ce71b8c1cf761742ab88975442f4037b5e460114;p=simgear.git diff --git a/simgear/hla/HLADataElement.cxx b/simgear/hla/HLADataElement.cxx index ae981128..da0c8e9a 100644 --- a/simgear/hla/HLADataElement.cxx +++ b/simgear/hla/HLADataElement.cxx @@ -15,173 +15,107 @@ // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // -#include "HLADataElement.hxx" +#ifdef HAVE_CONFIG_H +# include +#endif -#include +#include -namespace simgear { +#include "HLADataElement.hxx" -HLADataElement::PathElement::Data::~Data() -{ -} +#include -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; } }