codecs::basic_codec::decode

// exposition only
template <typename ...Ts>
using Decoder = decltype(make_decoder(std::declval<Ts>()...));

template <typename T = traits::default_decoded_output,
          codecs::input_source IS>
   requires codecs::codec_output<T, Decoder<IS>>
static T decode(IS is);                                  // (1)

template <typename T = traits::default_decoded_output,
          meta::input_iterator I,
          meta::sentinel_for<I> S>
   requires codecs::codec_output<T, Decoder<I, S>>
static T decode(I i, S s);                               // (2)

template <typename T = traits::default_decoded_output,
          meta::input_range R>
   requires codecs::codec_output<T, Decoder<R>>
static T decode(R& rng);                                 // (3)

template <typename T = traits::default_decoded_output,
          meta::input_range R>
   requires codecs::codec_output<T, Decoder<R const>>
static T decode(R const& rng);                           // (4)

Decodes input.


All these overloads will only participate in overload resolution if calling codecs::basic_codec::make_decoder with the same arguments is valid.

  1. Decodes the content of the input source is.

  2. Decodes the content of the iterator-sentinel range [i, s) and returns the result as a T.

  3. Decodes the content of rng, and returns the result as a T.

  4. Same as (3), but allows rvalues and const lvalues to be passed.

Parameters

  • is - Input source

  • rng - Input range

  • i, s - Iterator/sentinel input range

Return value

A value containing the decoded output

Example

#include <mgs/base64.hpp>
#include <mgs/codecs/basic_codec.hpp>
#include <mgs/codecs/iterator_sentinel_source.hpp>

using namespace mgs;
using namespace mgs::codecs;

using codec = basic_codec<base64::traits>;

int main() {
  std::string encoded("SGVsbG8sIFdvcmxkIQ==");
  auto input_source = make_iterator_sentinel_source(encoded);

  codec::decode(input_source);                   // (1)
  codec::decode(encoded.begin(), encoded.end()); // (2)
  codec::decode(encoded);                        // (3)
  codec::decode(std::move(encoded));             // (4)
}