-
Notifications
You must be signed in to change notification settings - Fork 0
API muesli delimited_codec
Defined in header <muesli/delimited_codec>
template<DelimiterPredicate>
struct delimited_codec : fluent::optionable<delimited_codec<ElementCodec, DelimiterPredicate>>,
fluent::constrainable<delimited_codec<ElementCodec, DelimiterPredicate>>,
fluent::transformable<delimited_codec<ElementCodec, DelimiterPredicate>>,
fluent::projectable<delimited_codec<ElementCodec, DelimiterPredicate>>,
fluent::constructable<delimited_codec<ElementCodec, DelimiterPredicate>>,
fluent::nullableable<delimited_codec<ElementCodec, DelimiterPredicate>>Codec for element-delimited ranges (strings, delimited lists).
The delimited_codec encodes/decodes a range of elements up to a delimiter. Commonly used for null-terminated strings and comma-separated values.
| Parameter | Description |
|---|---|
ElementCodec |
Codec for individual elements |
DelimiterPredicate |
Predicate to detect delimiter (returns true when found) |
element_value_type
using element_value_type = typename ElementCodec::value_typeElement value type from the element codec
next_codec_type
using next_codec_type = std::decay_t<decltype(std::declval<ElementCodec>().next_codec())>Next codec type in the encoding chain
element_encoded_type
using element_encoded_type = typename next_codec_type::value_typeEncoded element type from the next codec
value_type
using value_type = range_holder<element_value_type>Value type is a range holder of element values
encoded_type
using encoded_type = range_holder<element_encoded_type>Encoded type is a range holder of encoded elements
Constructs a delimited_codec with element codec and delimiter predicate
constexpr delimited_codec(const ElementCodec& codec, const DelimiterPredicate& predicate) noexcept : element_codec(codec), delimiter_predicate(predicate)auto null_term = delimited_codec(
char_codec,
[](char c) { return c == '\0'; }
);using element_value_type = typename ElementCodec::value_type; /** @brief Next codec type in the encoding chain */ using next_codec_type = std::decay_t<decltype(std::declval<ElementCodec>().next_codec())>; /** @brief Encoded element type from the next codec */ using element_encoded_type = typename next_codec_type::value_type; /** @brief Value type is a range holder of element values */ using value_type = range_holder<element_value_type>; /** @brief Encoded type is a range holder of encoded elements */ using encoded_type = range_holder<element_encoded_type>; /** @brief Codec for individual elements */ ElementCodec element_codec; /** @brief Predicate to detect delimiter elements */ DelimiterPredicate delimiter_predicate; /** @brief Constructs a delimited_codec with element codec and delimiter predicate */ constexpr delimited_codec(const ElementCodec& codec, const DelimiterPredicate& predicate) noexcept : element_codec(codec), delimiter_predicate(predicate)Element value type from the element codec
constexpr auto next_codec() const noexceptReturns the next codec in the encoding chain
encoded_type encode(value_type&& value) constEncodes a range of values, stopping at delimiter elements
struct decode_stateInternal state for decoding delimited ranges