enumeration.h
Go to the documentation of this file.
1/************************************************************************************
2* *
3* Copyright (c) 2014 - 2018 Axel Menzel <info@rttr.org> *
4* *
5* This file is part of RTTR (Run Time Type Reflection) *
6* License: MIT License *
7* *
8* Permission is hereby granted, free of charge, to any person obtaining *
9* a copy of this software and associated documentation files (the "Software"), *
10* to deal in the Software without restriction, including without limitation *
11* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
12* and/or sell copies of the Software, and to permit persons to whom the *
13* Software is furnished to do so, subject to the following conditions: *
14* *
15* The above copyright notice and this permission notice shall be included in *
16* all copies or substantial portions of the Software. *
17* *
18* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
19* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
20* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
21* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
22* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, *
23* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE *
24* SOFTWARE. *
25* *
26*************************************************************************************/
27
28#ifndef RTTR_ENUMERATION_H_
29#define RTTR_ENUMERATION_H_
30
31#include "rttr/detail/base/core_prerequisites.h"
32#include "rttr/type.h"
33#include "rttr/string_view.h"
34#include "rttr/detail/misc/class_item_mapper.h"
35
36#include <memory>
37#include <string>
38
39namespace rttr
40{
41class type;
42class variant;
43class argument;
44
45namespace detail
46{
47 class enumeration_wrapper_base;
48}
49
112class RTTR_API enumeration
113{
114 public:
120 bool is_valid() const RTTR_NOEXCEPT;
121
127 explicit operator bool() const RTTR_NOEXCEPT;
128
134 string_view get_name() const RTTR_NOEXCEPT;
135
141 type get_underlying_type() const RTTR_NOEXCEPT;
142
148 type get_type() const RTTR_NOEXCEPT;
149
158 type get_declaring_type() const RTTR_NOEXCEPT;
159
168 variant get_metadata(const variant& key) const;
169
177 array_range<string_view> get_names() const RTTR_NOEXCEPT;
178
179
187 array_range<variant> get_values() const RTTR_NOEXCEPT;
188
196
203
209 bool operator==(const enumeration& other) const RTTR_NOEXCEPT;
210
216 bool operator!=(const enumeration& other) const RTTR_NOEXCEPT;
217
218 private:
219 enumeration(const detail::enumeration_wrapper_base* wrapper) RTTR_NOEXCEPT;
220
221 template<typename T>
222 friend T detail::create_item(const detail::class_item_to_wrapper_t<T>* wrapper);
223 template<typename T>
224 friend T detail::create_invalid_item();
225 private:
226 const detail::enumeration_wrapper_base* m_wrapper;
227};
228
229} // end namespace rttr
230
231#endif // RTTR_ENUMERATION_H_
The argument class is used for forwarding arguments to properties or methods.
Definition argument.h:52
The array_range class provides a view into an underlying data structure with lower and upper limits.
Definition array_range.h:64
variant get_metadata(const variant &key) const
Returns the meta data for the given key key.
type get_type() const noexcept
Returns the type object of this enumeration.
string_view value_to_name(argument value) const
Returns the string_view that is used as the name of the given enumeration value, or an empty string_v...
bool is_valid() const noexcept
Returns true if this enumeration is valid, otherwise false.
array_range< variant > get_values() const noexcept
Returns all enum values registered for this enumeration.
string_view get_name() const noexcept
Returns the declared name of this enumeration.
type get_underlying_type() const noexcept
Returns the underlying type (int, unsigned int, etc.) of this enumeration.
type get_declaring_type() const noexcept
Returns the type of the class or struct that declares this enumeration.
array_range< string_view > get_names() const noexcept
Returns all enum names registered for this enumeration.
variant name_to_value(string_view name) const
Returns the value of the given enumeration name, or an empty variant if the name is not defined.
The type class holds the type information for any arbitrary object.
Definition type.h:171
The variant class allows to store data of any type and convert between these types transparently.
Definition variant.h:198
Definition access_levels.h:34
detail::enum_data< Enum_Type > value(string_view, Enum_Type value)
The value function should be used to add a mapping from enum name to value during the registration pr...
basic_string_view< char > string_view
A class to hold a reference to a continuous sequence of char objects.
Definition string_view.h:493