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.
19 # include <simgear_config.h>
22 #include <simgear/compiler.h>
24 #include "HLABasicDataType.hxx"
26 #include "HLADataType.hxx"
27 #include "HLADataTypeVisitor.hxx"
31 HLABasicDataType::HLABasicDataType(const std::string& name) :
36 HLABasicDataType::~HLABasicDataType()
41 HLABasicDataType::accept(HLADataTypeVisitor& visitor) const
46 const HLABasicDataType*
47 HLABasicDataType::toBasicDataType() const
52 //////////////////////////////////////////////////////////////////////////////
54 HLAInt8DataType::HLAInt8DataType(const std::string& name) :
55 HLABasicDataType(name)
57 setAlignment(sizeof(int8_t));
60 HLAInt8DataType::~HLAInt8DataType()
65 HLAInt8DataType::accept(HLADataTypeVisitor& visitor) const
70 //////////////////////////////////////////////////////////////////////////////
72 HLAUInt8DataType::HLAUInt8DataType(const std::string& name) :
73 HLABasicDataType(name)
75 setAlignment(sizeof(uint8_t));
78 HLAUInt8DataType::~HLAUInt8DataType()
83 HLAUInt8DataType::accept(HLADataTypeVisitor& visitor) const
88 //////////////////////////////////////////////////////////////////////////////
90 #define BASIC_DATATYPE_IMPLEMENTATION(type, name) \
91 HLA##name##DataType::HLA##name##DataType(const std::string& name) : \
92 HLABasicDataType(name) \
94 setAlignment(sizeof(type)); \
97 HLA##name##DataType::~HLA##name##DataType() \
102 HLA##name##DataType::accept(HLADataTypeVisitor& visitor) const \
104 visitor.apply(*this); \
109 HLA##name##LEDataType::HLA##name##LEDataType(const std::string& name) : \
110 HLA##name##DataType(name) \
114 HLA##name##LEDataType::~HLA##name##LEDataType() \
119 HLA##name##LEDataType::decode(HLADecodeStream& stream, \
122 if (!stream.alignOffsetForSize(getAlignment())) \
124 return stream.decode##name##LE(value); \
128 HLA##name##LEDataType::encode(HLAEncodeStream& stream, \
129 const type& value) const \
131 if (!stream.alignOffsetForSize(getAlignment())) \
133 return stream.encode##name##LE(value); \
138 HLA##name##BEDataType::HLA##name##BEDataType(const std::string& name) : \
139 HLA##name##DataType(name) \
143 HLA##name##BEDataType::~HLA##name##BEDataType() \
148 HLA##name##BEDataType::decode(HLADecodeStream& stream, \
151 if (!stream.alignOffsetForSize(getAlignment())) \
153 return stream.decode##name##BE(value); \
157 HLA##name##BEDataType::encode(HLAEncodeStream& stream, \
158 const type& value) const \
160 if (!stream.alignOffsetForSize(getAlignment())) \
162 return stream.encode##name##BE(value); \
165 BASIC_DATATYPE_IMPLEMENTATION(int16_t, Int16)
166 BASIC_DATATYPE_IMPLEMENTATION(uint16_t, UInt16)
167 BASIC_DATATYPE_IMPLEMENTATION(int32_t, Int32)
168 BASIC_DATATYPE_IMPLEMENTATION(uint32_t, UInt32)
169 BASIC_DATATYPE_IMPLEMENTATION(int64_t, Int64)
170 BASIC_DATATYPE_IMPLEMENTATION(uint64_t, UInt64)
171 BASIC_DATATYPE_IMPLEMENTATION(float, Float32)
172 BASIC_DATATYPE_IMPLEMENTATION(double, Float64)
174 #undef BASIC_DATATYPE_IMPLEMENTATION
176 } // namespace simgear