Skip to content

API muesli delimited_codec

Felix Jones edited this page Jan 15, 2026 · 1 revision

muesli/delimited_codec

Defined in header <muesli/delimited_codec>

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.

Template Parameters

Parameter Description
ElementCodec Codec for individual elements
DelimiterPredicate Predicate to detect delimiter (returns true when found)

Member Types

element_value_type

using element_value_type = typename ElementCodec::value_type

Element 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_type

Encoded 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

Member Functions

delimiter_predicate

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)

Example

auto null_term = delimited_codec(
    char_codec,
    [](char c) { return c == '\0'; }
);

delimiter_predicate

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


next_codec

constexpr auto next_codec() const noexcept

Returns the next codec in the encoding chain


encode

encoded_type encode(value_type&& value) const

Encodes a range of values, stopping at delimiter elements


decode_state

struct decode_state

Internal state for decoding delimited ranges


Clone this wiki locally