Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
a5aeb770
Commit
a5aeb770
authored
May 04, 2020
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix formatting
parent
17a85cab
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
121 additions
and
121 deletions
+121
-121
libcaf_core/caf/config_value.hpp
libcaf_core/caf/config_value.hpp
+121
-121
No files found.
libcaf_core/caf/config_value.hpp
View file @
a5aeb770
...
...
@@ -52,166 +52,166 @@ namespace caf {
/// type is not implemented as a simple variant alias because variants cannot
/// contain lists of themselves.
class
CAF_CORE_EXPORT
config_value
{
public:
// -- member types -----------------------------------------------------------
public:
// -- member types -----------------------------------------------------------
using
integer
=
int64_t
;
using
integer
=
int64_t
;
using
boolean
=
bool
;
using
boolean
=
bool
;
using
real
=
double
;
using
real
=
double
;
using
timespan
=
caf
::
timespan
;
using
timespan
=
caf
::
timespan
;
using
string
=
std
::
string
;
using
string
=
std
::
string
;
using
list
=
std
::
vector
<
config_value
>
;
using
list
=
std
::
vector
<
config_value
>
;
using
dictionary
=
caf
::
dictionary
<
config_value
>
;
using
dictionary
=
caf
::
dictionary
<
config_value
>
;
using
types
=
detail
::
type_list
<
integer
,
boolean
,
real
,
timespan
,
uri
,
string
,
list
,
dictionary
>
;
using
types
=
detail
::
type_list
<
integer
,
boolean
,
real
,
timespan
,
uri
,
string
,
list
,
dictionary
>
;
using
variant_type
=
detail
::
tl_apply_t
<
types
,
variant
>
;
using
variant_type
=
detail
::
tl_apply_t
<
types
,
variant
>
;
// -- constructors, destructors, and assignment operators --------------------
// -- constructors, destructors, and assignment operators --------------------
config_value
()
=
default
;
config_value
()
=
default
;
config_value
(
config_value
&&
other
)
=
default
;
config_value
(
config_value
&&
other
)
=
default
;
config_value
(
const
config_value
&
other
)
=
default
;
config_value
(
const
config_value
&
other
)
=
default
;
template
<
class
T
,
class
E
=
detail
::
enable_if_t
<
!
std
::
is_same
<
detail
::
decay_t
<
T
>,
config_value
>::
value
>>
explicit
config_value
(
T
&&
x
)
{
set
(
std
::
forward
<
T
>
(
x
));
}
template
<
class
T
,
class
E
=
detail
::
enable_if_t
<
!
std
::
is_same
<
detail
::
decay_t
<
T
>,
config_value
>::
value
>>
explicit
config_value
(
T
&&
x
)
{
set
(
std
::
forward
<
T
>
(
x
));
}
config_value
&
operator
=
(
config_value
&&
other
)
=
default
;
config_value
&
operator
=
(
config_value
&&
other
)
=
default
;
config_value
&
operator
=
(
const
config_value
&
other
)
=
default
;
config_value
&
operator
=
(
const
config_value
&
other
)
=
default
;
template
<
class
T
,
class
E
=
detail
::
enable_if_t
<
!
std
::
is_same
<
detail
::
decay_t
<
T
>,
config_value
>::
value
>>
config_value
&
operator
=
(
T
&&
x
)
{
set
(
std
::
forward
<
T
>
(
x
));
return
*
this
;
}
template
<
class
T
,
class
E
=
detail
::
enable_if_t
<
!
std
::
is_same
<
detail
::
decay_t
<
T
>,
config_value
>::
value
>>
config_value
&
operator
=
(
T
&&
x
)
{
set
(
std
::
forward
<
T
>
(
x
));
return
*
this
;
}
~
config_value
();
~
config_value
();
// -- parsing ----------------------------------------------------------------
// -- parsing ----------------------------------------------------------------
/// Tries to parse a value from `str`.
static
expected
<
config_value
>
parse
(
string_view
::
iterator
first
,
string_view
::
iterator
last
);
/// Tries to parse a value from `str`.
static
expected
<
config_value
>
parse
(
string_view
::
iterator
first
,
string_view
::
iterator
last
);
/// Tries to parse a value from `str`.
static
expected
<
config_value
>
parse
(
string_view
str
);
/// Tries to parse a value from `str`.
static
expected
<
config_value
>
parse
(
string_view
str
);
// -- properties -------------------------------------------------------------
// -- properties -------------------------------------------------------------
/// Converts the value to a list with one element. Does nothing if the value
/// already is a list.
void
convert_to_list
();
/// Converts the value to a list with one element. Does nothing if the value
/// already is a list.
void
convert_to_list
();
/// Returns the value as a list, converting it to one if needed.
list
&
as_list
();
/// Returns the value as a list, converting it to one if needed.
list
&
as_list
();
/// Returns the value as a dictionary, converting it to one if needed.
dictionary
&
as_dictionary
();
/// Returns the value as a dictionary, converting it to one if needed.
dictionary
&
as_dictionary
();
/// Appends `x` to a list. Converts this config value to a list first by
/// calling `convert_to_list` if needed.
void
append
(
config_value
x
);
/// Appends `x` to a list. Converts this config value to a list first by
/// calling `convert_to_list` if needed.
void
append
(
config_value
x
);
/// Returns a human-readable type name of the current value.
const
char
*
type_name
()
const
noexcept
;
/// Returns a human-readable type name of the current value.
const
char
*
type_name
()
const
noexcept
;
/// Returns the underlying variant.
variant_type
&
get_data
()
{
return
data_
;
}
/// Returns the underlying variant.
variant_type
&
get_data
()
{
return
data_
;
}
/// Returns the underlying variant.
const
variant_type
&
get_data
()
const
{
return
data_
;
}
/// Returns the underlying variant.
const
variant_type
&
get_data
()
const
{
return
data_
;
}
/// Returns a pointer to the underlying variant.
variant_type
*
get_data_ptr
()
{
return
&
data_
;
}
/// Returns a pointer to the underlying variant.
variant_type
*
get_data_ptr
()
{
return
&
data_
;
}
/// Returns a pointer to the underlying variant.
const
variant_type
*
get_data_ptr
()
const
{
return
&
data_
;
}
/// Returns a pointer to the underlying variant.
const
variant_type
*
get_data_ptr
()
const
{
return
&
data_
;
}
private:
// -- properties -------------------------------------------------------------
private:
// -- properties -------------------------------------------------------------
static
const
char
*
type_name_at_index
(
size_t
index
)
noexcept
;
static
const
char
*
type_name_at_index
(
size_t
index
)
noexcept
;
// -- auto conversion of related types ---------------------------------------
// -- auto conversion of related types ---------------------------------------
void
set
(
bool
x
)
{
data_
=
x
;
}
void
set
(
bool
x
)
{
data_
=
x
;
}
void
set
(
float
x
)
{
data_
=
static_cast
<
double
>
(
x
);
}
void
set
(
float
x
)
{
data_
=
static_cast
<
double
>
(
x
);
}
void
set
(
const
char
*
x
)
{
data_
=
std
::
string
{
x
};
}
void
set
(
const
char
*
x
)
{
data_
=
std
::
string
{
x
};
}
void
set
(
string_view
x
)
{
data_
=
std
::
string
{
x
.
begin
(),
x
.
end
()};
}
void
set
(
string_view
x
)
{
data_
=
std
::
string
{
x
.
begin
(),
x
.
end
()};
}
template
<
class
T
>
detail
::
enable_if_t
<
detail
::
is_one_of
<
T
,
real
,
timespan
,
uri
,
string
,
list
,
dictionary
>::
value
>
set
(
T
x
)
{
data_
=
std
::
move
(
x
);
}
template
<
class
T
>
detail
::
enable_if_t
<
detail
::
is_one_of
<
T
,
real
,
timespan
,
uri
,
string
,
list
,
dictionary
>::
value
>
set
(
T
x
)
{
data_
=
std
::
move
(
x
);
}
template
<
class
T
>
void
set_range
(
T
&
xs
,
std
::
true_type
)
{
auto
&
dict
=
as_dictionary
();
dict
.
clear
();
for
(
auto
&
kvp
:
xs
)
dict
.
emplace
(
kvp
.
first
,
std
::
move
(
kvp
.
second
));
}
template
<
class
T
>
void
set_range
(
T
&
xs
,
std
::
true_type
)
{
auto
&
dict
=
as_dictionary
();
dict
.
clear
();
for
(
auto
&
kvp
:
xs
)
dict
.
emplace
(
kvp
.
first
,
std
::
move
(
kvp
.
second
));
}
template
<
class
T
>
void
set_range
(
T
&
xs
,
std
::
false_type
)
{
auto
&
ls
=
as_list
();
ls
.
clear
();
ls
.
insert
(
ls
.
end
(),
std
::
make_move_iterator
(
xs
.
begin
()),
std
::
make_move_iterator
(
xs
.
end
()));
}
template
<
class
T
>
void
set_range
(
T
&
xs
,
std
::
false_type
)
{
auto
&
ls
=
as_list
();
ls
.
clear
();
ls
.
insert
(
ls
.
end
(),
std
::
make_move_iterator
(
xs
.
begin
()),
std
::
make_move_iterator
(
xs
.
end
()));
}
template
<
class
T
>
detail
::
enable_if_t
<
detail
::
is_iterable
<
T
>::
value
&&
!
detail
::
is_one_of
<
T
,
string
,
list
,
dictionary
>::
value
>
set
(
T
xs
)
{
using
value_type
=
typename
T
::
value_type
;
detail
::
bool_token
<
detail
::
is_pair
<
value_type
>::
value
>
is_map_type
;
set_range
(
xs
,
is_map_type
);
}
template
<
class
T
>
detail
::
enable_if_t
<
detail
::
is_iterable
<
T
>::
value
&&
!
detail
::
is_one_of
<
T
,
string
,
list
,
dictionary
>::
value
>
set
(
T
xs
)
{
using
value_type
=
typename
T
::
value_type
;
detail
::
bool_token
<
detail
::
is_pair
<
value_type
>::
value
>
is_map_type
;
set_range
(
xs
,
is_map_type
);
}
template
<
class
T
>
detail
::
enable_if_t
<
std
::
is_integral
<
T
>::
value
>
set
(
T
x
)
{
data_
=
static_cast
<
int64_t
>
(
x
);
}
template
<
class
T
>
detail
::
enable_if_t
<
std
::
is_integral
<
T
>::
value
>
set
(
T
x
)
{
data_
=
static_cast
<
int64_t
>
(
x
);
}
// -- member variables -------------------------------------------------------
// -- member variables -------------------------------------------------------
variant_type
data_
;
variant_type
data_
;
};
// -- convenience constants ----------------------------------------------------
...
...
@@ -251,9 +251,9 @@ struct default_config_value_access {
}
template
<
class
Nested
>
static
void
parse_cli
(
string_parser_state
&
ps
,
T
&
x
,
Nested
)
{
detail
::
parse
(
ps
,
x
);
}
static
void
parse_cli
(
string_parser_state
&
ps
,
T
&
x
,
Nested
)
{
detail
::
parse
(
ps
,
x
);
}
};
struct
config_value_access_unspecialized
{};
...
...
@@ -265,7 +265,7 @@ struct config_value_access : config_value_access_unspecialized {};
#define CAF_DEFAULT_CONFIG_VALUE_ACCESS(type, name) \
template <> \
struct CAF_CORE_EXPORT config_value_access<type> \
: default_config_value_access<type> { \
: default_config_value_access<type> { \
static std::string type_name() { \
return name; \
} \
...
...
@@ -839,8 +839,8 @@ inline bool operator!=(const config_value& x, const config_value& y) {
CAF_CORE_EXPORT
std
::
string
to_string
(
const
config_value
&
x
);
/// @relates config_value
CAF_CORE_EXPORT
std
::
ostream
&
operator
<<
(
std
::
ostream
&
out
,
const
config_value
&
x
);
CAF_CORE_EXPORT
std
::
ostream
&
operator
<<
(
std
::
ostream
&
out
,
const
config_value
&
x
);
template
<
class
...
Ts
>
config_value
make_config_value_list
(
Ts
&&
...
xs
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment