1 // Copyright (C) 2009 - 2012 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 "HLABasicDataType.hxx"
20 #include "HLADataType.hxx"
21 #include "HLADataTypeVisitor.hxx"
25 HLABasicDataType::HLABasicDataType(const std::string& name) :
30 HLABasicDataType::~HLABasicDataType()
35 HLABasicDataType::accept(HLADataTypeVisitor& visitor) const
40 const HLABasicDataType*
41 HLABasicDataType::toBasicDataType() const
46 //////////////////////////////////////////////////////////////////////////////
48 HLAInt8DataType::HLAInt8DataType(const std::string& name) :
49 HLABasicDataType(name)
51 setAlignment(sizeof(int8_t));
54 HLAInt8DataType::~HLAInt8DataType()
59 HLAInt8DataType::accept(HLADataTypeVisitor& visitor) const
64 //////////////////////////////////////////////////////////////////////////////
66 HLAUInt8DataType::HLAUInt8DataType(const std::string& name) :
67 HLABasicDataType(name)
69 setAlignment(sizeof(uint8_t));
72 HLAUInt8DataType::~HLAUInt8DataType()
77 HLAUInt8DataType::accept(HLADataTypeVisitor& visitor) const
82 //////////////////////////////////////////////////////////////////////////////
84 #define BASIC_DATATYPE_IMPLEMENTATION(type, name) \
85 HLA##name##DataType::HLA##name##DataType(const std::string& name) : \
86 HLABasicDataType(name) \
88 setAlignment(sizeof(type)); \
91 HLA##name##DataType::~HLA##name##DataType() \
96 HLA##name##DataType::accept(HLADataTypeVisitor& visitor) const \
98 visitor.apply(*this); \
103 HLA##name##LEDataType::HLA##name##LEDataType(const std::string& name) : \
104 HLA##name##DataType(name) \
108 HLA##name##LEDataType::~HLA##name##LEDataType() \
113 HLA##name##LEDataType::decode(HLADecodeStream& stream, \
116 if (!stream.alignOffsetForSize(getAlignment())) \
118 return stream.decode##name##LE(value); \
122 HLA##name##LEDataType::encode(HLAEncodeStream& stream, \
123 const type& value) const \
125 if (!stream.alignOffsetForSize(getAlignment())) \
127 return stream.encode##name##LE(value); \
132 HLA##name##BEDataType::HLA##name##BEDataType(const std::string& name) : \
133 HLA##name##DataType(name) \
137 HLA##name##BEDataType::~HLA##name##BEDataType() \
142 HLA##name##BEDataType::decode(HLADecodeStream& stream, \
145 if (!stream.alignOffsetForSize(getAlignment())) \
147 return stream.decode##name##BE(value); \
151 HLA##name##BEDataType::encode(HLAEncodeStream& stream, \
152 const type& value) const \
154 if (!stream.alignOffsetForSize(getAlignment())) \
156 return stream.encode##name##BE(value); \
159 BASIC_DATATYPE_IMPLEMENTATION(int16_t, Int16)
160 BASIC_DATATYPE_IMPLEMENTATION(uint16_t, UInt16)
161 BASIC_DATATYPE_IMPLEMENTATION(int32_t, Int32)
162 BASIC_DATATYPE_IMPLEMENTATION(uint32_t, UInt32)
163 BASIC_DATATYPE_IMPLEMENTATION(int64_t, Int64)
164 BASIC_DATATYPE_IMPLEMENTATION(uint64_t, UInt64)
165 BASIC_DATATYPE_IMPLEMENTATION(float, Float32)
166 BASIC_DATATYPE_IMPLEMENTATION(double, Float64)
168 #undef BASIC_DATATYPE_IMPLEMENTATION
170 } // namespace simgear