neoGFX
Cross-platform C++ app/game engine
Loading...
Searching...
No Matches
i_simple_variant.hpp
Go to the documentation of this file.
1
// i_simple_variant.hpp
2
/*
3
* Copyright (c) 2007 Leigh Johnston.
4
*
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions are
9
* met:
10
*
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
*
14
* * Redistributions in binary form must reproduce the above copyright
15
* notice, this list of conditions and the following disclaimer in the
16
* documentation and/or other materials provided with the distribution.
17
*
18
* * Neither the name of Leigh Johnston nor the names of any
19
* other contributors to this software may be used to endorse or
20
* promote products derived from this software without specific prior
21
* written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
24
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
27
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
*/
35
36
#pragma once
37
38
#include <
neolib/neolib.hpp
>
39
#include <string>
40
#include <boost/lexical_cast.hpp>
41
#include <
neolib/core/i_reference_counted.hpp
>
42
#include <
neolib/core/string.hpp
>
43
#include <
neolib/core/i_enum.hpp
>
44
#include <
neolib/core/i_custom_type.hpp
>
45
#include <
neolib/plugin/i_plugin_variant.hpp
>
46
47
namespace
neolib
48
{
49
enum class
simple_variant_type
: uint32_t
50
{
51
Boolean
,
52
Integer
,
53
Real
,
54
String
,
55
Enum
,
56
CustomType
57
};
58
}
59
60
begin_declare_enum
(
neolib::simple_variant_type
)
61
declare_enum_string
(
neolib::simple_variant_type
, Boolean)
62
declare_enum_string
(
neolib::simple_variant_type
, Integer)
63
declare_enum_string
(
neolib::simple_variant_type
, Real)
64
declare_enum_string
(
neolib::simple_variant_type
, String)
65
declare_enum_string
(
neolib::simple_variant_type
, Enum)
66
declare_enum_string
(
neolib::simple_variant_type
, CustomType)
67
end_declare_enum
(
neolib::simple_variant_type
)
68
69
namespace
neolib
70
{
71
typedef
i_plugin_variant<simple_variant_type, bool, int64_t, double, i_string, i_ref_ptr<i_enum>, i_ref_ptr<i_custom_type>> i_simple_variant;
72
73
inline
std::string
to_string
(i_simple_variant
const
& aVariant)
74
{
75
switch
(aVariant.which())
76
{
77
case
simple_variant_type::Boolean
:
78
if
(aVariant.get<
bool
>())
79
return
"true"
;
80
else
81
return
"false"
;
82
case
simple_variant_type::Integer
:
83
return
std::to_string(aVariant.get<int64_t>());
84
case
simple_variant_type::Real
:
85
return
std::to_string(aVariant.get<
double
>());
86
case
simple_variant_type::String
:
87
return
aVariant.get<i_string>().
to_std_string
();
88
case
simple_variant_type::Enum
:
89
return
aVariant.get<i_ref_ptr<i_enum>>()->
to_string
();
90
case
simple_variant_type::CustomType
:
91
return
aVariant.get<i_ref_ptr<i_custom_type>>()->
to_string
();
92
default
:
93
throw
std::logic_error(
"neolib: cannot convert simple variant to string"
);
94
}
95
}
96
}
i_custom_type.hpp
i_enum.hpp
end_declare_enum
#define end_declare_enum(enumName)
Definition
i_enum.hpp:62
declare_enum_string
#define declare_enum_string(enumName, enumEnumerator)
Definition
i_enum.hpp:59
begin_declare_enum
#define begin_declare_enum(enumName)
Definition
i_enum.hpp:52
i_plugin_variant.hpp
i_reference_counted.hpp
neogfx::to_string
std::string to_string(note const &aNote)
Definition
audio_primitives.hpp:162
neolib
Definition
application.hpp:46
neolib::to_std_string
std::string to_std_string(T const &aValue)
Definition
string_utils.hpp:94
neolib::setting_type::String
@ String
neolib::setting_type::Boolean
@ Boolean
neolib::setting_type::Enum
@ Enum
neolib::simple_variant_type
simple_variant_type
Definition
i_simple_variant.hpp:50
neolib::simple_variant_type::String
@ String
neolib::simple_variant_type::Boolean
@ Boolean
neolib::simple_variant_type::Real
@ Real
neolib::simple_variant_type::Integer
@ Integer
neolib::simple_variant_type::Enum
@ Enum
neolib::simple_variant_type::CustomType
@ CustomType
neolib.hpp
string.hpp
neolib
include
neolib
core
i_simple_variant.hpp
Generated by
1.9.8