| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* GATE PROJECT LICENSE: | ||
| 2 | +----------------------------------------------------------------------------+ | ||
| 3 | | Copyright(c) 2018-2025, 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/times.hpp" | ||
| 50 | //#include "gate/guids.hpp" | ||
| 51 | //#include "gate/arrays.hpp" | ||
| 52 | //#include "gate/objects.h" | ||
| 53 | //#include "gate/structs.hpp" | ||
| 54 | //#include "gate/properties.hpp" | ||
| 55 | |||
| 56 | namespace gate | ||
| 57 | { | ||
| 58 | |||
| 59 | typedef ::gate_type_id_t type_id_t; | ||
| 60 | typedef ::gate_type_sig_t type_sig_t; | ||
| 61 | |||
| 62 | namespace detail | ||
| 63 | { | ||
| 64 | |||
| 65 | template<class T> | ||
| 66 | struct TypeIdBase | ||
| 67 | { | ||
| 68 | typedef T type_t; | ||
| 69 | static type_id_t value(); | ||
| 70 | static type_sig_t sig(); | ||
| 71 | |||
| 72 | }; | ||
| 73 | |||
| 74 | #define GATE_TYPEIDS_HPP_BASE_GEN(ntype, gtypeid, gtypesig) \ | ||
| 75 | template<> struct TypeIdBase< ntype > \ | ||
| 76 | { \ | ||
| 77 | typedef ntype type_t; \ | ||
| 78 | static type_id_t value() { return gtypeid; } \ | ||
| 79 | static type_sig_t sig() { return gtypesig; } \ | ||
| 80 | } | ||
| 81 | |||
| 82 | GATE_TYPEIDS_HPP_BASE_GEN(void, GATE_TYPE_EMPTY, GATE_TYPESIG_EMPTY); | ||
| 83 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(bool_t, GATE_TYPE_BOOL, GATE_TYPESIG_BOOL); | |
| 84 | 6 | GATE_TYPEIDS_HPP_BASE_GEN(int8_t, GATE_TYPE_I8, GATE_TYPESIG_I8); | |
| 85 | //GATE_TYPEIDS_HPP_BASE_GEN(uint8_t, GATE_TYPE_UI8, GATE_TYPESIG_UI8); | ||
| 86 | 6 | GATE_TYPEIDS_HPP_BASE_GEN(int16_t, GATE_TYPE_I16, GATE_TYPESIG_I16); | |
| 87 | 3 | GATE_TYPEIDS_HPP_BASE_GEN(uint16_t, GATE_TYPE_UI16, GATE_TYPESIG_UI16); | |
| 88 | 6 | GATE_TYPEIDS_HPP_BASE_GEN(int32_t, GATE_TYPE_I32, GATE_TYPESIG_I32); | |
| 89 | 3 | GATE_TYPEIDS_HPP_BASE_GEN(uint32_t, GATE_TYPE_UI32, GATE_TYPESIG_UI32); | |
| 90 | 6 | GATE_TYPEIDS_HPP_BASE_GEN(int64_t, GATE_TYPE_I64, GATE_TYPESIG_I64); | |
| 91 | 3 | GATE_TYPEIDS_HPP_BASE_GEN(uint64_t, GATE_TYPE_UI64, GATE_TYPESIG_UI64); | |
| 92 | 6 | GATE_TYPEIDS_HPP_BASE_GEN(real32_t, GATE_TYPE_R32, GATE_TYPESIG_R32); | |
| 93 | 3 | GATE_TYPEIDS_HPP_BASE_GEN(real64_t, GATE_TYPE_R64, GATE_TYPESIG_R64); | |
| 94 | //GATE_TYPEIDS_HPP_BASE_GEN(uintptr_t, GATE_TYPE_ADDRESS, GATE_TYPESIG_ADDR); | ||
| 95 | |||
| 96 | GATE_TYPEIDS_HPP_BASE_GEN(gate_dataptr_t, GATE_TYPE_DATAPTR, GATE_TYPESIG_DATAPTR); | ||
| 97 | GATE_TYPEIDS_HPP_BASE_GEN(gate_funcptr_t, GATE_TYPE_FUNCPTR, GATE_TYPESIG_FUNCPTR); | ||
| 98 | GATE_TYPEIDS_HPP_BASE_GEN(gate_cstr_t, GATE_TYPE_CSTR, GATE_TYPESIG_CSTR); | ||
| 99 | GATE_TYPEIDS_HPP_BASE_GEN(gate_wstr_t, GATE_TYPE_WSTR, GATE_TYPESIG_WSTR); | ||
| 100 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate_guid_t, GATE_TYPE_GUID, GATE_TYPESIG_GUID); | |
| 101 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate::Guid, GATE_TYPE_GUID, GATE_TYPESIG_GUID); | |
| 102 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate_date_t, GATE_TYPE_DATE, GATE_TYPESIG_DATE); | |
| 103 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate::Date, GATE_TYPE_DATE, GATE_TYPESIG_DATE); | |
| 104 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate_daytime_t, GATE_TYPE_DAYTIME, GATE_TYPESIG_DAYTIME); | |
| 105 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate::DayTime, GATE_TYPE_DAYTIME, GATE_TYPESIG_DAYTIME); | |
| 106 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate_datetime_t, GATE_TYPE_DATETIME, GATE_TYPESIG_DATETIME); | |
| 107 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate::DateTime, GATE_TYPE_DATETIME, GATE_TYPESIG_DATETIME); | |
| 108 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate::Time, GATE_TYPE_TIME, GATE_TYPESIG_TIME); | |
| 109 | 1 | GATE_TYPEIDS_HPP_BASE_GEN(gate_time_t, GATE_TYPE_TIME, GATE_TYPESIG_TIME); | |
| 110 | |||
| 111 | GATE_TYPEIDS_HPP_BASE_GEN(gate_string_t, GATE_TYPE_STRING, GATE_TYPESIG_STRING); | ||
| 112 | 4 | GATE_TYPEIDS_HPP_BASE_GEN(gate::String, GATE_TYPE_STRING, GATE_TYPESIG_STRING); | |
| 113 | GATE_TYPEIDS_HPP_BASE_GEN(gate_array_t, GATE_TYPE_ARRAY, GATE_TYPESIG_ARRAY); | ||
| 114 | |||
| 115 | GATE_TYPEIDS_HPP_BASE_GEN(gate_struct_ptr_t, GATE_TYPE_STRUCT, GATE_TYPESIG_STRUCT); | ||
| 116 | GATE_TYPEIDS_HPP_BASE_GEN(gate_object_ptr_t, GATE_TYPE_OBJECT, GATE_TYPESIG_OBJECT); | ||
| 117 | GATE_TYPEIDS_HPP_BASE_GEN(gate_property_t, GATE_TYPE_PROPERTY, GATE_TYPESIG_PROPERTY); | ||
| 118 | |||
| 119 | } // end of namespace detail | ||
| 120 | |||
| 121 | |||
| 122 | /// @brief | ||
| 123 | /// @tparam T | ||
| 124 | template<class T> struct TypeId : public detail::TypeIdBase<T> | ||
| 125 | { | ||
| 126 | |||
| 127 | }; | ||
| 128 | |||
| 129 | |||
| 130 | } // end of namespace gate | ||
| 131 | |||
| 132 | #endif | ||
| 133 |