GCC Code Coverage Report


Directory: src/gate/
File: src/gate/typeids.hpp
Date: 2026-06-21 00:38:37
Exec Total Coverage
Lines: 28 28 100.0%
Functions: 28 28 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 /* GATE PROJECT LICENSE:
2 +----------------------------------------------------------------------------+
3 | Copyright (c) 2018-2026, Stefan Meislinger <sm@opengate.at> |
4 | All rights reserved. |
5 | |
6 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met:|
8 | |
9 | 1. Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. |
11 | 2. Redistributions in binary form must reproduce the above copyright |
12 | notice, this list of conditions and the following disclaimer in the |
13 | documentation and/or other materials provided with the distribution. |
14 | |
15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"|
16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
18 | ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
19 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
20 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
21 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
23 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
25 | THE POSSIBILITY OF SUCH DAMAGE. |
26 +----------------------------------------------------------------------------+
27 */
28
29 /** @file
30 * @brief C++ typeid to GATE typeid bridge
31 * @ingroup gatecore_cpp
32 */
33
34 #ifndef GATE_TYPEIDS_HPP_INCLUDED
35 #define GATE_TYPEIDS_HPP_INCLUDED
36
37 #include "gate/typeids.h"
38 #include "gate/gatetypes.hpp"
39 #include "gate/times.h"
40 #include "gate/guids.h"
41 #include "gate/structs.h"
42 #include "gate/arrays.h"
43 #include "gate/strings.h"
44 #include "gate/objects.h"
45 #include "gate/properties.h"
46 #include "gate/strings.hpp"
47 #include "gate/guids.hpp"
48 #include "gate/times.hpp"
49 //#include "gate/guids.hpp"
50 //#include "gate/arrays.hpp"
51 //#include "gate/objects.h"
52 //#include "gate/structs.hpp"
53
54 namespace gate
55 {
56 class Object;
57 class Property;
58 class ConstStruct;
59
60 typedef ::gate_type_id_t type_id_t;
61 typedef ::gate_type_sig_t type_sig_t;
62
63 namespace detail
64 {
65
66 template<class T>
67 struct TypeIdBase
68 {
69 typedef T type_t;
70 static type_id_t value();
71 static type_sig_t sig();
72
73 };
74
75 #define GATE_TYPEIDS_HPP_BASE_GEN(ntype, gtypeid, gtypesig) \
76 template<> struct TypeIdBase< ntype > \
77 { \
78 typedef ntype type_t; \
79 static type_id_t value() { return gtypeid; } \
80 static type_sig_t sig() { return gtypesig; } \
81 }
82
83 GATE_TYPEIDS_HPP_BASE_GEN(void, GATE_TYPE_EMPTY, GATE_TYPESIG_EMPTY);
84 1 GATE_TYPEIDS_HPP_BASE_GEN(bool_t, GATE_TYPE_BOOL, GATE_TYPESIG_BOOL);
85 6 GATE_TYPEIDS_HPP_BASE_GEN(int8_t, GATE_TYPE_I8, GATE_TYPESIG_I8);
86 //GATE_TYPEIDS_HPP_BASE_GEN(uint8_t, GATE_TYPE_UI8, GATE_TYPESIG_UI8);
87 6 GATE_TYPEIDS_HPP_BASE_GEN(int16_t, GATE_TYPE_I16, GATE_TYPESIG_I16);
88 3 GATE_TYPEIDS_HPP_BASE_GEN(uint16_t, GATE_TYPE_UI16, GATE_TYPESIG_UI16);
89 6 GATE_TYPEIDS_HPP_BASE_GEN(int32_t, GATE_TYPE_I32, GATE_TYPESIG_I32);
90 3 GATE_TYPEIDS_HPP_BASE_GEN(uint32_t, GATE_TYPE_UI32, GATE_TYPESIG_UI32);
91 6 GATE_TYPEIDS_HPP_BASE_GEN(int64_t, GATE_TYPE_I64, GATE_TYPESIG_I64);
92 3 GATE_TYPEIDS_HPP_BASE_GEN(uint64_t, GATE_TYPE_UI64, GATE_TYPESIG_UI64);
93 6 GATE_TYPEIDS_HPP_BASE_GEN(real32_t, GATE_TYPE_R32, GATE_TYPESIG_R32);
94 3 GATE_TYPEIDS_HPP_BASE_GEN(real64_t, GATE_TYPE_R64, GATE_TYPESIG_R64);
95 //GATE_TYPEIDS_HPP_BASE_GEN(uintptr_t, GATE_TYPE_ADDRESS, GATE_TYPESIG_ADDR);
96
97 1 GATE_TYPEIDS_HPP_BASE_GEN(gate_dataptr_t, GATE_TYPE_DATAPTR, GATE_TYPESIG_DATAPTR);
98 1 GATE_TYPEIDS_HPP_BASE_GEN(gate_funcptr_t, GATE_TYPE_FUNCPTR, GATE_TYPESIG_FUNCPTR);
99 1 GATE_TYPEIDS_HPP_BASE_GEN(gate_cstr_t, GATE_TYPE_CSTR, GATE_TYPESIG_CSTR);
100 1 GATE_TYPEIDS_HPP_BASE_GEN(gate_wstr_t, GATE_TYPE_WSTR, GATE_TYPESIG_WSTR);
101 1 GATE_TYPEIDS_HPP_BASE_GEN(gate_guid_t, GATE_TYPE_GUID, GATE_TYPESIG_GUID);
102 1 GATE_TYPEIDS_HPP_BASE_GEN(gate::Guid, GATE_TYPE_GUID, GATE_TYPESIG_GUID);
103 1 GATE_TYPEIDS_HPP_BASE_GEN(gate_date_t, GATE_TYPE_DATE, GATE_TYPESIG_DATE);
104 1 GATE_TYPEIDS_HPP_BASE_GEN(gate::Date, GATE_TYPE_DATE, GATE_TYPESIG_DATE);
105 1 GATE_TYPEIDS_HPP_BASE_GEN(gate_daytime_t, GATE_TYPE_DAYTIME, GATE_TYPESIG_DAYTIME);
106 1 GATE_TYPEIDS_HPP_BASE_GEN(gate::DayTime, GATE_TYPE_DAYTIME, GATE_TYPESIG_DAYTIME);
107 1 GATE_TYPEIDS_HPP_BASE_GEN(gate_datetime_t, GATE_TYPE_DATETIME, GATE_TYPESIG_DATETIME);
108 1 GATE_TYPEIDS_HPP_BASE_GEN(gate::DateTime, GATE_TYPE_DATETIME, GATE_TYPESIG_DATETIME);
109 1 GATE_TYPEIDS_HPP_BASE_GEN(gate::Time, GATE_TYPE_TIME, GATE_TYPESIG_TIME);
110 1 GATE_TYPEIDS_HPP_BASE_GEN(gate_time_t, GATE_TYPE_TIME, GATE_TYPESIG_TIME);
111
112 GATE_TYPEIDS_HPP_BASE_GEN(gate_string_t, GATE_TYPE_STRING, GATE_TYPESIG_STRING);
113 7 GATE_TYPEIDS_HPP_BASE_GEN(gate::String, GATE_TYPE_STRING, GATE_TYPESIG_STRING);
114 GATE_TYPEIDS_HPP_BASE_GEN(gate_array_t, GATE_TYPE_ARRAY, GATE_TYPESIG_ARRAY);
115
116 GATE_TYPEIDS_HPP_BASE_GEN(gate_struct_ptr_t, GATE_TYPE_STRUCT, GATE_TYPESIG_STRUCT);
117 1 GATE_TYPEIDS_HPP_BASE_GEN(gate::ConstStruct, GATE_TYPE_STRUCT, GATE_TYPESIG_STRUCT);
118 GATE_TYPEIDS_HPP_BASE_GEN(gate_object_ptr_t, GATE_TYPE_OBJECT, GATE_TYPESIG_OBJECT);
119 1 GATE_TYPEIDS_HPP_BASE_GEN(gate::Object, GATE_TYPE_OBJECT, GATE_TYPESIG_OBJECT);
120 GATE_TYPEIDS_HPP_BASE_GEN(gate_property_t, GATE_TYPE_PROPERTY, GATE_TYPESIG_PROPERTY);
121 7 GATE_TYPEIDS_HPP_BASE_GEN(gate::Property, GATE_TYPE_PROPERTY, GATE_TYPESIG_PROPERTY);
122
123 } // end of namespace detail
124
125
126 /// @brief
127 /// @tparam T
128 template<class T> struct TypeId : public detail::TypeIdBase<T>
129 {
130
131 };
132
133
134 } // end of namespace gate
135
136 #endif
137