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 "HLABasicDataElement.hxx"
20 #include "HLADataElementVisitor.hxx"
21 #include "HLADataTypeVisitor.hxx"
25 HLABasicDataElement::HLABasicDataElement(const HLABasicDataType* dataType) :
30 HLABasicDataElement::~HLABasicDataElement()
35 HLABasicDataElement::accept(HLADataElementVisitor& visitor)
41 HLABasicDataElement::accept(HLAConstDataElementVisitor& visitor) const
46 const HLABasicDataType*
47 HLABasicDataElement::getDataType() const
49 return _dataType.get();
53 HLABasicDataElement::setDataType(const HLADataType* dataType)
55 const HLABasicDataType* scalarDataType = dynamic_cast<const HLABasicDataType*>(dataType);
56 if (!scalarDataType) {
57 SG_LOG(SG_NETWORK, SG_WARN, "HLABasicDataType: unable to set data type!");
60 setDataType(scalarDataType);
65 HLABasicDataElement::setDataType(const HLABasicDataType* dataType)
70 #define IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(type, ctype) \
71 HLAAbstract##type##DataElement::HLAAbstract##type##DataElement(const HLABasicDataType* dataType) :\
72 HLABasicDataElement(dataType) \
76 HLAAbstract##type##DataElement::~HLAAbstract##type##DataElement() \
81 HLAAbstract##type##DataElement::encode(HLAEncodeStream& stream) const \
83 if (!_dataType.valid()) \
85 HLATemplateEncodeVisitor<ctype> visitor(stream, getValue()); \
86 _dataType->accept(visitor); \
91 HLAAbstract##type##DataElement::decode(HLADecodeStream& stream) \
93 if (!_dataType.valid()) \
95 HLATemplateDecodeVisitor<ctype> visitor(stream); \
96 _dataType->accept(visitor); \
97 setValue(visitor.getValue()); \
101 HLA##type##DataElement::HLA##type##DataElement(const HLABasicDataType* dataType) : \
102 HLAAbstract##type##DataElement(dataType), \
107 HLA##type##DataElement::HLA##type##DataElement(const HLABasicDataType* dataType, \
108 const ctype& value) : \
109 HLAAbstract##type##DataElement(dataType), \
114 HLA##type##DataElement::~HLA##type##DataElement() \
119 HLA##type##DataElement::getValue() const \
125 HLA##type##DataElement::setValue(ctype value) \
130 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(Char, char);
131 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(WChar, wchar_t);
132 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(SChar, signed char);
133 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(UChar, unsigned char);
134 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(Short, short);
135 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(UShort, unsigned short);
136 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(Int, int);
137 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(UInt, unsigned int);
138 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(Long, long);
139 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(ULong, unsigned long);
140 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(Float, float);
141 IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT(Double, double);
143 #undef IMPLEMENT_TYPED_HLA_BASIC_DATA_ELEMENT