1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 #ifndef COMMONAPI_TESTS_DERIVED_TYPE_COLLECTION_H_
5 #define COMMONAPI_TESTS_DERIVED_TYPE_COLLECTION_H_
7 #include <CommonAPI/InputStream.h>
8 #include <CommonAPI/OutputStream.h>
9 #include <CommonAPI/SerializableStruct.h>
10 #include <CommonAPI/types.h>
11 #include "PredefinedTypeCollection.h"
13 #include <unordered_map>
19 namespace DerivedTypeCollection {
21 enum class TestEnum: int32_t {
28 // XXX Definition of a comparator still is necessary for GCC 4.4.1, topic is fixed since 4.5.1
29 struct TestEnumComparator;
31 enum class TestEnumMissingValue: int32_t {
37 // XXX Definition of a comparator still is necessary for GCC 4.4.1, topic is fixed since 4.5.1
38 struct TestEnumMissingValueComparator;
40 enum class TestEnumExtended: int32_t {
41 E_UNKNOWN = TestEnum::E_UNKNOWN,
42 E_OK = TestEnum::E_OK,
43 E_OUT_OF_RANGE = TestEnum::E_OUT_OF_RANGE,
44 E_NOT_USED = TestEnum::E_NOT_USED
49 // XXX Definition of a comparator still is necessary for GCC 4.4.1, topic is fixed since 4.5.1
50 struct TestEnumExtendedComparator;
52 enum class TestEnumExtended2: int32_t {
53 E_UNKNOWN = TestEnum::E_UNKNOWN,
54 E_OK = TestEnum::E_OK,
55 E_OUT_OF_RANGE = TestEnum::E_OUT_OF_RANGE,
56 E_NOT_USED = TestEnum::E_NOT_USED,
58 E_NEW = TestEnumExtended::E_NEW
63 // XXX Definition of a comparator still is necessary for GCC 4.4.1, topic is fixed since 4.5.1
64 struct TestEnumExtended2Comparator;
66 struct TestStruct: CommonAPI::SerializableStruct {
67 PredefinedTypeCollection::TestString testString;
70 TestStruct() = default;
71 TestStruct(const PredefinedTypeCollection::TestString& testString, const uint16_t& uintValue);
73 virtual void readFromInputStream(CommonAPI::InputStream& inputStream);
74 virtual void writeToOutputStream(CommonAPI::OutputStream& outputStream) const;
77 struct TestStructExtended: TestStruct {
78 TestEnumExtended2 testEnumExtended2;
80 TestStructExtended() = default;
81 TestStructExtended(const PredefinedTypeCollection::TestString& testString, const uint16_t& uintValue, const TestEnumExtended2& testEnumExtended2);
83 virtual void readFromInputStream(CommonAPI::InputStream& inputStream);
84 virtual void writeToOutputStream(CommonAPI::OutputStream& outputStream) const;
87 typedef std::vector<uint64_t> TestArrayUInt64;
89 typedef std::vector<TestStruct> TestArrayTestStruct;
91 typedef std::unordered_map<uint32_t, TestArrayTestStruct> TestMap;
93 inline CommonAPI::InputStream& operator>>(CommonAPI::InputStream& inputStream, TestEnum& enumValue) {
94 return inputStream.readEnumValue<int32_t>(enumValue);
97 inline CommonAPI::OutputStream& operator<<(CommonAPI::OutputStream& outputStream, const TestEnum& enumValue) {
98 return outputStream.writeEnumValue(static_cast<int32_t>(enumValue));
101 struct TestEnumComparator {
102 inline bool operator()(const TestEnum& lhs, const TestEnum& rhs) const {
103 return static_cast<int32_t>(lhs) < static_cast<int32_t>(rhs);
107 inline CommonAPI::InputStream& operator>>(CommonAPI::InputStream& inputStream, TestEnumMissingValue& enumValue) {
108 return inputStream.readEnumValue<int32_t>(enumValue);
111 inline CommonAPI::OutputStream& operator<<(CommonAPI::OutputStream& outputStream, const TestEnumMissingValue& enumValue) {
112 return outputStream.writeEnumValue(static_cast<int32_t>(enumValue));
115 struct TestEnumMissingValueComparator {
116 inline bool operator()(const TestEnumMissingValue& lhs, const TestEnumMissingValue& rhs) const {
117 return static_cast<int32_t>(lhs) < static_cast<int32_t>(rhs);
121 inline CommonAPI::InputStream& operator>>(CommonAPI::InputStream& inputStream, TestEnumExtended& enumValue) {
122 return inputStream.readEnumValue<int32_t>(enumValue);
125 inline CommonAPI::OutputStream& operator<<(CommonAPI::OutputStream& outputStream, const TestEnumExtended& enumValue) {
126 return outputStream.writeEnumValue(static_cast<int32_t>(enumValue));
129 struct TestEnumExtendedComparator {
130 inline bool operator()(const TestEnumExtended& lhs, const TestEnumExtended& rhs) const {
131 return static_cast<int32_t>(lhs) < static_cast<int32_t>(rhs);
136 inline bool operator==(const TestEnumExtended& lhs, const TestEnum& rhs) {
137 return static_cast<int32_t>(lhs) == static_cast<int32_t>(rhs);
139 inline bool operator==(const TestEnum& lhs, const TestEnumExtended& rhs) {
140 return static_cast<int32_t>(lhs) == static_cast<int32_t>(rhs);
142 inline bool operator!=(const TestEnumExtended& lhs, const TestEnum& rhs) {
143 return static_cast<int32_t>(lhs) != static_cast<int32_t>(rhs);
145 inline bool operator!=(const TestEnum& lhs, const TestEnumExtended& rhs) {
146 return static_cast<int32_t>(lhs) != static_cast<int32_t>(rhs);
148 inline CommonAPI::InputStream& operator>>(CommonAPI::InputStream& inputStream, TestEnumExtended2& enumValue) {
149 return inputStream.readEnumValue<int32_t>(enumValue);
152 inline CommonAPI::OutputStream& operator<<(CommonAPI::OutputStream& outputStream, const TestEnumExtended2& enumValue) {
153 return outputStream.writeEnumValue(static_cast<int32_t>(enumValue));
156 struct TestEnumExtended2Comparator {
157 inline bool operator()(const TestEnumExtended2& lhs, const TestEnumExtended2& rhs) const {
158 return static_cast<int32_t>(lhs) < static_cast<int32_t>(rhs);
163 inline bool operator==(const TestEnumExtended2& lhs, const TestEnum& rhs) {
164 return static_cast<int32_t>(lhs) == static_cast<int32_t>(rhs);
166 inline bool operator==(const TestEnum& lhs, const TestEnumExtended2& rhs) {
167 return static_cast<int32_t>(lhs) == static_cast<int32_t>(rhs);
169 inline bool operator!=(const TestEnumExtended2& lhs, const TestEnum& rhs) {
170 return static_cast<int32_t>(lhs) != static_cast<int32_t>(rhs);
172 inline bool operator!=(const TestEnum& lhs, const TestEnumExtended2& rhs) {
173 return static_cast<int32_t>(lhs) != static_cast<int32_t>(rhs);
176 inline bool operator==(const TestEnumExtended2& lhs, const TestEnumExtended& rhs) {
177 return static_cast<int32_t>(lhs) == static_cast<int32_t>(rhs);
179 inline bool operator==(const TestEnumExtended& lhs, const TestEnumExtended2& rhs) {
180 return static_cast<int32_t>(lhs) == static_cast<int32_t>(rhs);
182 inline bool operator!=(const TestEnumExtended2& lhs, const TestEnumExtended& rhs) {
183 return static_cast<int32_t>(lhs) != static_cast<int32_t>(rhs);
185 inline bool operator!=(const TestEnumExtended& lhs, const TestEnumExtended2& rhs) {
186 return static_cast<int32_t>(lhs) != static_cast<int32_t>(rhs);
188 bool operator==(const TestStruct& lhs, const TestStruct& rhs);
189 inline bool operator!=(const TestStruct& lhs, const TestStruct& rhs) {
190 return !(lhs == rhs);
192 bool operator==(const TestStructExtended& lhs, const TestStructExtended& rhs);
193 inline bool operator!=(const TestStructExtended& lhs, const TestStructExtended& rhs) {
194 return !(lhs == rhs);
198 static inline const char* getTypeCollectionName() {
199 return "commonapi.tests.DerivedTypeCollection";
203 } // namespace DerivedTypeCollection
206 } // namespace commonapi
208 #endif // COMMONAPI_TESTS_DERIVED_TYPE_COLLECTION_H_