From 1d055261b4144dbf86b2658437015b15d4dd9bff Mon Sep 17 00:00:00 2001 From: Richard Date: Sun, 4 Sep 2022 00:32:56 +0100 Subject: initial --- include/jsoncons_ext/msgpack/msgpack_reader.hpp | 116 ++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 include/jsoncons_ext/msgpack/msgpack_reader.hpp (limited to 'include/jsoncons_ext/msgpack/msgpack_reader.hpp') diff --git a/include/jsoncons_ext/msgpack/msgpack_reader.hpp b/include/jsoncons_ext/msgpack/msgpack_reader.hpp new file mode 100644 index 0000000..c0d788a --- /dev/null +++ b/include/jsoncons_ext/msgpack/msgpack_reader.hpp @@ -0,0 +1,116 @@ +// Copyright 2017 Daniel Parker +// Distributed under the Boost license, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See https://github.com/danielaparker/jsoncons for latest version + +#ifndef JSONCONS_MSGPACK_MSGPACK_READER_HPP +#define JSONCONS_MSGPACK_MSGPACK_READER_HPP + +#include +#include +#include +#include // std::move +#include +#include +#include +#include +#include +#include +#include + +namespace jsoncons { namespace msgpack { + +template > +class basic_msgpack_reader +{ + using char_type = char; + + basic_msgpack_parser parser_; + basic_json_visitor2_to_visitor_adaptor adaptor_; + json_visitor2& visitor_; +public: + template + basic_msgpack_reader(Sourceable&& source, + json_visitor& visitor, + const Allocator alloc) + : basic_msgpack_reader(std::forward(source), + visitor, + msgpack_decode_options(), + alloc) + { + } + + template + basic_msgpack_reader(Sourceable&& source, + json_visitor& visitor, + const msgpack_decode_options& options = msgpack_decode_options(), + const Allocator alloc=Allocator()) + : parser_(std::forward(source), options, alloc), + adaptor_(visitor, alloc), visitor_(adaptor_) + { + } + template + basic_msgpack_reader(Sourceable&& source, + json_visitor2& visitor, + const Allocator alloc) + : basic_msgpack_reader(std::forward(source), + visitor, + msgpack_decode_options(), + alloc) + { + } + + template + basic_msgpack_reader(Sourceable&& source, + json_visitor2& visitor, + const msgpack_decode_options& options = msgpack_decode_options(), + const Allocator alloc=Allocator()) + : parser_(std::forward(source), options, alloc), + visitor_(visitor) + { + } + + void read() + { + std::error_code ec; + read(ec); + if (ec) + { + JSONCONS_THROW(ser_error(ec,line(),column())); + } + } + + void read(std::error_code& ec) + { + parser_.reset(); + parser_.parse(visitor_, ec); + if (ec) + { + return; + } + } + + std::size_t line() const + { + return parser_.line(); + } + + std::size_t column() const + { + return parser_.column(); + } +}; + +using msgpack_stream_reader = basic_msgpack_reader; + +using msgpack_bytes_reader = basic_msgpack_reader; + +#if !defined(JSONCONS_NO_DEPRECATED) +JSONCONS_DEPRECATED_MSG("Instead, use msgpack_stream_reader") typedef msgpack_stream_reader msgpack_reader; +JSONCONS_DEPRECATED_MSG("Instead, use msgpack_bytes_reader") typedef msgpack_bytes_reader msgpack_buffer_reader; +#endif + +}} + +#endif -- cgit v1.2.3