1 // Copyright (C) 2009 - 2010 Mathias Froehlich - Mathias.Froehlich@web.de
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Library General Public
5 // License as published by the Free Software Foundation; either
6 // version 2 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Library General Public License for more details.
13 // You should have received a copy of the GNU General Public License
14 // along with this program; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 #include "HLAEnumeratedDataElement.hxx"
20 #include <simgear/debug/logstream.hxx>
22 #include "HLADataElementVisitor.hxx"
26 HLAAbstractEnumeratedDataElement::HLAAbstractEnumeratedDataElement(const HLAEnumeratedDataType* dataType) :
31 HLAAbstractEnumeratedDataElement::~HLAAbstractEnumeratedDataElement()
36 HLAAbstractEnumeratedDataElement::accept(HLADataElementVisitor& visitor)
42 HLAAbstractEnumeratedDataElement::accept(HLAConstDataElementVisitor& visitor) const
48 HLAAbstractEnumeratedDataElement::decode(HLADecodeStream& stream)
50 if (!_dataType.valid())
53 if (!_dataType->decode(stream, index))
55 setEnumeratorIndex(index);
60 HLAAbstractEnumeratedDataElement::encode(HLAEncodeStream& stream) const
62 if (!_dataType.valid())
64 return _dataType->encode(stream, getEnumeratorIndex());
67 const HLAEnumeratedDataType*
68 HLAAbstractEnumeratedDataElement::getDataType() const
70 return _dataType.get();
74 HLAAbstractEnumeratedDataElement::setDataType(const HLADataType* dataType)
76 const HLAEnumeratedDataType* enumeratedDataType = dataType->toEnumeratedDataType();
77 if (!enumeratedDataType) {
78 SG_LOG(SG_NETWORK, SG_WARN, "HLAEnumeratedDataType: unable to set data type!");
81 setDataType(enumeratedDataType);
86 HLAAbstractEnumeratedDataElement::setDataType(const HLAEnumeratedDataType* dataType)
91 const HLABasicDataType*
92 HLAAbstractEnumeratedDataElement::getRepresentationDataType() const
94 if (!_dataType.valid())
96 return _dataType->getRepresentation();
100 HLAAbstractEnumeratedDataElement::getStringRepresentation() const
102 if (!_dataType.valid())
103 return std::string();
104 return _dataType->getString(getEnumeratorIndex());
108 HLAAbstractEnumeratedDataElement::setStringRepresentation(const std::string& name)
110 if (!_dataType.valid())
112 unsigned index = _dataType->getIndex(name);
113 if (_dataType->getNumEnumerators() <= index)
115 setEnumeratorIndex(index);
120 HLAEnumeratedDataElement::HLAEnumeratedDataElement(const HLAEnumeratedDataType* dataType) :
121 HLAAbstractEnumeratedDataElement(dataType),
122 _enumeratorIndex(~unsigned(0))
126 HLAEnumeratedDataElement::~HLAEnumeratedDataElement()
131 HLAEnumeratedDataElement::getEnumeratorIndex() const
133 return _enumeratorIndex;
137 HLAEnumeratedDataElement::setEnumeratorIndex(unsigned index)
139 _enumeratorIndex = index;