Describes a fixed-length, copy-on-write, type-erased tuple with elements of any type.
More...
|
| message (none_t) noexcept |
|
| message (const message &) noexcept=default |
|
message & | operator= (const message &) noexcept=default |
|
| message (message &&) noexcept |
|
message & | operator= (message &&) noexcept |
|
| message (data_ptr ptr) noexcept |
|
void * | get_mutable (size_t p) override |
| Returns a mutable pointer to the element at position pos .
|
|
error | load (size_t pos, deserializer &source) override |
| Load the content for the element at position pos from source .
|
|
size_t | size () const noexcept override |
| Returns the size of this tuple.
|
|
uint32_t | type_token () const noexcept override |
| Returns a type hint for the element types.
|
|
rtti_pair | type (size_t pos) const noexcept override |
| Returns the type number and std::type_info object for the element at position pos . More...
|
|
const void * | get (size_t pos) const noexcept override |
| Returns the element at position pos .
|
|
std::string | stringify (size_t pos) const override |
| Returns a string representation of the element at position pos .
|
|
type_erased_value_ptr | copy (size_t pos) const override |
| Returns a copy of the element at position pos .
|
|
error | save (size_t pos, serializer &sink) const override |
| Saves the element at position pos to sink .
|
|
bool | shared () const noexcept override |
| Returns whether multiple references to this tuple exist. More...
|
|
error | load (deserializer &source) override |
| Load the content for the tuple from source .
|
|
error | save (serializer &sink) const override |
| Saves the content of the tuple to sink .
|
|
message & | operator+= (const message &x) |
| Concatenates *this and x .
|
|
optional< message > | apply (message_handler handler) |
| Returns handler(*this) .
|
|
void | force_unshare () |
| Forces the message to copy its content if there are more than one references to the content. More...
|
|
data_ptr & | vals () |
| Returns a mutable reference to the content. More...
|
|
void | swap (message &other) noexcept |
| Exchanges content of this and other .
|
|
void | reset (raw_ptr new_ptr=nullptr, bool add_ref=true) noexcept |
| Assigns new content.
|
|
message | drop (size_t n) const |
| Creates a new message with all but the first n values.
|
|
message | drop_right (size_t n) const |
| Creates a new message with all but the last n values.
|
|
message | slice (size_t pos, size_t n) const |
| Creates a new message of size n starting at the element at position p .
|
|
message | extract (message_handler handler) const |
| Filters this message by applying slices of it to handler and returns the remaining elements of this operation. More...
|
|
cli_res | extract_opts (std::vector< cli_arg > xs, const help_factory &f=nullptr, bool no_help=false) const |
| A simplistic interface for using extract to parse command line options. More...
|
|
const void * | at (size_t p) const noexcept |
| Returns a const pointer to the element at position p .
|
|
const data_ptr & | vals () const noexcept |
| Returns a reference to the content.
|
|
const data_ptr & | cvals () const noexcept |
| Returns a reference to the content.
|
|
message | take (size_t n) const |
| Returns the size of this message. More...
|
|
message | take_right (size_t n) const |
| Creates a new message from the last n values.
|
|
| type_erased_tuple (const type_erased_tuple &)=default |
|
type_erased_tuple & | operator= (const type_erased_tuple &)=default |
|
bool | empty () const |
| Returns size() == 0 .
|
|
std::string | stringify () const |
| Returns a string representation of the tuple.
|
|
bool | matches (size_t pos, uint16_t nr, const std::type_info *ptr) const noexcept |
| Checks whether the type of the stored value at position pos matches type number n and run-time type information p . More...
|
|
uint16_t | type_nr (size_t pos) const noexcept |
| Returns the type number for the element at position pos .
|
|
bool | matches (size_t pos, const rtti_pair &rtti) const noexcept |
| Checks whether the type of the stored value matches rtti .
|
|
template<class T > |
const T & | get_as (size_t pos) const |
| Convenience function for *reinterpret_cast<const T*>(get()) .
|
|
template<class T , size_t Pos> |
const T & | get_as (typed_index< T, Pos >) const |
|
template<class... Ts, long... Is> |
std::tuple< const Ts &... > | get_as_tuple (detail::type_list< Ts... >, detail::int_list< Is... >) const |
|
template<class... Ts> |
std::tuple< const Ts &... > | get_as_tuple () const |
|
template<class T > |
T & | get_mutable_as (size_t pos) |
| Convenience function for *reinterpret_cast<T*>(get_mutable()) .
|
|
template<class T > |
T | move_if_unshared (size_t pos) |
| Convenience function for moving a value out of the tuple if it is unshared. More...
|
|
template<class T > |
bool | match_element (size_t pos) const noexcept |
| Returns true if the element at pos matches T .
|
|
template<class... Ts> |
bool | match_elements () const noexcept |
| Returns true if the pattern Ts... matches the content of this tuple.
|
|
template<class F > |
auto | apply (F fun) -> optional< typename detail::get_callable_trait< F >::result_type > |
|
Describes a fixed-length, copy-on-write, type-erased tuple with elements of any type.
Filters this message by applying slices of it to handler
and returns the remaining elements of this operation.
Slices are generated in the sequence [0, size)
, [0, size-1)
, ...
, [1, size-1)
, ...
, [size-1, size)
. Whenever a slice matches, it is removed from the message and the next slice starts at the same index on the reduced message.
For example:
auto msg2 = msg.extract({
[](float, float) { },
[](int, int) { }
});
Step-by-step explanation:
- Slice 1:
(1, 2.f, 3.f, 4)
, no match
- Slice 2:
(1, 2.f, 3.f)
, no match
- Slice 3:
(1, 2.f)
, no match
- Slice 4:
(1)
, no match
- Slice 5:
(2.f, 3.f, 4)
, no match
- Slice 6:
(2.f, 3.f)
, match; new message is (1, 4)
- Slice 7:
(4)
, no match
Slice 7 is (4)
, i.e., does not contain the first element, because the match on slice 6 occurred at index position 1. The function extract
iterates a message only once, from left to right.