diff --git a/bench/bench.cpp b/bench/bench.cpp index eb34c501..38149bed 100644 --- a/bench/bench.cpp +++ b/bench/bench.cpp @@ -298,7 +298,7 @@ public: while(repeat--) { p.reset(); - error_code ec; + system::error_code ec; p.write(s.data(), s.size(), ec); if(! ec) p.finish(ec); @@ -320,7 +320,7 @@ public: FILE* f = fopen(fi.name.data(), "rb"); - error_code ec; + system::error_code ec; while( true ) { std::size_t const sz = fread(s, 1, sizeof(s), f); @@ -412,7 +412,7 @@ public: { monotonic_resource mr; p.reset(&mr); - error_code ec; + system::error_code ec; p.write(s.data(), s.size(), ec); if(! ec) p.finish(ec); @@ -435,7 +435,7 @@ public: FILE* f = fopen(fi.name.data(), "rb"); - error_code ec; + system::error_code ec; while( true ) { std::size_t const sz = fread(s, 1, sizeof(s), f); @@ -509,24 +509,24 @@ class boost_null_impl : public any_impl constexpr static std::size_t max_key_size = std::size_t(-1); constexpr static std::size_t max_string_size = std::size_t(-1); - bool on_document_begin(error_code&) { return true; } - bool on_document_end(error_code&) { return true; } - bool on_object_begin(error_code&) { return true; } - bool on_object_end(std::size_t, error_code&) { return true; } - bool on_array_begin(error_code&) { return true; } - bool on_array_end(std::size_t, error_code&) { return true; } - bool on_key_part(string_view, std::size_t, error_code&) { return true; } - bool on_key( string_view, std::size_t, error_code&) { return true; } - bool on_string_part(string_view, std::size_t, error_code&) { return true; } - bool on_string(string_view, std::size_t, error_code&) { return true; } - bool on_number_part(string_view, error_code&) { return true; } - bool on_int64(std::int64_t, string_view, error_code&) { return true; } - bool on_uint64(std::uint64_t, string_view, error_code&) { return true; } - bool on_double(double, string_view, error_code&) { return true; } - bool on_bool(bool, error_code&) { return true; } - bool on_null(error_code&) { return true; } - bool on_comment_part(string_view, error_code&) { return true; } - bool on_comment(string_view, error_code&) { return true; } + bool on_document_begin(system::error_code&) { return true; } + bool on_document_end(system::error_code&) { return true; } + bool on_object_begin(system::error_code&) { return true; } + bool on_object_end(std::size_t, system::error_code&) { return true; } + bool on_array_begin(system::error_code&) { return true; } + bool on_array_end(std::size_t, system::error_code&) { return true; } + bool on_key_part(string_view, std::size_t, system::error_code&) { return true; } + bool on_key( string_view, std::size_t, system::error_code&) { return true; } + bool on_string_part(string_view, std::size_t, system::error_code&) { return true; } + bool on_string(string_view, std::size_t, system::error_code&) { return true; } + bool on_number_part(string_view, system::error_code&) { return true; } + bool on_int64(std::int64_t, string_view, system::error_code&) { return true; } + bool on_uint64(std::uint64_t, string_view, system::error_code&) { return true; } + bool on_double(double, string_view, system::error_code&) { return true; } + bool on_bool(bool, system::error_code&) { return true; } + bool on_null(system::error_code&) { return true; } + bool on_comment_part(string_view, system::error_code&) { return true; } + bool on_comment(string_view, system::error_code&) { return true; } }; basic_parser p_; @@ -546,7 +546,7 @@ class boost_null_impl : public any_impl write( char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = p_.write_some( false, data, size, ec); @@ -559,14 +559,14 @@ class boost_null_impl : public any_impl write_some( char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { return p_.write_some( true, data, size, ec); } void - finish(error_code& ec) + finish(system::error_code& ec) { p_.write_some(false, nullptr, 0, ec); } @@ -599,7 +599,7 @@ public: while(repeat--) { p.reset(); - error_code ec; + system::error_code ec; p.write(s.data(), s.size(), ec); BOOST_ASSERT(! ec); } @@ -618,7 +618,7 @@ public: FILE* f = fopen(fi.name.data(), "rb"); - error_code ec; + system::error_code ec; while( true ) { std::size_t const sz = fread(s, 1, sizeof(s), f); @@ -679,7 +679,7 @@ public: auto const start = clock_type::now(); while(repeat--) { - error_code ec; + system::error_code ec; monotonic_resource mr; auto jv = json::parse(s, ec, &mr, popts); (void)jv; @@ -693,7 +693,7 @@ public: auto const start = clock_type::now(); while(repeat--) { - error_code ec; + system::error_code ec; std::ifstream is( fi.name, std::ios::in | std::ios::binary ); monotonic_resource mr; auto jv = json::parse(is, ec, &mr, popts); @@ -1188,7 +1188,7 @@ main( dout << "\n" << strout.str(); } - catch(system_error const& se) + catch(boost::system::system_error const& se) { dout << se.what() << std::endl; } diff --git a/doc/qbk/allocators/background.qbk b/doc/qbk/allocators/background.qbk index ad4eea3f..0c7eb99e 100644 --- a/doc/qbk/allocators/background.qbk +++ b/doc/qbk/allocators/background.qbk @@ -39,12 +39,12 @@ definitions must be visible at all call sites. [heading Polymorphic Allocators] C++17 improves the allocator model by representing the low-level -allocation operation with an abstract interface called __memory_resource__, +allocation operation with an abstract interface called `memory_resource`, which is not parameterized on the element type, and has no traits: [doc_background_3] -The class template __polymorphic_allocator__ wraps a __memory_resource__ +The class template `polymorphic_allocator` wraps a `memory_resource` pointer and meets the requirements of __Allocator__, allowing it to be used where an allocator is expected. The standard provides type aliases using the polymorphic allocator for standard containers: @@ -71,20 +71,20 @@ instance of the library's custom memory resource as shown below: [doc_background_7] -This can be worked around by declaring the container to use a custom -allocator (perhaps using a `std::shared_ptr< memory_resource >` as a -data member). This hinders library composition; every library now -exports unique, incompatible container types. A raw memory resource -pointer is also easy to misuse: +This can be worked around by declaring the container to use a custom allocator +(perhaps using a `std::shared_ptr< std::pmr::memory_resource >` as +a data member). This hinders library composition; every library now exports +unique, incompatible container types. A raw memory resource pointer is also +easy to misuse: [doc_background_8] Workarounds for this problem are worse than the problem itself. The library -could return a pair with the vector and `unique_ptr` -which the caller must manage. Or the library could change its function -signatures to accept a `memory_resource*` provided by the caller, where -the library also makes public the desired memory resources -(`my_resource` above). +could return a pair with the vector and +`std::unique_ptr` which the caller must +manage. Or the library could change its function signatures to accept a +`memory_resource*` provided by the caller, where the library also makes public +the desired memory resources (`my_resource` above). [heading Problem Statement] @@ -92,7 +92,7 @@ We would like an allocator model using a single type `T` with the following properties: * `T` is not a class template -* `T` references a __memory_resource__ +* `T` references a `memory_resource` * `T` supports both reference semantics or shared ownership * `T` interoperates with code already using `std::pmr` diff --git a/doc/qbk/quickref.xml b/doc/qbk/quickref.xml index edf39430..b1bcad68 100644 --- a/doc/qbk/quickref.xml +++ b/doc/qbk/quickref.xml @@ -105,15 +105,15 @@ Aliases - error_category - error_code - error_condition - memory_resource + error_category + error_code + error_condition + memory_resource parser_for - polymorphic_allocator - result + polymorphic_allocator + result string_view - system_error + system_error P0308R0 diff --git a/example/file.hpp b/example/file.hpp index df794326..0d25a7a6 100644 --- a/example/file.hpp +++ b/example/file.hpp @@ -20,7 +20,7 @@ class file long size_ = 0; void - fail(boost::json::error_code& ec) + fail(boost::system::error_code& ec) { ec.assign( errno, boost::system::generic_category() ); } @@ -69,7 +69,7 @@ public: open( char const* path, char const* mode, - boost::json::error_code& ec) + boost::system::error_code& ec) { close(); #if defined(_MSC_VER) @@ -99,10 +99,10 @@ public: char const* path, char const* mode) { - boost::json::error_code ec; + boost::system::error_code ec; open(path, mode, ec); if(ec) - throw boost::json::system_error(ec); + throw boost::system::system_error(ec); } long @@ -118,7 +118,7 @@ public: } std::size_t - read( char* data, std::size_t size, boost::json::error_code& ec) + read( char* data, std::size_t size, boost::system::error_code& ec) { auto const nread = std::fread( data, 1, size, f_ ); if( std::ferror(f_) ) @@ -129,17 +129,17 @@ public: std::size_t read( char* data, std::size_t size ) { - boost::json::error_code ec; + boost::system::error_code ec; auto const nread = read( data, size, ec ); if(ec) - throw boost::json::system_error(ec); + throw boost::system::system_error(ec); return nread; } }; inline std::string -read_file( char const* path, boost::json::error_code& ec ) +read_file( char const* path, boost::system::error_code& ec ) { file f; f.open( path, "r", ec ); @@ -157,10 +157,10 @@ inline std::string read_file( char const* path ) { - boost::json::error_code ec; + boost::system::error_code ec; auto s = read_file( path, ec); if(ec) - throw boost::json::system_error(ec); + throw boost::system::system_error(ec); return s; } diff --git a/example/parse_into.cpp b/example/parse_into.cpp index 4edf5160..fc89f3d2 100644 --- a/example/parse_into.cpp +++ b/example/parse_into.cpp @@ -176,7 +176,7 @@ int main() coordinates1 w; - boost::json::error_code ec; + boost::system::error_code ec; boost::json::parse_into( w, json, ec ); if( ec.failed() ) @@ -212,7 +212,7 @@ int main() coordinates2 w; - boost::json::error_code ec; + boost::system::error_code ec; boost::json::parse_into( w, json, ec ); if( ec.failed() ) diff --git a/example/parse_into_canada.cpp b/example/parse_into_canada.cpp index 347cec2e..7489f43f 100644 --- a/example/parse_into_canada.cpp +++ b/example/parse_into_canada.cpp @@ -82,7 +82,7 @@ int main() canada w; - boost::json::error_code ec; + boost::system::error_code ec; boost::json::parse_into( w, json, ec ); if( ec.failed() ) diff --git a/example/parse_into_citm_catalog.cpp b/example/parse_into_citm_catalog.cpp index 796ab0b2..7b1c8ee1 100644 --- a/example/parse_into_citm_catalog.cpp +++ b/example/parse_into_citm_catalog.cpp @@ -129,7 +129,7 @@ int main() citm_catalog w; - boost::json::error_code ec; + boost::system::error_code ec; boost::json::parse_into( w, json, ec ); if( ec.failed() ) diff --git a/example/pretty.cpp b/example/pretty.cpp index b175dafe..1de936d5 100644 --- a/example/pretty.cpp +++ b/example/pretty.cpp @@ -27,7 +27,7 @@ parse_file( char const* filename ) { file f( filename, "r" ); json::stream_parser p; - json::error_code ec; + boost::system::error_code ec; do { char buf[4096]; diff --git a/example/use_allocator.cpp b/example/use_allocator.cpp index 093f5771..5cb2826a 100644 --- a/example/use_allocator.cpp +++ b/example/use_allocator.cpp @@ -42,7 +42,7 @@ template< is_sequence_like::value && std::uses_allocator::value >::type > -result +boost::system::result tag_invoke( try_value_to_tag, const value& jv, const use_allocator_t& ctx, const FullContext& full_ctx ) { diff --git a/example/validate.cpp b/example/validate.cpp index 545f7936..420fe173 100644 --- a/example/validate.cpp +++ b/example/validate.cpp @@ -36,24 +36,24 @@ class null_parser constexpr static std::size_t max_key_size = std::size_t(-1); constexpr static std::size_t max_string_size = std::size_t(-1); - bool on_document_begin( error_code& ) { return true; } - bool on_document_end( error_code& ) { return true; } - bool on_object_begin( error_code& ) { return true; } - bool on_object_end( std::size_t, error_code& ) { return true; } - bool on_array_begin( error_code& ) { return true; } - bool on_array_end( std::size_t, error_code& ) { return true; } - bool on_key_part( string_view, std::size_t, error_code& ) { return true; } - bool on_key( string_view, std::size_t, error_code& ) { return true; } - bool on_string_part( string_view, std::size_t, error_code& ) { return true; } - bool on_string( string_view, std::size_t, error_code& ) { return true; } - bool on_number_part( string_view, error_code& ) { return true; } - bool on_int64( std::int64_t, string_view, error_code& ) { return true; } - bool on_uint64( std::uint64_t, string_view, error_code& ) { return true; } - bool on_double( double, string_view, error_code& ) { return true; } - bool on_bool( bool, error_code& ) { return true; } - bool on_null( error_code& ) { return true; } - bool on_comment_part(string_view, error_code&) { return true; } - bool on_comment(string_view, error_code&) { return true; } + bool on_document_begin( boost::system::error_code& ) { return true; } + bool on_document_end( boost::system::error_code& ) { return true; } + bool on_object_begin( boost::system::error_code& ) { return true; } + bool on_object_end( std::size_t, boost::system::error_code& ) { return true; } + bool on_array_begin( boost::system::error_code& ) { return true; } + bool on_array_end( std::size_t, boost::system::error_code& ) { return true; } + bool on_key_part( string_view, std::size_t, boost::system::error_code& ) { return true; } + bool on_key( string_view, std::size_t, boost::system::error_code& ) { return true; } + bool on_string_part( string_view, std::size_t, boost::system::error_code& ) { return true; } + bool on_string( string_view, std::size_t, boost::system::error_code& ) { return true; } + bool on_number_part( string_view, boost::system::error_code& ) { return true; } + bool on_int64( std::int64_t, string_view, boost::system::error_code& ) { return true; } + bool on_uint64( std::uint64_t, string_view, boost::system::error_code& ) { return true; } + bool on_double( double, string_view, boost::system::error_code& ) { return true; } + bool on_bool( bool, boost::system::error_code& ) { return true; } + bool on_null( boost::system::error_code& ) { return true; } + bool on_comment_part(string_view, boost::system::error_code&) { return true; } + bool on_comment(string_view, boost::system::error_code&) { return true; } }; basic_parser p_; @@ -72,7 +72,7 @@ public: write( char const* data, std::size_t size, - error_code& ec) + boost::system::error_code& ec) { auto const n = p_.write_some( false, data, size, ec ); if(! ec && n < size) @@ -86,7 +86,7 @@ validate( string_view s ) { // Parse with the null parser and return false on error null_parser p; - error_code ec; + boost::system::error_code ec; p.write( s.data(), s.size(), ec ); if( ec ) return false; diff --git a/fuzzing/fuzz_basic_parser.cpp b/fuzzing/fuzz_basic_parser.cpp index 989a57a9..99bebe4a 100644 --- a/fuzzing/fuzz_basic_parser.cpp +++ b/fuzzing/fuzz_basic_parser.cpp @@ -26,24 +26,24 @@ class null_parser constexpr static std::size_t max_key_size = std::size_t(-1); constexpr static std::size_t max_string_size = std::size_t(-1); - bool on_document_begin( error_code& ) { return true; } - bool on_document_end( error_code& ) { return true; } - bool on_object_begin( error_code& ) { return true; } - bool on_object_end( std::size_t, error_code& ) { return true; } - bool on_array_begin( error_code& ) { return true; } - bool on_array_end( std::size_t, error_code& ) { return true; } - bool on_key_part( string_view, std::size_t, error_code& ) { return true; } - bool on_key( string_view, std::size_t, error_code& ) { return true; } - bool on_string_part( string_view, std::size_t, error_code& ) { return true; } - bool on_string( string_view, std::size_t, error_code& ) { return true; } - bool on_number_part( string_view, error_code& ) { return true; } - bool on_int64( std::int64_t, string_view, error_code& ) { return true; } - bool on_uint64( std::uint64_t, string_view, error_code& ) { return true; } - bool on_double( double, string_view, error_code& ) { return true; } - bool on_bool( bool, error_code& ) { return true; } - bool on_null( error_code& ) { return true; } - bool on_comment_part(string_view, error_code&) { return true; } - bool on_comment(string_view, error_code&) { return true; } + bool on_document_begin( boost::system::error_code& ) { return true; } + bool on_document_end( boost::system::error_code& ) { return true; } + bool on_object_begin( boost::system::error_code& ) { return true; } + bool on_object_end( std::size_t, boost::system::error_code& ) { return true; } + bool on_array_begin( boost::system::error_code& ) { return true; } + bool on_array_end( std::size_t, boost::system::error_code& ) { return true; } + bool on_key_part( string_view, std::size_t, boost::system::error_code& ) { return true; } + bool on_key( string_view, std::size_t, boost::system::error_code& ) { return true; } + bool on_string_part( string_view, std::size_t, boost::system::error_code& ) { return true; } + bool on_string( string_view, std::size_t, boost::system::error_code& ) { return true; } + bool on_number_part( string_view, boost::system::error_code& ) { return true; } + bool on_int64( std::int64_t, string_view, boost::system::error_code& ) { return true; } + bool on_uint64( std::uint64_t, string_view, boost::system::error_code& ) { return true; } + bool on_double( double, string_view, boost::system::error_code& ) { return true; } + bool on_bool( bool, boost::system::error_code& ) { return true; } + bool on_null( boost::system::error_code& ) { return true; } + bool on_comment_part(string_view, boost::system::error_code&) { return true; } + bool on_comment(string_view, boost::system::error_code&) { return true; } }; basic_parser p_; @@ -62,7 +62,7 @@ public: write( char const* data, std::size_t size, - error_code& ec) + boost::system::error_code& ec) { auto const n = p_.write_some( false, data, size, ec ); if(! ec && n < size) @@ -76,7 +76,7 @@ validate( string_view s ) { // Parse with the null parser and return false on error null_parser p; - error_code ec; + boost::system::error_code ec; p.write( s.data(), s.size(), ec ); if( ec ) return false; diff --git a/fuzzing/fuzz_parse.cpp b/fuzzing/fuzz_parse.cpp index 185c1923..291f7b80 100644 --- a/fuzzing/fuzz_parse.cpp +++ b/fuzzing/fuzz_parse.cpp @@ -15,7 +15,7 @@ using namespace boost::json; bool fuzz_parse(string_view sv) { - error_code ec; + boost::system::error_code ec; value jv = parse( sv, ec ); if(ec) return false; diff --git a/fuzzing/fuzz_parser.cpp b/fuzzing/fuzz_parser.cpp index d6598dbd..48f522bf 100644 --- a/fuzzing/fuzz_parser.cpp +++ b/fuzzing/fuzz_parser.cpp @@ -24,7 +24,7 @@ struct FuzzHelper { std::size_t memlimit2; bool res; void run(stream_parser& p) { - error_code ec; + boost::system::error_code ec; // Write the first part of the buffer p.write( jsontext, ec); diff --git a/include/boost/json.hpp b/include/boost/json.hpp index cdd758ea..937f3913 100644 --- a/include/boost/json.hpp +++ b/include/boost/json.hpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -27,6 +28,7 @@ #include #include #include +#include #include #include #include diff --git a/include/boost/json/array.hpp b/include/boost/json/array.hpp index dede5df1..5ce4a4de 100644 --- a/include/boost/json/array.hpp +++ b/include/boost/json/array.hpp @@ -117,15 +117,15 @@ class array array(detail::unchecked_array&& ua); public: - /** The type of Allocator returned by @ref get_allocator + /** Associated [Allocator](https://en.cppreference.com/w/cpp/named_req/Allocator) - This type is a @ref polymorphic_allocator. - */ + This type is `boost::container::pmr::polymorphic_allocator`. + */ #ifdef BOOST_JSON_DOCS - // VFALCO doc toolchain renders this incorrectly using allocator_type = __see_below__; #else - using allocator_type = polymorphic_allocator; + // VFALCO doc toolchain renders this incorrectly + using allocator_type = container::pmr::polymorphic_allocator; #endif /// The type used to represent unsigned integers @@ -169,7 +169,7 @@ public: The destructor for each element is called if needed, any used memory is deallocated, and shared ownership - of the @ref memory_resource is released. + of the `boost::container::pmr::memory_resource` is released. @par Complexity Constant, or linear in @ref size(). @@ -211,7 +211,7 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource + @param sp A pointer to the `boost::container::pmr::memory_resource` to use. The container will acquire shared ownership of the memory resource. */ @@ -240,7 +240,7 @@ public: @param v The value to be inserted. - @param sp A pointer to the @ref memory_resource + @param sp A pointer to the `boost::container::pmr::memory_resource` to use. The container will acquire shared ownership of the memory resource. */ @@ -264,7 +264,7 @@ public: @param count The number of nulls to insert. - @param sp A pointer to the @ref memory_resource + @param sp A pointer to the `boost::container::pmr::memory_resource` to use. The container will acquire shared ownership of the memory resource. */ @@ -299,7 +299,7 @@ public: @param last An input iterator pointing to the end of the range. - @param sp A pointer to the @ref memory_resource + @param sp A pointer to the `boost::container::pmr::memory_resource` to use. The container will acquire shared ownership of the memory resource. @@ -350,7 +350,7 @@ public: @param other The array to copy - @param sp A pointer to the @ref memory_resource + @param sp A pointer to the `boost::container::pmr::memory_resource` to use. The container will acquire shared ownership of the memory resource. */ @@ -442,7 +442,7 @@ public: @param other The container to move - @param sp A pointer to the @ref memory_resource + @param sp A pointer to the `boost::container::pmr::memory_resource` to use. The container will acquire shared ownership of the memory resource. */ @@ -466,7 +466,7 @@ public: @param init The initializer list to insert - @param sp A pointer to the @ref memory_resource + @param sp A pointer to the `boost::container::pmr::memory_resource` to use. The container will acquire shared ownership of the memory resource. */ @@ -547,10 +547,10 @@ public: //------------------------------------------------------ - /** Return the associated @ref memory_resource + /** Return the associated memory resource. - This returns the @ref memory_resource used by - the container. + This function returns the `boost::container::pmr::memory_resource` used + by the container. @par Complexity Constant. @@ -564,11 +564,10 @@ public: return sp_; } - /** Return the associated @ref memory_resource + /** Return the associated allocator. - This function returns an instance of - @ref polymorphic_allocator constructed from the - associated @ref memory_resource. + This function returns an instance of @ref allocator_type constructed + from the associated `boost::container::pmr::memory_resource`. @par Complexity Constant. @@ -593,14 +592,14 @@ public: Returns a reference to the element specified at location `pos`, with bounds checking. If `pos` is not within the range of the container, an exception - of type @ref system_error is thrown. + of type `boost::system::system_error` is thrown. @par Complexity Constant. @param pos A zero-based index. - @throw system_error `pos >= size()` + @throw `boost::system::system_error` `pos >= size()`. */ /* @{ */ inline @@ -1070,7 +1069,7 @@ public: @param new_capacity The new capacity of the array. - @throw system_error `new_capacity > max_size()` + @throw `boost::system::system_error` `new_capacity > max_size()`. */ inline void @@ -1141,7 +1140,7 @@ public: be inserted. This may be the @ref end() iterator. @param v The value to insert. A copy will be made - using container's associated @ref memory_resource. + using container's associated `boost::container::pmr::memory_resource`. @return An iterator to the inserted value */ @@ -1173,7 +1172,8 @@ public: @param v The value to insert. Ownership of the value will be transferred via move construction, - using the container's associated @ref memory_resource. + using the container's + associated `boost::container::pmr::memory_resource`. @return An iterator to the inserted value */ @@ -1206,7 +1206,8 @@ public: @param count The number of copies to insert. @param v The value to insert. Copies will be made - using container's associated @ref memory_resource. + using the container's + associated `boost::container::pmr::memory_resource`. @return An iterator to the first inserted value, or `pos` if `count == 0`. @@ -1406,8 +1407,8 @@ public: Strong guarantee. Calls to `memory_resource::allocate` may throw. - @param v The value to insert. A copy will be made - using container's associated @ref memory_resource. + @param v The value to insert. A copy will be made using the container's + associated `boost::container::pmr::memory_resource`. */ BOOST_JSON_DECL void @@ -1429,9 +1430,9 @@ public: Strong guarantee. Calls to `memory_resource::allocate` may throw. - @param v The value to insert. Ownership of the - value will be transferred via move construction, - using the container's associated @ref memory_resource. + @param v The value to insert. Ownership of the value will be + transferred via move construction, using the container's + associated `boost::container::pmr::memory_resource`. */ BOOST_JSON_DECL void @@ -1543,8 +1544,8 @@ public: /** Swap the contents. Exchanges the contents of this array with another - array. Ownership of the respective @ref memory_resource - objects is not transferred. + array. Ownership of the respective + `boost::container::pmr::memory_resource` objects is not transferred. @li If `*other.storage() == *this->storage()`, ownership of the underlying memory is swapped in @@ -1572,9 +1573,9 @@ public: /** Exchange the given values. - Exchanges the contents of the array `lhs` with - another array `rhs`. Ownership of the respective - @ref memory_resource objects is not transferred. + Exchanges the contents of the array `lhs` with another array `rhs`. + Ownership of the respective `boost::container::pmr::memory_resource` + objects is not transferred. @li If `*lhs.storage() == *rhs.storage()`, ownership of the underlying memory is swapped in diff --git a/include/boost/json/basic_parser.hpp b/include/boost/json/basic_parser.hpp index 9c8576fd..023d491c 100644 --- a/include/boost/json/basic_parser.hpp +++ b/include/boost/json/basic_parser.hpp @@ -299,7 +299,7 @@ class basic_parser Handler h_; number num_; - error_code ec_; + system::error_code ec_; detail::stack st_; detail::utf8_sequence seq_; unsigned u1_; @@ -571,7 +571,7 @@ public: @par Exception Safety No-throw guarantee. */ - error_code + system::error_code last_error() const noexcept { return ec_; @@ -640,7 +640,7 @@ public: instead. */ void - fail(error_code ec) noexcept; + fail(system::error_code ec) noexcept; /** Parse some of an input string as JSON, incrementally. @@ -698,7 +698,7 @@ public: bool more, char const* data, std::size_t size, - error_code& ec); + system::error_code& ec); std::size_t write_some( diff --git a/include/boost/json/basic_parser_impl.hpp b/include/boost/json/basic_parser_impl.hpp index 09968e44..76080730 100644 --- a/include/boost/json/basic_parser_impl.hpp +++ b/include/boost/json/basic_parser_impl.hpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include #include #include @@ -2818,7 +2820,7 @@ reset() noexcept template void basic_parser:: -fail(error_code ec) noexcept +fail(system::error_code ec) noexcept { if(! ec) { @@ -2842,7 +2844,7 @@ write_some( bool more, char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { // see if we exited via exception // on the last call to write_some @@ -2929,7 +2931,7 @@ write_some( std::size_t size, std::error_code& ec) { - error_code jec; + system::error_code jec; std::size_t const result = write_some(more, data, size, jec); ec = jec; return result; diff --git a/include/boost/json/detail/default_resource.hpp b/include/boost/json/detail/default_resource.hpp index 1f189e44..81a7ef29 100644 --- a/include/boost/json/detail/default_resource.hpp +++ b/include/boost/json/detail/default_resource.hpp @@ -28,7 +28,7 @@ class BOOST_SYMBOL_VISIBLE BOOST_JSON_DECL default_resource final - : public memory_resource + : public container::pmr::memory_resource { union holder; @@ -43,7 +43,7 @@ default_resource final public: static - memory_resource* + container::pmr::memory_resource* get() noexcept { #ifdef BOOST_JSON_WEAK_CONSTINIT diff --git a/include/boost/json/detail/except.hpp b/include/boost/json/detail/except.hpp index cdaf3f38..ff8b0e32 100644 --- a/include/boost/json/detail/except.hpp +++ b/include/boost/json/detail/except.hpp @@ -24,7 +24,7 @@ BOOST_JSON_DECL void BOOST_NORETURN throw_system_error( - error_code const& ec, + system::error_code const& ec, source_location const& loc = BOOST_CURRENT_LOCATION); BOOST_JSON_DECL diff --git a/include/boost/json/detail/handler.hpp b/include/boost/json/detail/handler.hpp index 168eec29..47c8d4ee 100644 --- a/include/boost/json/detail/handler.hpp +++ b/include/boost/json/detail/handler.hpp @@ -41,24 +41,24 @@ struct handler explicit handler(Args&&... args); - inline bool on_document_begin(error_code& ec); - inline bool on_document_end(error_code& ec); - inline bool on_object_begin(error_code& ec); - inline bool on_object_end(std::size_t n, error_code& ec); - inline bool on_array_begin(error_code& ec); - inline bool on_array_end(std::size_t n, error_code& ec); - inline bool on_key_part(string_view s, std::size_t n, error_code& ec); - inline bool on_key(string_view s, std::size_t n, error_code& ec); - inline bool on_string_part(string_view s, std::size_t n, error_code& ec); - inline bool on_string(string_view s, std::size_t n, error_code& ec); - inline bool on_number_part(string_view, error_code&); - inline bool on_int64(std::int64_t i, string_view, error_code& ec); - inline bool on_uint64(std::uint64_t u, string_view, error_code& ec); - inline bool on_double(double d, string_view, error_code& ec); - inline bool on_bool(bool b, error_code& ec); - inline bool on_null(error_code& ec); - inline bool on_comment_part(string_view, error_code&); - inline bool on_comment(string_view, error_code&); + inline bool on_document_begin(system::error_code& ec); + inline bool on_document_end(system::error_code& ec); + inline bool on_object_begin(system::error_code& ec); + inline bool on_object_end(std::size_t n, system::error_code& ec); + inline bool on_array_begin(system::error_code& ec); + inline bool on_array_end(std::size_t n, system::error_code& ec); + inline bool on_key_part(string_view s, std::size_t n, system::error_code& ec); + inline bool on_key(string_view s, std::size_t n, system::error_code& ec); + inline bool on_string_part(string_view s, std::size_t n, system::error_code& ec); + inline bool on_string(string_view s, std::size_t n, system::error_code& ec); + inline bool on_number_part(string_view, system::error_code&); + inline bool on_int64(std::int64_t i, string_view, system::error_code& ec); + inline bool on_uint64(std::uint64_t u, string_view, system::error_code& ec); + inline bool on_double(double d, string_view, system::error_code& ec); + inline bool on_bool(bool b, system::error_code& ec); + inline bool on_null(system::error_code& ec); + inline bool on_comment_part(string_view, system::error_code&); + inline bool on_comment(string_view, system::error_code&); }; } // detail diff --git a/include/boost/json/detail/impl/except.ipp b/include/boost/json/detail/impl/except.ipp index 72f7a7f8..103892bc 100644 --- a/include/boost/json/detail/impl/except.ipp +++ b/include/boost/json/detail/impl/except.ipp @@ -22,11 +22,11 @@ namespace detail { void throw_system_error( - error_code const& ec, + system::error_code const& ec, source_location const& loc) { throw_exception( - system_error(ec), + system::system_error(ec), loc); } @@ -35,11 +35,11 @@ throw_system_error( error e, source_location const* loc) { - error_code ec; + system::error_code ec; ec.assign(e, loc); throw_exception( - system_error(ec), + system::system_error(ec), *loc); } diff --git a/include/boost/json/detail/impl/handler.ipp b/include/boost/json/detail/impl/handler.ipp index a377d642..51229a95 100644 --- a/include/boost/json/detail/impl/handler.ipp +++ b/include/boost/json/detail/impl/handler.ipp @@ -27,7 +27,7 @@ handler(Args&&... args) bool handler:: on_document_begin( - error_code&) + system::error_code&) { return true; } @@ -35,7 +35,7 @@ on_document_begin( bool handler:: on_document_end( - error_code&) + system::error_code&) { return true; } @@ -43,7 +43,7 @@ on_document_end( bool handler:: on_object_begin( - error_code&) + system::error_code&) { return true; } @@ -52,7 +52,7 @@ bool handler:: on_object_end( std::size_t n, - error_code&) + system::error_code&) { st.push_object(n); return true; @@ -61,7 +61,7 @@ on_object_end( bool handler:: on_array_begin( - error_code&) + system::error_code&) { return true; } @@ -70,7 +70,7 @@ bool handler:: on_array_end( std::size_t n, - error_code&) + system::error_code&) { st.push_array(n); return true; @@ -81,29 +81,29 @@ handler:: on_key_part( string_view s, std::size_t, - error_code&) + system::error_code&) { st.push_chars(s); return true; } - + bool handler:: on_key( string_view s, std::size_t, - error_code&) + system::error_code&) { st.push_key(s); return true; } - + bool handler:: on_string_part( string_view s, - std::size_t, - error_code&) + std::size_t, + system::error_code&) { st.push_chars(s); return true; @@ -113,8 +113,8 @@ bool handler:: on_string( string_view s, - std::size_t, - error_code&) + std::size_t, + system::error_code&) { st.push_string(s); return true; @@ -124,7 +124,7 @@ bool handler:: on_number_part( string_view, - error_code&) + system::error_code&) { return true; } @@ -134,18 +134,18 @@ handler:: on_int64( std::int64_t i, string_view, - error_code&) + system::error_code&) { st.push_int64(i); return true; } - + bool handler:: on_uint64( std::uint64_t u, string_view, - error_code&) + system::error_code&) { st.push_uint64(u); return true; @@ -156,17 +156,17 @@ handler:: on_double( double d, string_view, - error_code&) + system::error_code&) { st.push_double(d); return true; } - + bool handler:: on_bool( bool b, - error_code&) + system::error_code&) { st.push_bool(b); return true; @@ -174,7 +174,7 @@ on_bool( bool handler:: -on_null(error_code&) +on_null(system::error_code&) { st.push_null(); return true; @@ -184,15 +184,15 @@ bool handler:: on_comment_part( string_view, - error_code&) + system::error_code&) { return true; } - + bool handler:: on_comment( - string_view, error_code&) + string_view, system::error_code&) { return true; } diff --git a/include/boost/json/detail/parse_into.hpp b/include/boost/json/detail/parse_into.hpp index 4c537e46..de68ab84 100644 --- a/include/boost/json/detail/parse_into.hpp +++ b/include/boost/json/detail/parse_into.hpp @@ -92,23 +92,23 @@ public: public: - bool on_object_begin( error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_array_begin( error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_array_end( error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_string_part( error_code& ec, string_view ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_string( error_code& ec, string_view ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_number_part( error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_int64( error_code& ec, std::int64_t ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_uint64( error_code& ec, std::uint64_t ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_double( error_code& ec, double ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_bool( error_code& ec, bool ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_null( error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_object_begin( system::error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_array_begin( system::error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_array_end( system::error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_string_part( system::error_code& ec, string_view ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_string( system::error_code& ec, string_view ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_number_part( system::error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_int64( system::error_code& ec, std::int64_t ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_uint64( system::error_code& ec, std::uint64_t ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_double( system::error_code& ec, double ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_bool( system::error_code& ec, bool ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_null( system::error_code& ec ) { BOOST_JSON_FAIL( ec, E ); return false; } // LCOV_EXCL_START // parses that can't handle this would fail at on_object_begin - bool on_object_end( error_code& ) { BOOST_ASSERT( false ); return false; } - bool on_key_part( error_code& ec, string_view ) { BOOST_JSON_FAIL( ec, E ); return false; } - bool on_key( error_code& ec, string_view ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_object_end( system::error_code& ) { BOOST_ASSERT( false ); return false; } + bool on_key_part( system::error_code& ec, string_view ) { BOOST_JSON_FAIL( ec, E ); return false; } + bool on_key( system::error_code& ec, string_view ) { BOOST_JSON_FAIL( ec, E ); return false; } // LCOV_EXCL_START }; @@ -126,7 +126,7 @@ public: scalar_handler(P* p): parent_( p ) {} - bool on_array_end( error_code& ec ) + bool on_array_end( system::error_code& ec ) { return parent_->signal_end(ec); } @@ -158,7 +158,7 @@ public: # pragma GCC diagnostic pop #endif - bool signal_end(error_code&) + bool signal_end(system::error_code&) { inner_active_ = false; parent_->signal_value(); @@ -173,72 +173,72 @@ public: else \ return inner_.f - bool on_object_begin( error_code& ec ) + bool on_object_begin( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_object_begin(ec) ); } - bool on_object_end( error_code& ec ) + bool on_object_end( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_object_end(ec) ); } - bool on_array_begin( error_code& ec ) + bool on_array_begin( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_array_begin(ec) ); } - bool on_array_end( error_code& ec ) + bool on_array_end( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_array_end(ec) ); } - bool on_key_part( error_code& ec, string_view sv ) + bool on_key_part( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_key_part(ec, sv) ); } - bool on_key( error_code& ec, string_view sv ) + bool on_key( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_key(ec, sv) ); } - bool on_string_part( error_code& ec, string_view sv ) + bool on_string_part( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_string_part(ec, sv) ); } - bool on_string( error_code& ec, string_view sv ) + bool on_string( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_string(ec, sv) ); } - bool on_number_part( error_code& ec ) + bool on_number_part( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_number_part(ec) ); } - bool on_int64( error_code& ec, std::int64_t v ) + bool on_int64( system::error_code& ec, std::int64_t v ) { BOOST_JSON_INVOKE_INNER( on_int64(ec, v) ); } - bool on_uint64( error_code& ec, std::uint64_t v ) + bool on_uint64( system::error_code& ec, std::uint64_t v ) { BOOST_JSON_INVOKE_INNER( on_uint64(ec, v) ); } - bool on_double( error_code& ec, double v ) + bool on_double( system::error_code& ec, double v ) { BOOST_JSON_INVOKE_INNER( on_double(ec, v) ); } - bool on_bool( error_code& ec, bool v ) + bool on_bool( system::error_code& ec, bool v ) { BOOST_JSON_INVOKE_INNER( on_bool(ec, v) ); } - bool on_null( error_code& ec ) + bool on_null( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_null(ec) ); } @@ -280,12 +280,12 @@ public: , value_(v) {} - bool on_number_part( error_code& ) + bool on_number_part( system::error_code& ) { return true; } - bool on_int64( error_code& ec, std::int64_t v ) + bool on_int64( system::error_code& ec, std::int64_t v ) { if( !integral_in_range( v ) ) { @@ -299,7 +299,7 @@ public: return true; } - bool on_uint64( error_code& ec, std::uint64_t v ) + bool on_uint64( system::error_code& ec, std::uint64_t v ) { if( !integral_in_range( v ) ) { @@ -328,12 +328,12 @@ public: , value_(v) {} - bool on_number_part( error_code& ) + bool on_number_part( system::error_code& ) { return true; } - bool on_int64( error_code&, std::int64_t v ) + bool on_int64( system::error_code&, std::int64_t v ) { *value_ = static_cast( v ); @@ -341,7 +341,7 @@ public: return true; } - bool on_uint64( error_code&, std::uint64_t v ) + bool on_uint64( system::error_code&, std::uint64_t v ) { *value_ = static_cast( v ); @@ -349,7 +349,7 @@ public: return true; } - bool on_double( error_code&, double v ) + bool on_double( system::error_code&, double v ) { *value_ = static_cast( v ); @@ -373,7 +373,7 @@ public: , value_(v) {} - bool on_string_part( error_code&, string_view sv ) + bool on_string_part( system::error_code&, string_view sv ) { if( !cleared_ ) { @@ -385,7 +385,7 @@ public: return true; } - bool on_string( error_code&, string_view sv ) + bool on_string( system::error_code&, string_view sv ) { if( !cleared_ ) value_->clear(); @@ -413,7 +413,7 @@ public: , value_(v) {} - bool on_bool( error_code&, bool v ) + bool on_bool( system::error_code&, bool v ) { *value_ = v; @@ -436,7 +436,7 @@ public: , value_(v) {} - bool on_null( error_code& ) + bool on_null( system::error_code& ) { *value_ = {}; @@ -467,13 +467,13 @@ public: , value_(v) {} - bool on_string_part( error_code&, string_view sv ) + bool on_string_part( system::error_code&, string_view sv ) { name_.append( sv.begin(), sv.end() ); return true; } - bool on_string( error_code& ec, string_view sv ) + bool on_string( system::error_code& ec, string_view sv ) { string_view name = sv; if( !name_.empty() ) @@ -575,7 +575,7 @@ public: #endif } - bool signal_end(error_code& ec) + bool signal_end(system::error_code& ec) { if( !check_inserter( inserter, value_->end() ) ) { @@ -588,7 +588,7 @@ public: return converting_handler::composite_handler::signal_end(ec); } - bool on_array_begin( error_code& ec ) + bool on_array_begin( system::error_code& ec ) { if( this->inner_active_ ) return this->inner_.on_array_begin( ec ); @@ -598,7 +598,7 @@ public: return true; } - bool on_array_end( error_code& ec ) + bool on_array_end( system::error_code& ec ) { if( this->inner_active_ ) return this->inner_.on_array_end( ec ); @@ -635,7 +635,7 @@ public: this->inner_active_ = false; } - bool on_object_begin( error_code& ec ) + bool on_object_begin( system::error_code& ec ) { if( this->inner_active_ ) return this->inner_.on_object_begin(ec); @@ -644,7 +644,7 @@ public: return true; } - bool on_object_end( error_code& ec ) + bool on_object_end( system::error_code& ec ) { if( this->inner_active_ ) return this->inner_.on_object_end(ec); @@ -653,7 +653,7 @@ public: return true; } - bool on_array_end( error_code& ec ) + bool on_array_end( system::error_code& ec ) { if( this->inner_active_ ) return this->inner_.on_array_end(ec); @@ -661,7 +661,7 @@ public: return this->parent_->signal_end(ec); } - bool on_key_part( error_code& ec, string_view sv ) + bool on_key_part( system::error_code& ec, string_view sv ) { if( this->inner_active_ ) return this->inner_.on_key_part(ec, sv); @@ -670,7 +670,7 @@ public: return true; } - bool on_key( error_code& ec, string_view sv ) + bool on_key( system::error_code& ec, string_view sv ) { if( this->inner_active_ ) return this->inner_.on_key(ec, sv); @@ -820,7 +820,7 @@ public: ++inner_active_; } - bool signal_end(error_code& ec) + bool signal_end(system::error_code& ec) { constexpr int N = std::tuple_size::value; if( inner_active_ < N ) @@ -845,7 +845,7 @@ public: }; \ \ template< class... Args > \ - bool fn( error_code& ec, Args&& ... args ) \ + bool fn( system::error_code& ec, Args&& ... args ) \ { \ if( inner_active_ < 0 ) \ { \ @@ -858,7 +858,7 @@ public: BOOST_JSON_FAIL( ec, error::size_mismatch ); \ return false; \ } \ - using F = handler_op_invoker< do_ ## fn, error_code, Args...>; \ + using F = handler_op_invoker< do_ ## fn, system::error_code, Args...>; \ using H = decltype(handlers_); \ return mp11::mp_with_index( \ inner_active_, \ @@ -873,7 +873,7 @@ public: struct do_on_array_begin { handler_tuple< converting_handler, tuple_element_list >& handlers; - error_code& ec; + system::error_code& ec; template< class I > bool operator()( I ) const @@ -881,7 +881,7 @@ public: return get(handlers).on_array_begin(ec); } }; - bool on_array_begin( error_code& ec ) + bool on_array_begin( system::error_code& ec ) { if( inner_active_ < 0 ) { @@ -904,7 +904,7 @@ public: struct do_on_array_end { handler_tuple< converting_handler, tuple_element_list >& handlers; - error_code& ec; + system::error_code& ec; template< class I > bool operator()( I ) const @@ -912,7 +912,7 @@ public: return get(handlers).on_array_end(ec); } }; - bool on_array_end( error_code& ec ) + bool on_array_end( system::error_code& ec ) { if( inner_active_ < 0 ) return parent_->signal_end(ec); @@ -1045,7 +1045,7 @@ public: inner_active_ = -1; } - bool signal_end(error_code&) + bool signal_end(system::error_code&) { key_ = {}; inner_active_ = -1; @@ -1066,7 +1066,7 @@ public: inner_active_, \ tuple_handler_op_invoker{handlers_, f} ); - bool on_object_begin( error_code& ec ) + bool on_object_begin( system::error_code& ec ) { if( inner_active_ < 0 ) return true; @@ -1074,7 +1074,7 @@ public: BOOST_JSON_INVOKE_INNER( on_object_begin(ec) ); } - bool on_object_end( error_code& ec ) + bool on_object_end( system::error_code& ec ) { if( inner_active_ < 0 ) { @@ -1094,12 +1094,12 @@ public: BOOST_JSON_INVOKE_INNER( on_object_end(ec) ); } - bool on_array_begin( error_code& ec ) + bool on_array_begin( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_array_begin(ec) ); } - bool on_array_end( error_code& ec ) + bool on_array_end( system::error_code& ec ) { if( inner_active_ < 0 ) return parent_->signal_end(ec); @@ -1107,7 +1107,7 @@ public: BOOST_JSON_INVOKE_INNER( on_array_end(ec) ); } - bool on_key_part( error_code& ec, string_view sv ) + bool on_key_part( system::error_code& ec, string_view sv ) { if( inner_active_ < 0 ) { @@ -1118,7 +1118,7 @@ public: BOOST_JSON_INVOKE_INNER( on_key_part(ec, sv) ); } - bool on_key( error_code& ec, string_view sv ) + bool on_key( system::error_code& ec, string_view sv ) { if( inner_active_ >= 0 ) { @@ -1153,42 +1153,42 @@ public: return true; } - bool on_string_part( error_code& ec, string_view sv ) + bool on_string_part( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_string_part(ec, sv) ); } - bool on_string( error_code& ec, string_view sv ) + bool on_string( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_string(ec, sv) ); } - bool on_number_part( error_code& ec ) + bool on_number_part( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_number_part(ec) ); } - bool on_int64( error_code& ec, std::int64_t v ) + bool on_int64( system::error_code& ec, std::int64_t v ) { BOOST_JSON_INVOKE_INNER( on_int64(ec, v) ); } - bool on_uint64( error_code& ec, std::uint64_t v ) + bool on_uint64( system::error_code& ec, std::uint64_t v ) { BOOST_JSON_INVOKE_INNER( on_uint64(ec, v) ); } - bool on_double( error_code& ec, double v ) + bool on_double( system::error_code& ec, double v ) { BOOST_JSON_INVOKE_INNER( on_double(ec, v) ); } - bool on_bool( error_code& ec, bool v ) + bool on_bool( system::error_code& ec, bool v ) { BOOST_JSON_INVOKE_INNER( on_bool(ec, v) ); } - bool on_null( error_code& ec ) + bool on_null( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_null(ec) ); } @@ -1261,7 +1261,7 @@ template< class H > struct event_visitor { H& handler; - error_code& ec; + system::error_code& ec; bool operator()(object_begin_handler_event&) const @@ -1369,7 +1369,7 @@ public: parent_->signal_value(); } - bool signal_end(error_code& ec) + bool signal_end(system::error_code& ec) { return parent_->signal_end(ec); } @@ -1400,7 +1400,7 @@ public: struct event_processor { converting_handler* self; - error_code& ec; + system::error_code& ec; parse_event& event; template< class I > @@ -1412,7 +1412,7 @@ public: event_visitor{handler, ec}, event ); } }; - bool process_events(error_code& ec) + bool process_events(system::error_code& ec) { constexpr std::size_t N = variant_size::value; @@ -1453,22 +1453,22 @@ public: events_.emplace_back( ev ); \ return process_events(ec); - bool on_object_begin( error_code& ec ) + bool on_object_begin( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( object_begin_handler_event{}, ec ); } - bool on_object_end( error_code& ec ) + bool on_object_end( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( object_end_handler_event{}, ec ); } - bool on_array_begin( error_code& ec ) + bool on_array_begin( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( array_begin_handler_event{}, ec ); } - bool on_array_end( error_code& ec ) + bool on_array_end( system::error_code& ec ) { if( !inner_active_ ) return signal_end(ec); @@ -1476,57 +1476,57 @@ public: BOOST_JSON_INVOKE_INNER( array_end_handler_event{}, ec ); } - bool on_key_part( error_code&, string_view sv ) + bool on_key_part( system::error_code&, string_view sv ) { string_.append(sv); return true; } - bool on_key( error_code& ec, string_view sv ) + bool on_key( system::error_code& ec, string_view sv ) { string_.append(sv); BOOST_JSON_INVOKE_INNER( key_handler_event{ std::move(string_) }, ec ); } - bool on_string_part( error_code&, string_view sv ) + bool on_string_part( system::error_code&, string_view sv ) { string_.append(sv); return true; } - bool on_string( error_code& ec, string_view sv ) + bool on_string( system::error_code& ec, string_view sv ) { string_.append(sv); BOOST_JSON_INVOKE_INNER( string_handler_event{ std::move(string_) }, ec ); } - bool on_number_part( error_code& ) + bool on_number_part( system::error_code& ) { return true; } - bool on_int64( error_code& ec, std::int64_t v ) + bool on_int64( system::error_code& ec, std::int64_t v ) { BOOST_JSON_INVOKE_INNER( int64_handler_event{v}, ec ); } - bool on_uint64( error_code& ec, std::uint64_t v ) + bool on_uint64( system::error_code& ec, std::uint64_t v ) { BOOST_JSON_INVOKE_INNER( uint64_handler_event{v}, ec ); } - bool on_double( error_code& ec, double v ) + bool on_double( system::error_code& ec, double v ) { BOOST_JSON_INVOKE_INNER( double_handler_event{v}, ec ); } - bool on_bool( error_code& ec, bool v ) + bool on_bool( system::error_code& ec, bool v ) { BOOST_JSON_INVOKE_INNER( bool_handler_event{v}, ec ); } - bool on_null( error_code& ec ) + bool on_null( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( null_handler_event{}, ec ); } @@ -1565,7 +1565,7 @@ public: parent_->signal_value(); } - bool signal_end(error_code& ec) + bool signal_end(system::error_code& ec) { return parent_->signal_end(ec); } @@ -1575,22 +1575,22 @@ public: inner_active_ = true; \ return inner_.fn; - bool on_object_begin( error_code& ec ) + bool on_object_begin( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_object_begin(ec) ); } - bool on_object_end( error_code& ec ) + bool on_object_end( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_object_end(ec) ); } - bool on_array_begin( error_code& ec ) + bool on_array_begin( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_array_begin(ec) ); } - bool on_array_end( error_code& ec ) + bool on_array_end( system::error_code& ec ) { if( !inner_active_ ) return signal_end(ec); @@ -1598,52 +1598,52 @@ public: BOOST_JSON_INVOKE_INNER( on_array_end(ec) ); } - bool on_key_part( error_code& ec, string_view sv ) + bool on_key_part( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_key_part(ec, sv) ); } - bool on_key( error_code& ec, string_view sv ) + bool on_key( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_key(ec, sv) ); } - bool on_string_part( error_code& ec, string_view sv ) + bool on_string_part( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_string_part(ec, sv) ); } - bool on_string( error_code& ec, string_view sv ) + bool on_string( system::error_code& ec, string_view sv ) { BOOST_JSON_INVOKE_INNER( on_string(ec, sv) ); } - bool on_number_part( error_code& ec ) + bool on_number_part( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_number_part(ec) ); } - bool on_int64( error_code& ec, std::int64_t v ) + bool on_int64( system::error_code& ec, std::int64_t v ) { BOOST_JSON_INVOKE_INNER( on_int64(ec, v) ); } - bool on_uint64( error_code& ec, std::uint64_t v ) + bool on_uint64( system::error_code& ec, std::uint64_t v ) { BOOST_JSON_INVOKE_INNER( on_uint64(ec, v) ); } - bool on_double( error_code& ec, double v ) + bool on_double( system::error_code& ec, double v ) { BOOST_JSON_INVOKE_INNER( on_double(ec, v) ); } - bool on_bool( error_code& ec, bool v ) + bool on_bool( system::error_code& ec, bool v ) { BOOST_JSON_INVOKE_INNER( on_bool(ec, v) ); } - bool on_null( error_code& ec ) + bool on_null( system::error_code& ec ) { if( !inner_active_ ) { @@ -1676,7 +1676,7 @@ public: , value_(v) {} - bool on_string_part( error_code&, string_view sv ) + bool on_string_part( system::error_code&, string_view sv ) { if( !cleared_ ) { @@ -1688,7 +1688,7 @@ public: return true; } - bool on_string( error_code&, string_view sv ) + bool on_string( system::error_code&, string_view sv ) { if( !cleared_ ) value_->clear(); @@ -1735,17 +1735,17 @@ public: { } - bool signal_end(error_code&) + bool signal_end(system::error_code&) { return true; } - bool on_document_begin( error_code& ) + bool on_document_begin( system::error_code& ) { return true; } - bool on_document_end( error_code& ) + bool on_document_end( system::error_code& ) { inner_active_ = false; return true; @@ -1760,82 +1760,82 @@ public: else \ return inner_.f - bool on_object_begin( error_code& ec ) + bool on_object_begin( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_object_begin(ec) ); } - bool on_object_end( std::size_t, error_code& ec ) + bool on_object_end( std::size_t, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_object_end(ec) ); } - bool on_array_begin( error_code& ec ) + bool on_array_begin( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_array_begin(ec) ); } - bool on_array_end( std::size_t, error_code& ec ) + bool on_array_end( std::size_t, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_array_end(ec) ); } - bool on_key_part( string_view sv, std::size_t, error_code& ec ) + bool on_key_part( string_view sv, std::size_t, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_key_part(ec, sv) ); } - bool on_key( string_view sv, std::size_t, error_code& ec ) + bool on_key( string_view sv, std::size_t, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_key(ec, sv) ); } - bool on_string_part( string_view sv, std::size_t, error_code& ec ) + bool on_string_part( string_view sv, std::size_t, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_string_part(ec, sv) ); } - bool on_string( string_view sv, std::size_t, error_code& ec ) + bool on_string( string_view sv, std::size_t, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_string(ec, sv) ); } - bool on_number_part( string_view, error_code& ec ) + bool on_number_part( string_view, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_number_part(ec) ); } - bool on_int64( std::int64_t v, string_view, error_code& ec ) + bool on_int64( std::int64_t v, string_view, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_int64(ec, v) ); } - bool on_uint64( std::uint64_t v, string_view, error_code& ec ) + bool on_uint64( std::uint64_t v, string_view, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_uint64(ec, v) ); } - bool on_double( double v, string_view, error_code& ec ) + bool on_double( double v, string_view, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_double(ec, v) ); } - bool on_bool( bool v, error_code& ec ) + bool on_bool( bool v, system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_bool(ec, v) ); } - bool on_null( error_code& ec ) + bool on_null( system::error_code& ec ) { BOOST_JSON_INVOKE_INNER( on_null(ec) ); } - bool on_comment_part(string_view, error_code&) + bool on_comment_part(string_view, system::error_code&) { return true; } - bool on_comment(string_view, error_code&) + bool on_comment(string_view, system::error_code&) { return true; } diff --git a/include/boost/json/detail/shared_resource.hpp b/include/boost/json/detail/shared_resource.hpp index 31826f9b..f72a58c9 100644 --- a/include/boost/json/detail/shared_resource.hpp +++ b/include/boost/json/detail/shared_resource.hpp @@ -10,6 +10,7 @@ #ifndef BOOST_JSON_DETAIL_SHARED_RESOURCE_HPP #define BOOST_JSON_DETAIL_SHARED_RESOURCE_HPP +#include #include #include #include @@ -25,7 +26,7 @@ namespace detail { struct BOOST_SYMBOL_VISIBLE shared_resource - : memory_resource + : container::pmr::memory_resource { BOOST_JSON_DECL shared_resource(); diff --git a/include/boost/json/detail/value.hpp b/include/boost/json/detail/value.hpp index cc300185..f84fcb5a 100644 --- a/include/boost/json/detail/value.hpp +++ b/include/boost/json/detail/value.hpp @@ -10,6 +10,7 @@ #ifndef BOOST_JSON_DETAIL_VALUE_HPP #define BOOST_JSON_DETAIL_VALUE_HPP +#include #include #include #include diff --git a/include/boost/json/detail/value_to.hpp b/include/boost/json/detail/value_to.hpp index 3d6ffe60..11d9e029 100644 --- a/include/boost/json/detail/value_to.hpp +++ b/include/boost/json/detail/value_to.hpp @@ -14,6 +14,7 @@ #include #include +#include #include #ifndef BOOST_NO_CXX17_HDR_OPTIONAL @@ -72,7 +73,7 @@ try_reserve( // identity conversion template< class Ctx > -result +system::result value_to_impl( value_conversion_tag, try_value_to_tag, @@ -92,7 +93,7 @@ value_to_impl( // object template< class Ctx > -result +system::result value_to_impl( object_conversion_tag, try_value_to_tag, @@ -102,14 +103,14 @@ value_to_impl( object const* obj = jv.if_object(); if( obj ) return *obj; - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_object); return ec; } // array template< class Ctx > -result +system::result value_to_impl( array_conversion_tag, try_value_to_tag, @@ -119,14 +120,14 @@ value_to_impl( array const* arr = jv.if_array(); if( arr ) return *arr; - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_array); return ec; } // string template< class Ctx > -result +system::result value_to_impl( string_conversion_tag, try_value_to_tag, @@ -136,32 +137,32 @@ value_to_impl( string const* str = jv.if_string(); if( str ) return *str; - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_string); return ec; } // bool template< class Ctx > -result +system::result value_to_impl( bool_conversion_tag, try_value_to_tag, value const& jv, Ctx const& ) { auto b = jv.if_bool(); if( b ) return *b; - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_bool); return {boost::system::in_place_error, ec}; } // integral and floating point template< class T, class Ctx > -result +system::result value_to_impl( number_conversion_tag, try_value_to_tag, value const& jv, Ctx const& ) { - error_code ec; + system::error_code ec; auto const n = jv.to_number(ec); if( ec.failed() ) return {boost::system::in_place_error, ec}; @@ -170,7 +171,7 @@ value_to_impl( // null-like conversion template< class T, class Ctx > -result +system::result value_to_impl( null_like_conversion_tag, try_value_to_tag, @@ -179,14 +180,14 @@ value_to_impl( { if( jv.is_null() ) return {boost::system::in_place_value, T{}}; - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_null); return {boost::system::in_place_error, ec}; } // string-like types template< class T, class Ctx > -result +system::result value_to_impl( string_like_conversion_tag, try_value_to_tag, @@ -196,14 +197,14 @@ value_to_impl( auto str = jv.if_string(); if( str ) return {boost::system::in_place_value, T(str->subview())}; - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_string); return {boost::system::in_place_error, ec}; } // map-like containers template< class T, class Ctx > -result +system::result value_to_impl( map_like_conversion_tag, try_value_to_tag, @@ -213,7 +214,7 @@ value_to_impl( object const* obj = jv.if_object(); if( !obj ) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_object); return {boost::system::in_place_error, ec}; } @@ -223,7 +224,7 @@ value_to_impl( res, obj->size(), reserve_implementation()); if( e != error() ) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL( ec, e ); return {boost::system::in_place_error, ec}; } @@ -243,7 +244,7 @@ value_to_impl( // all other containers template< class T, class Ctx > -result +system::result value_to_impl( sequence_conversion_tag, try_value_to_tag, @@ -253,7 +254,7 @@ value_to_impl( array const* arr = jv.if_array(); if( !arr ) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_array); return {boost::system::in_place_error, ec}; } @@ -263,7 +264,7 @@ value_to_impl( result, arr->size(), reserve_implementation()); if( e != error() ) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL( ec, e ); return {boost::system::in_place_error, ec}; } @@ -281,8 +282,8 @@ value_to_impl( // tuple-like types template< class T, class Ctx > -result -try_make_tuple_elem(value const& jv, Ctx const& ctx, error_code& ec) +system::result +try_make_tuple_elem(value const& jv, Ctx const& ctx, system::error_code& ec) { if( ec.failed() ) return {boost::system::in_place_error, ec}; @@ -293,11 +294,11 @@ try_make_tuple_elem(value const& jv, Ctx const& ctx, error_code& ec) } template -result +system::result try_make_tuple_like( array const& arr, Ctx const& ctx, boost::mp11::index_sequence) { - error_code ec; + system::error_code ec; auto items = std::make_tuple( try_make_tuple_elem< typename std::decay>::type >( @@ -311,14 +312,14 @@ try_make_tuple_like( } template< class T, class Ctx > -result +system::result value_to_impl( tuple_conversion_tag, try_value_to_tag, value const& jv, Ctx const& ctx ) { - error_code ec; + system::error_code ec; array const* arr = jv.if_array(); if( !arr ) @@ -344,7 +345,8 @@ struct to_described_member using Ds = describe::describe_members< T, describe::mod_public | describe::mod_inherited>; - using result_type = mp11::mp_eval_if_c< !non_throwing, T, result, T >; + using result_type = mp11::mp_eval_if_c< + !non_throwing, T, system::result, T>; result_type& res; object const& obj; @@ -366,7 +368,7 @@ struct to_described_member { BOOST_IF_CONSTEXPR( !is_optional_like::value ) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::unknown_name); res = {boost::system::in_place_error, ec}; } @@ -394,7 +396,7 @@ struct to_described_member // described classes template< class T, class Ctx > -result +system::result value_to_impl( described_class_conversion_tag, try_value_to_tag, @@ -402,12 +404,12 @@ value_to_impl( Ctx const& ctx ) { BOOST_STATIC_ASSERT( std::is_default_constructible::value ); - result res; + system::result res; auto* obj = jv.if_object(); if( !obj ) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_object); res = {boost::system::in_place_error, ec}; return res; @@ -424,7 +426,7 @@ value_to_impl( if( member_converter.count != obj->size() ) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::size_mismatch); res = {boost::system::in_place_error, ec}; return res; @@ -435,7 +437,7 @@ value_to_impl( // described enums template< class T, class Ctx > -result +system::result value_to_impl( described_enum_conversion_tag, try_value_to_tag, @@ -445,7 +447,7 @@ value_to_impl( T val = {}; (void)jv; #ifdef BOOST_DESCRIBE_CXX14 - error_code ec; + system::error_code ec; auto str = jv.if_string(); if( !str ) @@ -466,7 +468,7 @@ value_to_impl( // optionals template< class T, class Ctx > -result +system::result value_to_impl( optional_conversion_tag, try_value_to_tag, @@ -520,7 +522,7 @@ initialize_variant( V&& v, mp11::mp_int<1> ) template< class T, class Ctx > struct alternative_converter { - result& res; + system::result& res; value const& jv; Ctx const& ctx; @@ -541,32 +543,32 @@ struct alternative_converter }; template< class T, class Ctx > -result +system::result value_to_impl( variant_conversion_tag, try_value_to_tag, value const& jv, Ctx const& ctx) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::exhausted_variants); using Is = mp11::mp_iota< mp11::mp_size >; - result res = {system::in_place_error, ec}; + system::result res = {system::in_place_error, ec}; mp11::mp_for_each( alternative_converter{res, jv, ctx} ); return res; } template< class T, class Ctx > -result +system::result value_to_impl( path_conversion_tag, try_value_to_tag, value const& jv, Ctx const& ) { auto str = jv.if_string(); if( !str ) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_string); return {boost::system::in_place_error, ec}; } @@ -701,7 +703,8 @@ value_to_impl( // User-provided conversions; nonthrowing -> nonthrowing template< class T, class Ctx > mp11::mp_if< - mp11::mp_valid, result > + mp11::mp_valid< + has_nonthrowing_user_conversion_to_impl, T>, system::result > value_to_impl( user_conversion_tag, try_value_to_tag, value const& jv, Ctx const& ) { @@ -716,7 +719,7 @@ template< mp11::mp_if< mp11::mp_valid< has_nonthrowing_context_conversion_to_impl, typename Sup::type, T>, - result > + system::result > value_to_impl( context_conversion_tag, try_value_to_tag tag, @@ -736,7 +739,7 @@ mp11::mp_if< has_nonthrowing_full_context_conversion_to_impl, typename Sup::type, T>, - result > + system::result > value_to_impl( full_context_conversion_tag, try_value_to_tag tag, @@ -759,7 +762,7 @@ struct does_allow_exceptions< std::tuple > { }; template< class T, class... Args > -result +system::result wrap_conversion_exceptions( std::true_type, value_to_tag, Args&& ... args ) { return { @@ -768,7 +771,7 @@ wrap_conversion_exceptions( std::true_type, value_to_tag, Args&& ... args ) } template< class T, class... Args > -result +system::result wrap_conversion_exceptions( std::false_type, value_to_tag, Args&& ... args ) { #ifndef BOOST_NO_EXCEPTIONS @@ -785,13 +788,13 @@ wrap_conversion_exceptions( std::false_type, value_to_tag, Args&& ... args ) { throw; } - catch( system_error const& e) + catch( system::system_error const& e) { return {boost::system::in_place_error, e.code()}; } catch( ... ) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::exception); return {boost::system::in_place_error, ec}; } @@ -801,7 +804,7 @@ wrap_conversion_exceptions( std::false_type, value_to_tag, Args&& ... args ) template< class T, class Ctx > mp11::mp_if_c< !mp11::mp_valid::value, - result > + system::result > value_to_impl( user_conversion_tag, try_value_to_tag, value const& jv, Ctx const& ) { @@ -819,7 +822,7 @@ mp11::mp_if_c< has_nonthrowing_context_conversion_to_impl, typename Sup::type, T>::value, - result > + system::result > value_to_impl( context_conversion_tag, try_value_to_tag, @@ -840,7 +843,7 @@ mp11::mp_if_c< has_nonthrowing_full_context_conversion_to_impl, typename Sup::type, T>::value, - result > + system::result > value_to_impl( full_context_conversion_tag, try_value_to_tag, @@ -882,14 +885,14 @@ using value_to_category = conversion_category< #ifndef BOOST_NO_CXX17_HDR_OPTIONAL inline -result +system::result tag_invoke( try_value_to_tag, value const& jv) { if( jv.is_null() ) return std::nullopt; - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::not_null); return ec; } diff --git a/include/boost/json/impl/conversion.hpp b/include/boost/json/impl/conversion.hpp index 77c7e4f4..4c3cff10 100644 --- a/include/boost/json/impl/conversion.hpp +++ b/include/boost/json/impl/conversion.hpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -484,7 +485,7 @@ using has_valueless_by_exception = template struct result_for { - using type = result< detail::remove_cvref >; + using type = system::result< detail::remove_cvref >; }; template diff --git a/include/boost/json/impl/error.hpp b/include/boost/json/impl/error.hpp index 58f6071f..d367a259 100644 --- a/include/boost/json/impl/error.hpp +++ b/include/boost/json/impl/error.hpp @@ -10,6 +10,7 @@ #ifndef BOOST_JSON_IMPL_ERROR_HPP #define BOOST_JSON_IMPL_ERROR_HPP +#include #include namespace boost { @@ -45,11 +46,11 @@ namespace json { namespace detail { struct error_code_category_t - : error_category + : system::error_category { constexpr error_code_category_t() - : error_category(0xB9A9B9922177C772) + : system::error_category(0xB9A9B9922177C772) {} BOOST_JSON_DECL @@ -65,7 +66,7 @@ struct error_code_category_t message( int ev ) const override; BOOST_JSON_DECL - error_condition + system::error_condition default_error_condition( int ev ) const noexcept override; }; @@ -74,11 +75,11 @@ BOOST_JSON_DECL error_code_category_t error_code_category; struct error_condition_category_t - : error_category + : system::error_category { constexpr error_condition_category_t() - : error_category(0x37CEF5A036D24FD1) + : system::error_category(0x37CEF5A036D24FD1) {} BOOST_JSON_DECL @@ -102,21 +103,21 @@ error_condition_category_t error_condition_category; inline BOOST_SYSTEM_CONSTEXPR -error_code +system::error_code make_error_code(error e) noexcept { - return error_code( + return system::error_code( static_cast::type>(e), detail::error_code_category ); } inline BOOST_SYSTEM_CONSTEXPR -error_condition +system::error_condition make_error_condition(condition c) noexcept { - return error_condition( + return system::error_condition( static_cast::type>(c), detail::error_condition_category ); } diff --git a/include/boost/json/impl/error.ipp b/include/boost/json/impl/error.ipp index c45a6e1c..5b15d2e8 100644 --- a/include/boost/json/impl/error.ipp +++ b/include/boost/json/impl/error.ipp @@ -94,7 +94,7 @@ error_code_category_t::message( int ev ) const return message( ev, nullptr, 0 ); } -error_condition +system::error_condition error_code_category_t::default_error_condition( int ev) const noexcept { switch(static_cast(ev)) diff --git a/include/boost/json/impl/null_resource.ipp b/include/boost/json/impl/null_resource.ipp index 3bfa5e18..8e5b957e 100644 --- a/include/boost/json/impl/null_resource.ipp +++ b/include/boost/json/impl/null_resource.ipp @@ -24,7 +24,7 @@ namespace detail { `std::bad_alloc` in calls to `allocate`. */ class null_resource final - : public memory_resource + : public container::pmr::memory_resource { public: /// Copy constructor (deleted) @@ -77,7 +77,7 @@ protected: } // detail -memory_resource* +container::pmr::memory_resource* get_null_resource() noexcept { static detail::null_resource mr; diff --git a/include/boost/json/impl/parse.ipp b/include/boost/json/impl/parse.ipp index 8c9aacc8..f7c21890 100644 --- a/include/boost/json/impl/parse.ipp +++ b/include/boost/json/impl/parse.ipp @@ -23,7 +23,7 @@ namespace json { value parse( string_view s, - error_code& ec, + system::error_code& ec, storage_ptr sp, const parse_options& opt) { @@ -44,7 +44,7 @@ parse( storage_ptr sp, parse_options const& opt) { - error_code jec; + system::error_code jec; value result = parse(s, jec, std::move(sp), opt); ec = jec; return result; @@ -56,7 +56,7 @@ parse( storage_ptr sp, const parse_options& opt) { - error_code ec; + system::error_code ec; auto jv = parse( s, ec, std::move(sp), opt); if(ec) @@ -67,7 +67,7 @@ parse( value parse( std::istream& is, - error_code& ec, + system::error_code& ec, storage_ptr sp, parse_options const& opt) { @@ -110,7 +110,7 @@ parse( storage_ptr sp, parse_options const& opt) { - error_code jec; + system::error_code jec; value result = parse(is, jec, std::move(sp), opt); ec = jec; return result; @@ -122,7 +122,7 @@ parse( storage_ptr sp, parse_options const& opt) { - error_code ec; + system::error_code ec; auto jv = parse( is, ec, std::move(sp), opt); if(ec) diff --git a/include/boost/json/impl/parse_into.hpp b/include/boost/json/impl/parse_into.hpp index 6029076e..b061827f 100644 --- a/include/boost/json/impl/parse_into.hpp +++ b/include/boost/json/impl/parse_into.hpp @@ -23,7 +23,7 @@ void parse_into( V& v, string_view sv, - error_code& ec, + system::error_code& ec, parse_options const& opt ) { parser_for p( opt, &v ); @@ -44,7 +44,7 @@ parse_into( std::error_code& ec, parse_options const& opt ) { - error_code jec; + system::error_code jec; parse_into(v, sv, jec, opt); ec = jec; } @@ -56,7 +56,7 @@ parse_into( string_view sv, parse_options const& opt ) { - error_code ec; + system::error_code ec; parse_into(v, sv, ec, opt); if( ec.failed() ) detail::throw_system_error( ec ); @@ -67,7 +67,7 @@ void parse_into( V& v, std::istream& is, - error_code& ec, + system::error_code& ec, parse_options const& opt ) { parser_for p( opt, &v ); @@ -107,7 +107,7 @@ parse_into( std::error_code& ec, parse_options const& opt ) { - error_code jec; + system::error_code jec; parse_into(v, is, jec, opt); ec = jec; } @@ -119,7 +119,7 @@ parse_into( std::istream& is, parse_options const& opt ) { - error_code ec; + system::error_code ec; parse_into(v, is, ec, opt); if( ec.failed() ) detail::throw_system_error( ec ); diff --git a/include/boost/json/impl/parser.ipp b/include/boost/json/impl/parser.ipp index 110847f8..b6c14498 100644 --- a/include/boost/json/impl/parser.ipp +++ b/include/boost/json/impl/parser.ipp @@ -61,7 +61,7 @@ parser:: write_some( char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = p_.write_some( false, data, size, ec); @@ -76,7 +76,7 @@ write_some( std::size_t size, std::error_code& ec) { - error_code jec; + system::error_code jec; std::size_t const result = write_some(data, size, jec); ec = jec; return result; @@ -88,7 +88,7 @@ write_some( char const* data, std::size_t size) { - error_code ec; + system::error_code ec; auto const n = write_some( data, size, ec); if(ec) @@ -101,7 +101,7 @@ parser:: write( char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = write_some( data, size, ec); @@ -120,7 +120,7 @@ write( std::size_t size, std::error_code& ec) { - error_code jec; + system::error_code jec; std::size_t const result = write(data, size, jec); ec = jec; return result; @@ -132,7 +132,7 @@ write( char const* data, std::size_t size) { - error_code ec; + system::error_code ec; auto const n = write( data, size, ec); if(ec) @@ -149,7 +149,7 @@ release() // prevent undefined behavior if(! p_.last_error()) { - error_code ec; + system::error_code ec; BOOST_JSON_FAIL(ec, error::incomplete); p_.fail(ec); } diff --git a/include/boost/json/impl/pointer.ipp b/include/boost/json/impl/pointer.ipp index 2f0ab923..6dc62c29 100644 --- a/include/boost/json/impl/pointer.ipp +++ b/include/boost/json/impl/pointer.ipp @@ -164,7 +164,7 @@ bool is_past_the_end_token( std::size_t parse_number_token( string_view sv, - error_code& ec) noexcept + system::error_code& ec) noexcept { BOOST_ASSERT( !sv.empty() ); @@ -216,7 +216,7 @@ parse_number_token( string_view next_segment( string_view& sv, - error_code& ec) noexcept + system::error_code& ec) noexcept { if( sv.empty() ) return sv; @@ -285,7 +285,7 @@ Value* walk_pointer( Value& jv, string_view sv, - error_code& ec, + system::error_code& ec, OnObject on_object, OnArray on_array, OnScalar on_scalar) @@ -344,7 +344,7 @@ walk_pointer( value const& value::at_pointer(string_view ptr) const& { - error_code ec; + system::error_code ec; auto const found = find_pointer(ptr, ec); if( !found ) detail::throw_system_error( ec ); @@ -352,7 +352,7 @@ value::at_pointer(string_view ptr) const& } value const* -value::find_pointer( string_view sv, error_code& ec ) const noexcept +value::find_pointer( string_view sv, system::error_code& ec ) const noexcept { return detail::walk_pointer( *this, @@ -362,7 +362,7 @@ value::find_pointer( string_view sv, error_code& ec ) const noexcept { return detail::if_contains_token(obj, token); }, - []( array const& arr, std::size_t index, error_code& ec ) + []( array const& arr, std::size_t index, system::error_code& ec ) -> value const* { if( ec ) @@ -377,7 +377,7 @@ value::find_pointer( string_view sv, error_code& ec ) const noexcept } value* -value::find_pointer(string_view ptr, error_code& ec) noexcept +value::find_pointer(string_view ptr, system::error_code& ec) noexcept { value const& self = *this; return const_cast(self.find_pointer(ptr, ec)); @@ -386,7 +386,7 @@ value::find_pointer(string_view ptr, error_code& ec) noexcept value const* value::find_pointer(string_view ptr, std::error_code& ec) const noexcept { - error_code jec; + system::error_code jec; value const* result = find_pointer(ptr, jec); ec = jec; return result; @@ -403,7 +403,7 @@ value* value::set_at_pointer( string_view sv, value_ref ref, - error_code& ec, + system::error_code& ec, set_pointer_options const& opts ) { value* result = detail::walk_pointer( @@ -422,7 +422,7 @@ value::set_at_pointer( string key( token.begin(), token.end(), obj.storage() ); return &obj.emplace( std::move(key), nullptr ).first->value(); }, - [ &opts ]( array& arr, std::size_t index, error_code& ec ) -> value* + [ &opts ]( array& arr, std::size_t index, system::error_code& ec ) -> value* { if( ec == error::past_the_end ) index = arr.size(); @@ -447,7 +447,7 @@ value::set_at_pointer( { if( opts.create_arrays ) { - error_code ec; + system::error_code ec; detail::parse_number_token( segment, ec ); if( !ec.failed() || ec == error::past_the_end ) { @@ -478,7 +478,7 @@ value::set_at_pointer( std::error_code& ec, set_pointer_options const& opts ) { - error_code jec; + system::error_code jec; value* result = set_at_pointer( sv, ref, jec, opts ); ec = jec; return result; @@ -488,7 +488,7 @@ value& value::set_at_pointer( string_view sv, value_ref ref, set_pointer_options const& opts ) { - error_code ec; + system::error_code ec; value* result = set_at_pointer( sv, ref, ec, opts ); if( !result ) detail::throw_system_error( ec ); diff --git a/include/boost/json/impl/stream_parser.ipp b/include/boost/json/impl/stream_parser.ipp index 232df02b..69f69056 100644 --- a/include/boost/json/impl/stream_parser.ipp +++ b/include/boost/json/impl/stream_parser.ipp @@ -61,7 +61,7 @@ stream_parser:: write_some( char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { return p_.write_some( true, data, size, ec); @@ -74,7 +74,7 @@ write_some( std::size_t size, std::error_code& ec) { - error_code jec; + system::error_code jec; std::size_t const result = write_some(data, size, jec); ec = jec; return result; @@ -86,7 +86,7 @@ write_some( char const* data, std::size_t size) { - error_code ec; + system::error_code ec; auto const n = write_some( data, size, ec); if(ec) @@ -99,7 +99,7 @@ stream_parser:: write( char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = write_some( data, size, ec); @@ -118,7 +118,7 @@ write( std::size_t size, std::error_code& ec) { - error_code jec; + system::error_code jec; std::size_t const result = write(data, size, jec); ec = jec; return result; @@ -130,7 +130,7 @@ write( char const* data, std::size_t size) { - error_code ec; + system::error_code ec; auto const n = write( data, size, ec); if(ec) @@ -140,7 +140,7 @@ write( void stream_parser:: -finish(error_code& ec) +finish(system::error_code& ec) { p_.write_some(false, nullptr, 0, ec); } @@ -149,7 +149,7 @@ void stream_parser:: finish() { - error_code ec; + system::error_code ec; finish(ec); if(ec) detail::throw_system_error( ec ); @@ -159,7 +159,7 @@ void stream_parser:: finish(std::error_code& ec) { - error_code jec; + system::error_code jec; finish(jec); ec = jec; } diff --git a/include/boost/json/impl/value.ipp b/include/boost/json/impl/value.ipp index 12d60f5f..5c9209fb 100644 --- a/include/boost/json/impl/value.ipp +++ b/include/boost/json/impl/value.ipp @@ -445,7 +445,7 @@ operator>>( { while( true ) { - error_code ec; + system::error_code ec; // we peek the buffer; this either makes sure that there's no // more input, or makes sure there's something in the internal diff --git a/include/boost/json/is_deallocate_trivial.hpp b/include/boost/json/is_deallocate_trivial.hpp new file mode 100644 index 00000000..2f782db1 --- /dev/null +++ b/include/boost/json/is_deallocate_trivial.hpp @@ -0,0 +1,74 @@ +// +// Copyright (c) 2024 Dmitry Arkhipov (grisumbras@yandex.ru) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// Official repository: https://github.com/boostorg/json +// + +#ifndef BOOST_JSON_IS_DEALLOCATE_TRIVIAL_HPP +#define BOOST_JSON_IS_DEALLOCATE_TRIVIAL_HPP + +namespace boost { +namespace json { + +/** Return true if a memory resource's deallocate function has no effect. + + This metafunction may be specialized to indicate to the library that calls + to the `deallocate` function of a `boost::container::pmr::memory_resource` + have no effect. The implementation will elide such calls when it is safe to + do so. By default, the implementation assumes that all memory resources + require a call to `deallocate` for each memory region obtained by + calling `allocate`. + + @par Example + + This example specializes the metafuction for `my_resource`, + to indicate that calls to deallocate have no effect: + + @code + + // Forward-declaration for a user-defined memory resource + struct my_resource; + + // It is necessary to specialize the template from + // inside the namespace in which it is declared: + + namespace boost { + namespace json { + + template<> + struct is_deallocate_trivial< my_resource > + { + static constexpr bool value = true; + }; + + } // namespace json + } // namespace boost + + @endcode + + It is usually not necessary for users to check this trait. + Instead, they can call @ref storage_ptr::is_deallocate_trivial + to determine if the pointed-to memory resource has a trivial + deallocate function. + + @see + @ref storage_ptr, + [`boost::container::pmr::memory_resource`](https://www.boost.org/doc/libs/release/doc/html/boost/container/pmr/memory_resource.html). +*/ +template +struct is_deallocate_trivial +{ + /** A bool equal to true if calls to `T::do_deallocate` have no effect. + + The primary template sets `value` to false. + */ + static constexpr bool value = false; +}; + +} // namespace json +} // namespace boost + +#endif // BOOST_JSON_IS_DEALLOCATE_TRIVIAL_HPP diff --git a/include/boost/json/memory_resource.hpp b/include/boost/json/memory_resource.hpp index a2301ad5..ffa9ce98 100644 --- a/include/boost/json/memory_resource.hpp +++ b/include/boost/json/memory_resource.hpp @@ -14,93 +14,36 @@ #include #include +#include namespace boost { namespace json { -#ifdef BOOST_JSON_DOCS - /** The type of memory resource used by the library. - Alias for `boost::container::pmr::memory_resource`. + @note This alias is deprecated in favor of + `boost::container::pmr::memory_resource`. It is included for backwards + compatibility and shouldn't be used in new code. It will be removed + completely in version 1.87.0. */ -class memory_resource -{ -}; +typedef boost::container::pmr::memory_resource + BOOST_DEPRECATED("Use boost::container::pmr::memory_resource instead") + memory_resource; /** The type of polymorphic allocator used by the library. - Alias template for `boost::container::pmr::polymorphic_allocator`. + @note This alias is deprecated in favor of + `boost::container::pmr::polymorphic_allocator`. It is included for + backwards compatibility and shouldn't be used in new code. It will be + removed completely in version 1.87.0. */ template -class polymorphic_allocator; - -// VFALCO Bug: doc toolchain won't make this a ref -//using memory_resource = __see_below__; - -#else -using memory_resource = boost::container::pmr::memory_resource; - -template -using polymorphic_allocator = - boost::container::pmr::polymorphic_allocator; +using + polymorphic_allocator +#ifndef BOOST_MSVC + BOOST_DEPRECATED("Use boost::container::pmr::polymorphic_allocator instead") #endif - -/** Return true if a memory resource's deallocate function has no effect. - - This metafunction may be specialized to indicate to - the library that calls to the `deallocate` function of - a @ref memory_resource have no effect. The implementation - will elide such calls when it is safe to do so. By default, - the implementation assumes that all memory resources - require a call to `deallocate` for each memory region - obtained by calling `allocate`. - - @par Example - - This example specializes the metafuction for `my_resource`, - to indicate that calls to deallocate have no effect: - - @code - - // Forward-declaration for a user-defined memory resource - struct my_resource; - - // It is necessary to specialize the template from - // inside the namespace in which it is declared: - - namespace boost { - namespace json { - - template<> - struct is_deallocate_trivial< my_resource > - { - static constexpr bool value = true; - }; - - } // namespace json - } // namespace boost - - @endcode - - It is usually not necessary for users to check this trait. - Instead, they can call @ref storage_ptr::is_deallocate_trivial - to determine if the pointed-to memory resource has a trivial - deallocate function. - - @see - @ref memory_resource, - @ref storage_ptr -*/ -template -struct is_deallocate_trivial -{ - /** A bool equal to true if calls to `T::do_deallocate` have no effect. - - The primary template sets `value` to false. - */ - static constexpr bool value = false; -}; + = boost::container::pmr::polymorphic_allocator; } // namespace json } // namespace boost diff --git a/include/boost/json/monotonic_resource.hpp b/include/boost/json/monotonic_resource.hpp index 875acc4e..5d4c054e 100644 --- a/include/boost/json/monotonic_resource.hpp +++ b/include/boost/json/monotonic_resource.hpp @@ -11,6 +11,7 @@ #ifndef BOOST_JSON_MONOTONIC_RESOURCE_HPP #define BOOST_JSON_MONOTONIC_RESOURCE_HPP +#include #include #include #include @@ -87,7 +88,7 @@ class BOOST_JSON_DECL BOOST_SYMBOL_VISIBLE monotonic_resource final - : public memory_resource + : public container::pmr::memory_resource { struct block; struct block_base diff --git a/include/boost/json/null_resource.hpp b/include/boost/json/null_resource.hpp index 80efb926..d0519456 100644 --- a/include/boost/json/null_resource.hpp +++ b/include/boost/json/null_resource.hpp @@ -10,6 +10,7 @@ #ifndef BOOST_JSON_NULL_RESOURCE_HPP #define BOOST_JSON_NULL_RESOURCE_HPP +#include #include #include @@ -28,7 +29,7 @@ namespace json { No-throw guarantee. */ BOOST_JSON_DECL -memory_resource* +boost::container::pmr::memory_resource* get_null_resource() noexcept; } // namespace json diff --git a/include/boost/json/object.hpp b/include/boost/json/object.hpp index 01b24094..dd05aa18 100644 --- a/include/boost/json/object.hpp +++ b/include/boost/json/object.hpp @@ -94,15 +94,15 @@ class object object(detail::unchecked_object&& uo); public: - /** The type of _Allocator_ returned by @ref get_allocator + /** Associated [Allocator](https://en.cppreference.com/w/cpp/named_req/Allocator) - This type is a @ref polymorphic_allocator. + This type is a `boost::container::pmr::polymorphic_allocator`. */ #ifdef BOOST_JSON_DOCS - // VFALCO doc toolchain renders this incorrectly using allocator_type = __see_below__; #else - using allocator_type = polymorphic_allocator; + // VFALCO doc toolchain renders this incorrectly + using allocator_type = container::pmr::polymorphic_allocator; #endif /** The type of keys. @@ -154,9 +154,9 @@ public: /** Destructor. - The destructor for each element is called if needed, - any used memory is deallocated, and shared ownership - of the @ref memory_resource is released. + The destructor for each element is called if needed, any used memory is + deallocated, and shared ownership of the + `boost::container::pmr::memory_resource` is released. @par Complexity Constant, or linear in @ref size(). @@ -198,9 +198,9 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ explicit object(storage_ptr sp) noexcept @@ -226,9 +226,9 @@ public: of elements for which capacity is guaranteed without a subsequent reallocation. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ BOOST_JSON_DECL object( @@ -272,9 +272,9 @@ public: Upon construction, @ref capacity() will be greater than or equal to this number. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. @tparam InputIt a type satisfying the requirements of __InputIterator__. @@ -349,9 +349,9 @@ public: @param other The object to move. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ BOOST_JSON_DECL object( @@ -421,9 +421,9 @@ public: @param other The object to copy. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ BOOST_JSON_DECL object( @@ -449,9 +449,9 @@ public: @param init The initializer list to insert. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ object( std::initializer_list< @@ -488,9 +488,9 @@ public: Upon construction, @ref capacity() will be greater than or equal to this number. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ BOOST_JSON_DECL object( @@ -576,10 +576,10 @@ public: //------------------------------------------------------ - /** Return the associated @ref memory_resource + /** Return the associated memory resource. - This returns the @ref memory_resource used by - the container. + This function returns the `boost::container::pmr::memory_resource` used + by the container. @par Complexity Constant. @@ -593,11 +593,10 @@ public: return sp_; } - /** Return the associated @ref memory_resource + /** Return the associated allocator. - This function returns an instance of - @ref polymorphic_allocator constructed from the - associated @ref memory_resource. + This function returns an instance of @ref allocator_type constructed + from the associated `boost::container::pmr::memory_resource`. @par Complexity Constant. @@ -896,7 +895,7 @@ public: @param new_capacity The new minimum capacity. - @throw system_error `new_capacity > max_size()` + @throw `boost::system::system_error` `new_capacity > max_size()`. */ inline void @@ -952,9 +951,8 @@ public: @param p The value to insert. - @throw system_error key is too long. - - @throw system_error @ref size() >= max_size(). + @throw `boost::system::system_error` key is too long. + @throw `boost::system::system_error` @ref size() >= max_size(). @return A pair where `first` is an iterator to the existing or inserted element, and `second` @@ -1077,7 +1075,7 @@ public: @param m The value to insert or assign - @throw system_error if key is too long + @throw `boost::system::system_error` if key is too long. */ template std::pair @@ -1112,7 +1110,7 @@ public: This will be passed as `std::forward(arg)` to the @ref value constructor. - @throw system_error if key is too long + @throw `boost::system::system_error` if key is too long. */ template std::pair @@ -1220,9 +1218,9 @@ public: /** Swap two objects. - Exchanges the contents of this object with another - object. Ownership of the respective @ref memory_resource - objects is not transferred. + Exchanges the contents of this object with another object. Ownership of + the respective `boost::container::pmr::memory_resource` objects is not + transferred. @li If `*other.storage() == *this->storage()`, ownership of the underlying memory is swapped in @@ -1250,9 +1248,9 @@ public: /** Swap two objects. - Exchanges the contents of the object `lhs` with - another object `rhs`. Ownership of the respective - @ref memory_resource objects is not transferred. + Exchanges the contents of the object `lhs` with another object `rhs`. + Ownership of the respective `boost::container::pmr::memory_resource` + objects is not transferred. @li If `*lhs.storage() == *rhs.storage()`, ownership of the underlying memory is swapped in @@ -1311,7 +1309,7 @@ public: @param key The key of the element to find. - @throw system_error if no such element exists. + @throw `boost::system::system_error` if no such element exists. */ /* @{ */ inline diff --git a/include/boost/json/parse.hpp b/include/boost/json/parse.hpp index e322c342..538d5c85 100644 --- a/include/boost/json/parse.hpp +++ b/include/boost/json/parse.hpp @@ -62,7 +62,7 @@ BOOST_JSON_DECL value parse( string_view s, - error_code& ec, + system::error_code& ec, storage_ptr sp = {}, parse_options const& opt = {}); @@ -101,7 +101,7 @@ parse( @param opt The options for the parser. If this parameter is omitted, the parser will accept only standard JSON. - @throw system_error Thrown on failure. + @throw boost::system::system_error Thrown on failure. @see @ref parse_options, @@ -156,7 +156,7 @@ BOOST_JSON_DECL value parse( std::istream& is, - error_code& ec, + system::error_code& ec, storage_ptr sp = {}, parse_options const& opt = {}); @@ -181,7 +181,7 @@ parse( @par Exception Safety Basic guarantee. - Throws @ref system_error on failed parse. + Throws `boost::system::system_error` on failed parse. Calls to `memory_resource::allocate` may throw. The stream may throw as described by [`std::ios::exceptions`](https://en.cppreference.com/w/cpp/io/basic_ios/exceptions). diff --git a/include/boost/json/parse_into.hpp b/include/boost/json/parse_into.hpp index 0ba3c7d0..294272be 100644 --- a/include/boost/json/parse_into.hpp +++ b/include/boost/json/parse_into.hpp @@ -17,6 +17,7 @@ #include #include #include +#include namespace boost { namespace json { @@ -75,7 +76,7 @@ void parse_into( V& v, string_view sv, - error_code& ec, + system::error_code& ec, parse_options const& opt = {} ); template @@ -105,7 +106,6 @@ parse_into( @par Exception Safety Basic guarantee. - Throws @ref system_error on failed parse. Calls to `memory_resource::allocate` may throw. @param v The type to parse into. @@ -114,6 +114,8 @@ parse_into( @param opt The options for the parser. If this parameter is omitted, the parser will accept only standard JSON. + + @throw `boost::system::system_error` on failed parse. */ template void @@ -159,7 +161,7 @@ void parse_into( V& v, std::istream& is, - error_code& ec, + system::error_code& ec, parse_options const& opt = {} ); template @@ -189,7 +191,6 @@ parse_into( @par Exception Safety Basic guarantee. - Throws @ref system_error on failed parse. Calls to `memory_resource::allocate` may throw. The stream may throw as described by [`std::ios::exceptions`](https://en.cppreference.com/w/cpp/io/basic_ios/exceptions). @@ -200,6 +201,8 @@ parse_into( @param opt The options for the parser. If this parameter is omitted, the parser will accept only standard JSON. + + @throw `boost::system::system_error` on failed parse. */ template void diff --git a/include/boost/json/parser.hpp b/include/boost/json/parser.hpp index b62bf197..31a294c2 100644 --- a/include/boost/json/parser.hpp +++ b/include/boost/json/parser.hpp @@ -68,14 +68,14 @@ namespace json { first obtained from an optional, caller-owned buffer specified upon construction. When that is exhausted, the next allocation uses the - @ref memory_resource passed to the constructor; if + `boost::container::pmr::memory_resource` passed to the constructor; if no such argument is specified, the default memory resource is used. Temporary storage is freed only when the parser is destroyed; The performance of parsing multiple JSON texts may be improved by reusing the same parser instance. \n - It is important to note that the @ref memory_resource + It is important to note that the `boost::container::pmr::memory_resource` supplied upon construction is used for temporary storage only, and not for allocating the elements which make up the parsed value. That other memory @@ -410,9 +410,9 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use for the resulting @ref value. The parser - will acquire shared ownership. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use for the resulting @ref value. The parser will acquire shared + ownership. */ BOOST_JSON_DECL void @@ -463,7 +463,7 @@ public: write_some( char const* data, std::size_t size, - error_code& ec); + system::error_code& ec); BOOST_JSON_DECL std::size_t @@ -510,7 +510,7 @@ public: @param size The number of characters pointed to by `data`. - @throw system_error Thrown on error. + @throw `boost::system::system_error` Thrown on error. */ BOOST_JSON_DECL std::size_t @@ -557,7 +557,7 @@ public: std::size_t write_some( string_view s, - error_code& ec) + system::error_code& ec) { return write_some( s.data(), s.size(), ec); @@ -606,7 +606,7 @@ public: @param s The character string to parse. - @throw system_error Thrown on error. + @throw `boost::system::system_error` Thrown on error. */ std::size_t write_some( @@ -658,7 +658,7 @@ public: write( char const* data, std::size_t size, - error_code& ec); + system::error_code& ec); BOOST_JSON_DECL std::size_t @@ -702,7 +702,7 @@ public: @param size The number of characters pointed to by `data`. - @throw system_error Thrown on error. + @throw `boost::system::system_error` Thrown on error. */ BOOST_JSON_DECL std::size_t @@ -746,7 +746,7 @@ public: std::size_t write( string_view s, - error_code& ec) + system::error_code& ec) { return write( s.data(), s.size(), ec); @@ -792,7 +792,7 @@ public: @param s The character string to parse. - @throw system_error Thrown on error. + @throw `boost::system::system_error` Thrown on error. */ std::size_t write( @@ -816,7 +816,7 @@ public: @return The parsed value. Ownership of this value is transferred to the caller. - @throw system_error Thrown on failure. + @throw `boost::system::system_error` Thrown on failure. */ BOOST_JSON_DECL value diff --git a/include/boost/json/result_for.hpp b/include/boost/json/result_for.hpp new file mode 100644 index 00000000..86d3a031 --- /dev/null +++ b/include/boost/json/result_for.hpp @@ -0,0 +1,146 @@ +// +// Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) +// Copyright (c) 2024 Dmitry Arkhipov (grisumbras@yandex.ru) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// Official repository: https://github.com/boostorg/json +// + +#ifndef BOOST_JSON_RESULT_FOR_HPP +#define BOOST_JSON_RESULT_FOR_HPP + +#include +#include +#include +#include + +namespace boost { +namespace json { + +/** + Helper trait that returns @ref result + + The primary template is an incomplete type. The library provides a partial + specialisation `result_for`, that has nested type alias `type` + that aliases the type `result`. + + The purpose of this trait is to let users provide non-throwing conversions + for their types without creating a physical dependency on Boost.Json. For + example: + + @code + namespace boost + { + namespace json + { + + template + struct value_to_tag; + + template + struct result_for; + } + } + + namespace mine + { + class my_class; + ... + template + boost::json::result_for + tag_invoke(boost::json::try_value_to_tag, const JsonValue& jv) + { ... } + } + @endcode + + @see @ref try_value_to, @ref try_value_to_tag +*/ +template +struct result_for; + +/** Create @ref result storing a portable error code + + This function constructs a `boost::system::result` that stores + `boost::system::error_code` with `value()` equal to `e` and `category()` + equal to `boost::system::generic_category()`.
+ + The main use for this function is in implementation of functions returning + @ref result, without including `boost/json/system_error.hpp` or even + ``. In particular, it may be useful for customizations of + @ref try_value_to without creating a physical dependency on Boost.JSON. + For example: + + @code + #include + #include + + namespace boost + { + namespace json + { + + class value; + + template + struct try_value_to_tag; + + template + struct result_for; + + template + typename result_for::type + result_from_errno(int e, boost::source_location const* loc) noexcept + + } + } + + namespace mine + { + + class my_class; + ... + template + boost::json::result_for + tag_invoke(boost::json::try_value_to_tag, const JsonValue& jv) + { + BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION; + if( !jv.is_null() ) + return boost::json::result_from_errno(EINVAL, &loc); + return my_class(); + } + + } + @endcode + + @par Exception Safety + Does not throw exceptions. + + @tparam T The value type of returned `result`. + + @param e The error value. + + @param loc The error location. + + @returns `boost::system::error_code` with `value()` equal to `e` and + `category()` equal to `boost::system::generic_category()`. + + @see @ref try_value_to_tag, @ref try_value_to, @ref result_for, + + `boost::system::generic_category`, + + `boost::source_location`. +*/ +template +typename result_for::type +result_from_errno(int e, boost::source_location const* loc) noexcept +{ + system::error_code ec(e, system::generic_category(), loc); + return {system::in_place_error, ec}; +} + +} // namespace json +} // namespace boost + +#endif // BOOST_JSON_RESULT_FOR_HPP diff --git a/include/boost/json/serializer.hpp b/include/boost/json/serializer.hpp index 7f4524a7..cf8b3dea 100644 --- a/include/boost/json/serializer.hpp +++ b/include/boost/json/serializer.hpp @@ -150,11 +150,9 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use when producing partial output. - Shared ownership of the memory resource - is retained until the serializer is - destroyed. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use when producing partial output. Shared ownership of the memory + resource is retained until the serializer is destroyed. @param buf An optional static buffer to use for temporary storage when producing diff --git a/include/boost/json/static_resource.hpp b/include/boost/json/static_resource.hpp index 8edb325c..e65de1c3 100644 --- a/include/boost/json/static_resource.hpp +++ b/include/boost/json/static_resource.hpp @@ -10,7 +10,9 @@ #ifndef BOOST_JSON_STATIC_RESOURCE_HPP #define BOOST_JSON_STATIC_RESOURCE_HPP +#include #include +#include #include #include @@ -67,7 +69,7 @@ class BOOST_JSON_DECL BOOST_SYMBOL_VISIBLE static_resource final - : public memory_resource + : public container::pmr::memory_resource { void* p_; std::size_t n_; diff --git a/include/boost/json/storage_ptr.hpp b/include/boost/json/storage_ptr.hpp index 085498b4..ceccde40 100644 --- a/include/boost/json/storage_ptr.hpp +++ b/include/boost/json/storage_ptr.hpp @@ -10,10 +10,12 @@ #ifndef BOOST_JSON_STORAGE_PTR_HPP #define BOOST_JSON_STORAGE_PTR_HPP +#include #include #include #include #include +#include #include #include #include @@ -22,19 +24,17 @@ namespace boost { namespace json { -/** A smart pointer to a @ref memory_resource +/** A smart pointer to a memory resource. This container is used to hold a pointer to a memory resource. The pointed-to resource is always valid. Depending on the means of construction, the ownership will be either: - @li Non-owning, when constructing from a raw - pointer to @ref memory_resource or from a - @ref polymorphic_allocator. In this case the - caller is responsible for ensuring that the - lifetime of the memory resource extends until - there are no more calls to allocate or - deallocate. + @li Non-owning, when constructing from a raw pointer to + `boost::container::pmr::memory_resource` or from a + `boost::container::pmr::polymorphic_allocator`. In this case the caller is + responsible for ensuring that the lifetime of the memory resource extends + until there are no more calls to allocate or deallocate. @li Owning, when constructing using the function @ref make_shared_resource. In this case @@ -74,8 +74,9 @@ namespace json { @see @ref make_shared_resource, - @ref memory_resource, - @ref polymorphic_allocator + [`boost::container::pmr::polymorphic_allocator`](https://www.boost.org/doc/libs/release/doc/html/boost/container/pmr/polymorphic_allocator.html). + [`boost::container::pmr::memory_resource`](https://www.boost.org/doc/libs/release/doc/html/boost/container/pmr/memory_resource.html). + */ class storage_ptr { @@ -95,7 +96,7 @@ class storage_ptr get_shared() const noexcept { return static_cast( - reinterpret_cast( + reinterpret_cast( i_ & ~3)); } @@ -123,7 +124,7 @@ class storage_ptr storage_ptr( detail::shared_resource_impl* p) noexcept : i_(reinterpret_cast( - static_cast(p)) + 1 + + static_cast(p)) + 1 + (json::is_deallocate_trivial::value ? 2 : 0)) { BOOST_ASSERT(p); @@ -168,14 +169,13 @@ public: /** Constructor - This constructs a non-owning pointer that - points to the memory resource `r`. - The caller is responsible for maintaining the - lifetime of the pointed-to @ref memory_resource. + This constructs a non-owning pointer that points to the memory resource + `r`. The caller is responsible for maintaining the lifetime of the + pointed-to `boost::container::pmr::memory_resource`. @par Constraints @code - std::is_convertible< T*, memory_resource* >::value == true + std::is_convertible< T*, boost::container::pmr::memory_resource* >::value == true @endcode @par Preconditions @@ -193,12 +193,12 @@ public: #ifndef BOOST_JSON_DOCS , class = typename std::enable_if< std::is_convertible::value>::type + container::pmr::memory_resource*>::value>::type #endif > storage_ptr(T* r) noexcept : i_(reinterpret_cast( - static_cast(r)) + + static_cast(r)) + (json::is_deallocate_trivial::value ? 2 : 0)) { BOOST_ASSERT(r); @@ -206,26 +206,25 @@ public: /** Constructor - This constructs a non-owning pointer that - points to the same memory resource as `alloc`, - obtained by calling `alloc.resource()`. - The caller is responsible for maintaining the - lifetime of the pointed-to @ref memory_resource. + This constructs a non-owning pointer that points to the same memory + resource as `alloc`, obtained by calling `alloc.resource()`. The caller + is responsible for maintaining the lifetime of the + pointed-to `boost::container::pmr::memory_resource`. @par Constraints @code - std::is_convertible< T*, memory_resource* >::value == true + std::is_convertible< T*, boost::container::pmr::memory_resource* >::value == true @endcode @par Exception Safety No-throw guarantee. - @param alloc A @ref polymorphic_allocator to + @param alloc A `boost::container::pmr::polymorphic_allocator` to construct from. */ template storage_ptr( - polymorphic_allocator const& alloc) noexcept + container::pmr::polymorphic_allocator const& alloc) noexcept : i_(reinterpret_cast( alloc.resource())) { @@ -400,7 +399,7 @@ public: /** Return a pointer to the memory resource. This function returns a pointer to the - referenced @ref memory_resource. + referenced `boost::container::pmr::memory_resource`. @par Complexity Constant. @@ -408,19 +407,19 @@ public: @par Exception Safety No-throw guarantee. */ - memory_resource* + container::pmr::memory_resource* get() const noexcept { if(i_ != 0) return reinterpret_cast< - memory_resource*>(i_ & ~3); + container::pmr::memory_resource*>(i_ & ~3); return default_resource::get(); } /** Return a pointer to the memory resource. This function returns a pointer to the - referenced @ref memory_resource. + referenced `boost::container::pmr::memory_resource`. @par Complexity Constant. @@ -428,7 +427,7 @@ public: @par Exception Safety No-throw guarantee. */ - memory_resource* + container::pmr::memory_resource* operator->() const noexcept { return get(); @@ -437,7 +436,7 @@ public: /** Return a reference to the memory resource. This function returns a reference to the - pointed-to @ref memory_resource. + pointed-to `boost::container::pmr::memory_resource`. @par Complexity @@ -447,7 +446,7 @@ public: No-throw guarantee. */ - memory_resource& + container::pmr::memory_resource& operator*() const noexcept { return *get(); @@ -474,7 +473,7 @@ public: @par Mandates @code - std::is_base_of< memory_resource, U >::value == true + std::is_base_of< boost::container::pmr::memory_resource, U >::value == true @endcode @par Complexity @@ -495,7 +494,7 @@ make_shared_resource(Args&&... args) // `T` is not a memory resource. BOOST_STATIC_ASSERT( std::is_base_of< - memory_resource, U>::value); + container::pmr::memory_resource, U>::value); return storage_ptr(new detail::shared_resource_impl( std::forward(args)...)); @@ -506,9 +505,9 @@ make_shared_resource(Args&&... args) /** Return true if two storage pointers point to the same memory resource. - This function returns `true` if the @ref memory_resource - objects pointed to by `lhs` and `rhs` have the - same address. + This function returns `true` if the + `boost::container::pmr::memory_resource` objects pointed to by `lhs` and + `rhs` have the same address. */ inline bool @@ -521,9 +520,9 @@ operator==( /** Return true if two storage pointers point to different memory resources. - This function returns `true` if the @ref memory_resource - objects pointed to by `lhs` and `rhs` have different - addresses. + This function returns `true` if the + `boost::container::pmr::memory_resource` objects pointed to by `lhs` and + `rhs` have different addresses. */ inline bool diff --git a/include/boost/json/stream_parser.hpp b/include/boost/json/stream_parser.hpp index aa61e597..d7baf531 100644 --- a/include/boost/json/stream_parser.hpp +++ b/include/boost/json/stream_parser.hpp @@ -89,19 +89,17 @@ namespace json { first obtained from an optional, caller-owned buffer specified upon construction. When that is exhausted, the next allocation uses the - @ref memory_resource passed to the constructor; if + `boost::container::pmr::memory_resource` passed to the constructor; if no such argument is specified, the default memory resource is used. Temporary storage is freed only when the parser is destroyed; The performance of parsing multiple JSON texts may be improved by reusing the same parser instance. \n - It is important to note that the @ref memory_resource - supplied upon construction is used for temporary - storage only, and not for allocating the elements - which make up the parsed value. That other memory - resource is optionally supplied in each call - to @ref reset. + It is important to note that the `boost::container::pmr::memory_resource` + supplied upon construction is used for temporary storage only, and not for + allocating the elements which make up the parsed value. That other memory + resource is optionally supplied in each call to @ref reset. @par Duplicate Keys @@ -431,9 +429,9 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use for the resulting @ref value. The parser - will acquire shared ownership. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use for the resulting @ref value. The parser will acquire shared + ownership. */ BOOST_JSON_DECL void @@ -517,7 +515,7 @@ public: write_some( char const* data, std::size_t size, - error_code& ec); + system::error_code& ec); BOOST_JSON_DECL std::size_t @@ -573,7 +571,7 @@ public: @param size The number of characters pointed to by `data`. - @throw system_error Thrown on error. + @throw `boost::system::system_error` Thrown on error. */ BOOST_JSON_DECL std::size_t @@ -629,7 +627,7 @@ public: std::size_t write_some( string_view s, - error_code& ec) + system::error_code& ec) { return write_some( s.data(), s.size(), ec); @@ -687,7 +685,7 @@ public: @param s The character string to parse. - @throw system_error Thrown on error. + @throw `boost::system::system_error` Thrown on error. */ std::size_t write_some( @@ -748,7 +746,7 @@ public: write( char const* data, std::size_t size, - error_code& ec); + system::error_code& ec); BOOST_JSON_DECL std::size_t @@ -801,7 +799,7 @@ public: @param size The number of characters pointed to by `data`. - @throw system_error Thrown on error. + @throw `boost::system::system_error` Thrown on error. */ BOOST_JSON_DECL std::size_t @@ -854,7 +852,7 @@ public: std::size_t write( string_view s, - error_code& ec) + system::error_code& ec) { return write( s.data(), s.size(), ec); @@ -909,7 +907,7 @@ public: @param s The character string to parse. - @throw system_error Thrown on error. + @throw `boost::system::system_error` Thrown on error. */ std::size_t write( @@ -955,7 +953,7 @@ public: /** @{ */ BOOST_JSON_DECL void - finish(error_code& ec); + finish(system::error_code& ec); BOOST_JSON_DECL void @@ -993,7 +991,7 @@ public: Upon error or exception, subsequent calls will fail until @ref reset is called to parse a new JSON text. - @throw system_error Thrown on error. + @throw `boost::system::system_error` Thrown on error. */ BOOST_JSON_DECL void @@ -1020,7 +1018,7 @@ public: @return The parsed value. Ownership of this value is transferred to the caller. - @throw system_error Thrown on failure. + @throw `boost::system::system_error` Thrown on failure. */ BOOST_JSON_DECL value diff --git a/include/boost/json/string.hpp b/include/boost/json/string.hpp index 85a3f16c..2aaf9b1c 100644 --- a/include/boost/json/string.hpp +++ b/include/boost/json/string.hpp @@ -84,15 +84,15 @@ class string storage_ptr sp); public: - /** The type of _Allocator_ returned by @ref get_allocator + /** Associated [Allocator](https://en.cppreference.com/w/cpp/named_req/Allocator) - This type is a @ref polymorphic_allocator. + This type is a `boost::container::pmr::polymorphic_allocator`. */ #ifdef BOOST_JSON_DOCS - // VFALCO doc toolchain renders this incorrectly using allocator_type = __see_below__; #else - using allocator_type = polymorphic_allocator; + // VFALCO doc toolchain renders this incorrectly + using allocator_type = container::pmr::polymorphic_allocator; #endif /// The type of a character @@ -219,9 +219,9 @@ public: Constant. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ explicit string(storage_ptr sp) @@ -248,12 +248,12 @@ public: @param ch The value to initialize characters of the string with. - @param sp An optional pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. - The default argument for this parameter is `{}`. + @param sp An optional pointer to the + `boost::container::pmr::memory_resource` to use. The container will + acquire shared ownership of the memory resource. The default argument + for this parameter is `{}`. - @throw system_error `count > max_size()`. + @throw `boost::system::system_error` `count > max_size()`. */ BOOST_JSON_DECL explicit @@ -281,12 +281,12 @@ public: @param s A pointer to a character string used to copy from. - @param sp An optional pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. - The default argument for this parameter is `{}`. + @param sp An optional pointer to the + `boost::container::pmr::memory_resource` to use. The container will + acquire shared ownership of the memory resource. The default argument + for this parameter is `{}`. - @throw system_error `strlen(s) > max_size()`. + @throw `boost::system::system_error` `strlen(s) > max_size()`. */ BOOST_JSON_DECL string( @@ -313,12 +313,12 @@ public: @param s A pointer to a character string used to copy from. - @param sp An optional pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. - The default argument for this parameter is `{}`. + @param sp An optional pointer to the + `boost::container::pmr::memory_resource` to use. The container will + acquire shared ownership of the memory resource. The default argument + for this parameter is `{}`. - @throw system_error `count > max_size()`. + @throw `boost::system::system_error` `count > max_size()`. */ BOOST_JSON_DECL explicit @@ -354,12 +354,12 @@ public: @param last An input iterator pointing to the end of the range. - @param sp An optional pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. - The default argument for this parameter is `{}`. + @param sp An optional pointer to the + `boost::container::pmr::memory_resource` to use. The container will + acquire shared ownership of the memory resource. The default argument + for this parameter is `{}`. - @throw system_error `std::distance(first, last) > max_size()`. + @throw `boost::system::system_error` `std::distance(first, last) > max_size()`. */ template max_size()`. + @throw `boost::system::system_error` `std::distance(first, last) > max_size()`. */ BOOST_JSON_DECL string( @@ -543,12 +540,11 @@ public: @li If `&other == this`, do nothing. Otherwise, - @li If `*other.storage() == *this->storage()`, - ownership of the underlying memory is transferred - in constant time, with no possibility - of exceptions. After construction, the moved-from - string behaves as if newly constructed with its - current @ref memory_resource. Otherwise, + @li If `*other.storage() == *this->storage()`, ownership of the + underlying memory is transferred in constant time, with no possibility + of exceptions. After construction, the moved-from string behaves as if + newly constructed with its current + `boost::container::pmr::memory_resource`. Otherwise, @li a copy of the characters in `other` is made. In this case, the moved-from container is not changed. @@ -591,7 +587,7 @@ public: @param s The null-terminated character string. - @throw system_error `std::strlen(s) > max_size()`. + @throw `boost::system::system_error` `std::strlen(s) > max_size()`. */ BOOST_JSON_DECL string& @@ -616,7 +612,7 @@ public: @param s The string view to copy from. - @throw system_error `s.size() > max_size()`. + @throw `boost::system::system_error` `s.size() > max_size()`. */ BOOST_JSON_DECL string& @@ -645,7 +641,7 @@ public: @param ch The value to initialize characters of the string with. - @throw system_error `count > max_size()`. + @throw `boost::system::system_error` `count > max_size()`. */ BOOST_JSON_DECL string& @@ -683,12 +679,11 @@ public: @li If `&other == this`, do nothing. Otherwise, - @li If `*other.storage() == *this->storage()`, - ownership of the underlying memory is transferred - in constant time, with no possibility of - exceptions. After construction, the moved-from - string behaves as if newly constructed with - its current @ref memory_resource, otherwise + @li If `*other.storage() == *this->storage()`, ownership of the + underlying memory is transferred in constant time, with no possibility + of exceptions. After construction, the moved-from string behaves as if + newly constructed with its current + `boost::container::pmr::memory_resource`, otherwise @li If `*other.storage() != *this->storage()`, a copy of the characters in `other` is made. @@ -734,7 +729,7 @@ public: @param s A pointer to a character string used to copy from. - @throw system_error `count > max_size()`. + @throw `boost::system::system_error` `count > max_size()`. */ BOOST_JSON_DECL string& @@ -766,7 +761,7 @@ public: @param s A pointer to a character string used to copy from. - @throw system_error `strlen(s) > max_size()`. + @throw `boost::system::system_error` `strlen(s) > max_size()`. */ BOOST_JSON_DECL string& @@ -802,7 +797,7 @@ public: @param last An input iterator pointing to the end of the range. - @throw system_error `std::distance(first, last) > max_size()`. + @throw `boost::system::system_error` `std::distance(first, last) > max_size()`. */ template max_size()`. + @throw `boost::system::system_error` `s.size() > max_size()`. */ string& assign(string_view s) @@ -843,9 +838,9 @@ public: //------------------------------------------------------ - /** Return the associated @ref memory_resource + /** Return the associated memory resource. - This returns the @ref memory_resource used by + This returns the `boost::container::pmr::memory_resource` used by the container. @par Complexity @@ -862,11 +857,10 @@ public: return sp_; } - /** Return the associated @ref memory_resource + /** Return the associated allocator. - This function returns an instance of - @ref polymorphic_allocator constructed from the - associated @ref memory_resource. + This function returns an instance of @ref allocator_type constructed + from the associated `boost::container::pmr::memory_resource`. @par Complexity @@ -903,7 +897,7 @@ public: @param pos A zero-based index to access. - @throw system_error `pos >= size()` + @throw `boost::system::system_error` `pos >= size()`. */ /** @{ */ char& @@ -1474,7 +1468,7 @@ public: @param new_capacity The new capacity of the array. - @throw system_error `new_capacity > max_size()` + @throw `boost::system::system_error` `new_capacity > max_size()`. */ void reserve(std::size_t new_capacity) @@ -1548,9 +1542,8 @@ public: @param sv The `string_view` to insert. - @throw system_error `size() + s.size() > max_size()` - - @throw system_error `pos > size()` + @throw `boost::system::system_error` `size() + s.size() > max_size()`. + @throw `boost::system::system_error` `pos > size()`. */ BOOST_JSON_DECL string& @@ -1578,9 +1571,8 @@ public: @param ch The character to insert. - @throw system_error `size() + count > max_size()` - - @throw system_error `pos > size()` + @throw `boost::system::system_error` `size() + count > max_size()`. + @throw `boost::system::system_error` `pos > size()`. */ BOOST_JSON_DECL string& @@ -1608,9 +1600,8 @@ public: @param ch The character to insert. - @throw system_error `size() + 1 > max_size()` - - @throw system_error `pos > size()` + @throw `boost::system::system_error` `size() + 1 > max_size()`. + @throw `boost::system::system_error` `pos > size()`. */ string& insert( @@ -1651,9 +1642,8 @@ public: @param last The end of the character range. - @throw system_error `size() + insert_count > max_size()` - - @throw system_error `pos > size()` + @throw `boost::system::system_error` `size() + insert_count > max_size()`. + @throw `boost::system::system_error` `pos > size()`. */ template size()` + @throw `boost::system::system_error` `pos > size()`. */ BOOST_JSON_DECL string& @@ -1775,7 +1765,7 @@ public: @param ch The character to append. - @throw system_error `size() + 1 > max_size()` + @throw `boost::system::system_error` `size() + 1 > max_size()`. */ BOOST_JSON_DECL void @@ -1812,7 +1802,7 @@ public: @param ch The character to append. - @throw system_error `size() + count > max_size()` + @throw `boost::system::system_error` `size() + count > max_size()`. */ BOOST_JSON_DECL string& @@ -1832,7 +1822,7 @@ public: @param sv The `string_view` to append. - @throw system_error `size() + s.size() > max_size()` + @throw `boost::system::system_error` `size() + s.size() > max_size()`. */ BOOST_JSON_DECL string& @@ -1865,7 +1855,7 @@ public: @param last An iterator one past the last character to append. - @throw system_error `size() + insert_count > max_size()` + @throw `boost::system::system_error` `size() + insert_count > max_size()`. */ template max_size()` + @throw `boost::system::system_error` `size() + sv.size() > max_size()`. */ string& operator+=(string_view sv) @@ -1908,7 +1898,7 @@ public: @param ch The character to append. - @throw system_error `size() + 1 > max_size()` + @throw `boost::system::system_error` `size() + 1 > max_size()`. */ string& operator+=(char ch) @@ -2037,9 +2027,8 @@ public: @param sv The `string_view` to replace with. - @throw system_error `size() + (sv.size() - rcount) > max_size()` - - @throw system_error `pos > size()` + @throw `boost::system::system_error` `size() + (sv.size() - rcount) > max_size()`. + @throw `boost::system::system_error` `pos > size()`. */ BOOST_JSON_DECL string& @@ -2075,7 +2064,7 @@ public: @param sv The `string_view` to replace with. - @throw system_error `size() + (sv.size() - std::distance(first, last)) > max_size()` + @throw `boost::system::system_error` `size() + (sv.size() - std::distance(first, last)) > max_size()`. */ string& replace( @@ -2125,7 +2114,7 @@ public: @param last2 An iterator one past the end of the last character to replace with. - @throw system_error `size() + (inserted - std::distance(first, last)) > max_size()` + @throw `boost::system::system_error` `size() + (inserted - std::distance(first, last)) > max_size()`. */ template max_size()` - - @throw system_error `pos > size()` + @throw `boost::system::system_error` `size() + (count2 - rcount) > max_size()`. + @throw `boost::system::system_error` `pos > size()`. */ BOOST_JSON_DECL string& @@ -2206,7 +2194,7 @@ public: @param ch The character to replace with. - @throw system_error `size() + (count - std::distance(first, last)) > max_size()` + @throw `boost::system::system_error` `size() + (count - std::distance(first, last)) > max_size()`. */ string& replace( @@ -2237,7 +2225,7 @@ public: The default argument for this parameter is @ref npos. - @throw system_error `pos > size()` + @throw `boost::system::system_error` `pos > size()`. */ string_view subview( @@ -2282,7 +2270,7 @@ public: @param pos The index to begin copying from. The default argument for this parameter is `0`. - @throw system_error `pos > max_size()` + @throw `boost::system::system_error` `pos > max_size()`. */ std::size_t copy( @@ -2304,7 +2292,7 @@ public: @param count The size to resize the string to. - @throw system_error `count > max_size()` + @throw `boost::system::system_error` `count > max_size()`. */ void resize(std::size_t count) @@ -2324,7 +2312,7 @@ public: @param ch The characters to append if the size increases. - @throw system_error `count > max_size()` + @throw `boost::system::system_error` `count > max_size()`. */ BOOST_JSON_DECL void @@ -2360,9 +2348,9 @@ public: /** Swap the contents. - Exchanges the contents of this string with another - string. Ownership of the respective @ref memory_resource - objects is not transferred. + Exchanges the contents of this string with another string. Ownership of + the respective `boost::container::pmr::memory_resource` objects is not + transferred. @li If `&other == this`, do nothing. Otherwise, @@ -2391,9 +2379,9 @@ public: /** Exchange the given values. - Exchanges the contents of the string `lhs` with - another string `rhs`. Ownership of the respective - @ref memory_resource objects is not transferred. + Exchanges the contents of the string `lhs` with another string `rhs`. + Ownership of the respective `boost::container::pmr::memory_resource` + objects is not transferred. @li If `&lhs == &rhs`, do nothing. Otherwise, diff --git a/include/boost/json/system_error.hpp b/include/boost/json/system_error.hpp index a08cd7dc..931379f7 100644 --- a/include/boost/json/system_error.hpp +++ b/include/boost/json/system_error.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -21,17 +22,46 @@ namespace boost { namespace json { -/// The type of error code used by the library. -using error_code = boost::system::error_code; +/** The type of error code used by the library. -/// The type of error category used by the library. -using error_category = boost::system::error_category; + @note This alias is deprecated in favor of `boost::system::error_code`. + It is included for backwards compatibility and shouldn't be used in new + code. It will be removed completely in version 1.87.0. +*/ +typedef boost::system::error_code + BOOST_DEPRECATED("Use boost::system::error_code instead") + error_code; -/// The type of error condition used by the library. -using error_condition = boost::system::error_condition; +/** The type of error category used by the library. -/// The type of system error thrown by the library. -using system_error = boost::system::system_error; + @note This alias is deprecated in favor of `boost::system::error_category`. + It is included for backwards compatibility and shouldn't be used in new + code. It will be removed completely in version 1.87.0. +*/ +typedef boost::system::error_category + BOOST_DEPRECATED("Use boost::system::error_category instead") + error_category; + +/** The type of error condition used by the library. + + @note This alias is deprecated in favor of + `boost::system::error_condition`. It is included for backwards + compatibility and shouldn't be used in new code. It will be removed + completely in version 1.87.0. +*/ +typedef boost::system::error_condition + BOOST_DEPRECATED("Use boost::system::error_condition instead") + error_condition; + +/** The type of system error thrown by the library. + + @note This alias is deprecated in favor of `boost::system::system_error`. + It is included for backwards compatibility and shouldn't be used in new + code. It will be removed completely in version 1.87.0. +*/ +typedef boost::system::system_error + BOOST_DEPRECATED("Use boost::system::system_error instead") + system_error; /** The type of result returned by library functions @@ -90,134 +120,19 @@ using system_error = boost::system::system_error; std::cout << r.error(); @endcode - @note For a full synopsis of the type, please see the corresponding - documentation in Boost.System. + @note This alias is deprecated in favor of `boost::system::result`. It is + included for backwards compatibility and shouldn't be used in new code. It + will be removed completely in version 1.87.0. @tparam T The type of value held by the result. */ template< class T > -using result = boost::system::result; - -/** - Helper trait that returns @ref result - - The primary template is an incomplete type. The library provides a partial - specialisation `result_for`, that has nested type alias `type` - that aliases the type `result`. - - The purpose of this trait is to let users provide non-throwing conversions - for their types without creating a physical dependency on Boost.Json. For - example: - - @code - namespace boost - { - namespace json - { - - template - struct value_to_tag; - - template - struct result_for; - } - } - - namespace mine - { - class my_class; - ... - template - boost::json::result_for - tag_invoke(boost::json::try_value_to_tag, const JsonValue& jv) - { ... } - } - @endcode - - @see @ref try_value_to, @ref try_value_to_tag -*/ -template -struct result_for; - -/** Create @ref result storing a portable error code - - This function constructs a `result` that stores @ref error_code with - `value()` equal to `e` and `category()` equal to - `boost::system::generic_category()`.
- - The main use for this function is in implementation of functions returning - @ref result, without including `boost/json/system_error.hpp` or even - ``. In particular, it may be useful for customizations of - @ref try_value_to without creating a physical dependency on Boost.JSON. - For example: - - @code - #include - #include - - namespace boost - { - namespace json - { - - class value; - - template - struct try_value_to_tag; - - template - struct result_for; - - template - typename result_for::type - result_from_errno(int e, boost::source_location const* loc) noexcept - - } - } - - namespace mine - { - - class my_class; - ... - template - boost::json::result_for - tag_invoke(boost::json::try_value_to_tag, const JsonValue& jv) - { - BOOST_STATIC_CONSTEXPR boost::source_location loc = BOOST_CURRENT_LOCATION; - if( !jv.is_null() ) - return boost::json::result_from_errno(EINVAL, &loc); - return my_class(); - } - - } - @endcode - - @par Exception Safety - Does not throw exceptions. - - @tparam T The value type of returned `result`. - - @param e The error value. - - @param loc The error location. - - @returns @ref error_code with `value()` equal to `e` and `category()` equal - to `boost::system::generic_category()`. - - @see @ref try_value_to_tag, @ref try_value_to, @ref result_for, - - `boost::system::generic_category`, - - `boost::source_location`. -*/ -template -typename result_for::type -result_from_errno(int e, boost::source_location const* loc) noexcept -{ - error_code ec(e, system::generic_category(), loc); - return {system::in_place_error, ec}; -} +using + result +#ifndef BOOST_MSVC + BOOST_DEPRECATED("Use boost::system::result instead") +#endif + = boost::system::result; } // namespace json } // namespace boost diff --git a/include/boost/json/value.hpp b/include/boost/json/value.hpp index 9041ab8e..799ba9f8 100644 --- a/include/boost/json/value.hpp +++ b/include/boost/json/value.hpp @@ -111,15 +111,15 @@ class value } public: - /** The type of _Allocator_ returned by @ref get_allocator + /** Associated [Allocator](https://en.cppreference.com/w/cpp/named_req/Allocator) - This type is a @ref polymorphic_allocator. + This type is a `boost::container::pmr::polymorphic_allocator`. */ #ifdef BOOST_JSON_DOCS - // VFALCO doc toolchain renders this incorrectly using allocator_type = __see_below__; #else - using allocator_type = polymorphic_allocator; + // VFALCO doc toolchain renders this incorrectly + using allocator_type = container::pmr::polymorphic_allocator; #endif /** Destructor. @@ -157,8 +157,8 @@ public: /** Constructor. - The constructed value is null, - using the specified @ref memory_resource. + The constructed value is null, using the + specified `boost::container::pmr::memory_resource`. @par Complexity Constant. @@ -166,9 +166,9 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ explicit value(storage_ptr sp) noexcept @@ -239,9 +239,9 @@ public: @param other The value to copy. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ BOOST_JSON_DECL value( @@ -297,9 +297,9 @@ public: @param other The value to move. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ BOOST_JSON_DECL value( @@ -322,9 +322,9 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( std::nullptr_t, @@ -346,9 +346,9 @@ public: @param b The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ #ifdef BOOST_JSON_DOCS value( @@ -377,9 +377,9 @@ public: @param i The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( signed char i, @@ -399,9 +399,9 @@ public: @param i The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( short i, @@ -421,9 +421,9 @@ public: @param i The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( int i, @@ -443,9 +443,9 @@ public: @param i The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( long i, @@ -465,9 +465,9 @@ public: @param i The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( long long i, @@ -487,9 +487,9 @@ public: @param u The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( unsigned char u, @@ -509,9 +509,9 @@ public: @param u The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( unsigned short u, @@ -531,9 +531,9 @@ public: @param u The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( unsigned int u, @@ -553,9 +553,9 @@ public: @param u The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( unsigned long u, @@ -575,9 +575,9 @@ public: @param u The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( unsigned long long u, @@ -597,9 +597,9 @@ public: @param d The initial value. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( double d, @@ -622,9 +622,9 @@ public: @param s The string view to construct with. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( string_view s, @@ -649,9 +649,9 @@ public: @param s The null-terminated string to construct with. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( char const* s, @@ -704,9 +704,9 @@ public: @param other The string to construct with. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( string const& other, @@ -731,9 +731,9 @@ public: @param other The string to construct with. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( string&& other, @@ -765,9 +765,9 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. @see @ref string_kind */ @@ -821,9 +821,9 @@ public: @param other The array to construct with. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( array const& other, @@ -848,9 +848,9 @@ public: @param other The array to construct with. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( array&& other, @@ -882,9 +882,9 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. @see @ref array_kind */ @@ -938,9 +938,9 @@ public: @param other The object to construct with. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( object const& other, @@ -965,9 +965,9 @@ public: @param other The object to construct with. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. */ value( object&& other, @@ -999,9 +999,9 @@ public: @par Exception Safety No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. @see @ref object_kind */ @@ -1034,9 +1034,9 @@ public: @param init The initializer list to construct from. - @param sp A pointer to the @ref memory_resource - to use. The container will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The container will acquire shared ownership of the memory + resource. @par Note The previous behavior of this constructor was to always @@ -1592,10 +1592,9 @@ public: /** Return a reference to an @ref object, changing the kind and replacing the contents. - The contents are replaced with an empty @ref object - using the current @ref memory_resource. All - previously obtained iterators and references - obtained beforehand are invalidated. + The contents are replaced with an empty @ref object using the current + `boost::container::pmr::memory_resource`. All previously obtained + iterators and references obtained beforehand are invalidated. @par Complexity Linear in the size of `*this`. @@ -1609,9 +1608,9 @@ public: /** Swap the given values. - Exchanges the contents of this value with another - value. Ownership of the respective @ref memory_resource - objects is not transferred: + Exchanges the contents of this value with another value. Ownership of + the respective `boost::container::pmr::memory_resource` objects is not + transferred: @li If `*other.storage() == *this->storage()`, ownership of the underlying memory is swapped in @@ -1640,9 +1639,9 @@ public: /** Swap the given values. - Exchanges the contents of value `lhs` with - another value `rhs`. Ownership of the respective - @ref memory_resource objects is not transferred. + Exchanges the contents of value `lhs` with another value `rhs`. + Ownership of the respective `boost::container::pmr::memory_resource` + objects is not transferred. @li If `*lhs.storage() == *rhs.storage()`, ownership of the underlying memory is swapped in @@ -2386,7 +2385,7 @@ public: ! std::is_same::value, T>::type #endif - to_number(error_code& ec) const noexcept + to_number(system::error_code& ec) const noexcept { error e; auto result = to_number(e); @@ -2405,7 +2404,7 @@ public: #endif to_number(std::error_code& ec) const noexcept { - error_code jec; + system::error_code jec; auto result = to_number(jec); ec = jec; return result; @@ -2446,7 +2445,7 @@ public: @return The converted number. - @throw system_error on error. + @throw `boost::system::system_error` Thrown on error. */ template #ifdef BOOST_JSON_DOCS @@ -2475,10 +2474,10 @@ public: // //------------------------------------------------------ - /** Return the memory resource associated with the value. + /** Return the associated memory resource. - This returns a pointer to the memory resource - that was used to construct the value. + This function returns the `boost::container::pmr::memory_resource` used + by the container. @par Complexity Constant. @@ -2492,11 +2491,10 @@ public: return sp_; } - /** Return the associated @ref memory_resource + /** Return the associated allocator. - This function returns an instance of - @ref polymorphic_allocator constructed from the - associated @ref memory_resource. + This function returns an instance of @ref allocator_type constructed + from the associated `boost::container::pmr::memory_resource`. @par Complexity Constant. @@ -2524,7 +2522,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_object()` + @throw `boost::system::system_error` `! this->is_object()`. */ /* @{ */ object& @@ -2562,7 +2560,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_array()` + @throw `boost::system::system_error` `! this->is_array()`. */ /* @{ */ array& @@ -2600,7 +2598,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_string()` + @throw `boost::system::system_error` `! this->is_string()`. */ /* @{ */ string& @@ -2638,7 +2636,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_int64()` + @throw `boost::system::system_error` `! this->is_int64()`. @par Note This function is intended for direct access to the underlying object, @@ -2669,7 +2667,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_int64()` + @throw `boost::system::system_error` `! this->is_int64()`. @par Note This function is the const-qualified overload of @ref as_int64, which @@ -2700,7 +2698,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_uint64()` + @throw `boost::system::system_error` `! this->is_uint64()`. @par Note This function is intended for direct access to the underlying object, @@ -2731,7 +2729,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_uint64()` + @throw `boost::system::system_error` `! this->is_uint64()`. @par Note This function is the const-qualified overload of @ref as_uint64, which @@ -2763,7 +2761,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_double()` + @throw `boost::system::system_error` `! this->is_double()`. @par Note This function is intended for direct access to the underlying object, @@ -2793,7 +2791,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_double()` + @throw `boost::system::system_error` `! this->is_double()`. @par Note This function is the const-qualified overload of @ref as_double, which @@ -2824,7 +2822,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_bool()` + @throw `boost::system::system_error` `! this->is_bool()`. */ bool& as_bool() @@ -2847,7 +2845,7 @@ public: @par Exception Safety Strong guarantee. - @throw system_error `! this->is_bool()` + @throw `boost::system::system_error` `! this->is_bool()`. */ bool as_bool() const @@ -3261,7 +3259,7 @@ public: @return reference to the element identified by `ptr`. - @throw system_error if an error occurs. + @throw `boost::system::system_error` if an error occurs. @see @@ -3305,11 +3303,11 @@ public: /** @{ */ BOOST_JSON_DECL value const* - find_pointer(string_view ptr, error_code& ec) const noexcept; + find_pointer(string_view ptr, system::error_code& ec) const noexcept; BOOST_JSON_DECL value* - find_pointer(string_view ptr, error_code& ec) noexcept; + find_pointer(string_view ptr, system::error_code& ec) noexcept; BOOST_JSON_DECL value const* @@ -3452,7 +3450,7 @@ public: set_at_pointer( string_view sv, value_ref ref, - error_code& ec, + system::error_code& ec, set_pointer_options const& opts = {} ); BOOST_JSON_DECL @@ -3840,9 +3838,8 @@ public: @param other The key/value pair to copy. - @param sp A pointer to the @ref memory_resource - to use. The element will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The element will acquire shared ownership of the memory resource. */ BOOST_JSON_DECL key_value_pair( @@ -3959,9 +3956,8 @@ public: @param p A `std::pair` with the key string and @ref value to construct with. - @param sp A pointer to the @ref memory_resource - to use. The element will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The element will acquire shared ownership of the memory resource. */ explicit key_value_pair( @@ -3989,9 +3985,8 @@ public: @param p A `std::pair` with the key string and @ref value to construct with. - @param sp A pointer to the @ref memory_resource - to use. The element will acquire shared - ownership of the memory resource. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use. The element will acquire shared ownership of the memory resource. */ explicit key_value_pair( diff --git a/include/boost/json/value_ref.hpp b/include/boost/json/value_ref.hpp index e37e34cb..6c521e6e 100644 --- a/include/boost/json/value_ref.hpp +++ b/include/boost/json/value_ref.hpp @@ -44,12 +44,11 @@ class string; @li `std::initializer_list< std::pair< string_view, value_ref > >` for constructing or assigning an @ref object. - A `value_ref` uses reference semantics. Creation - of the actual container from the initializer - list is lazily deferred until the list is used. - This means that the @ref memory_resource used to - construct a container can be specified after the - point where the initializer list is specified. + A `value_ref` uses reference semantics. Creation of the actual container + from the initializer list is lazily deferred until the list is used. This + means that the `boost::container::pmr::memory_resource` used to construct a + container can be specified after the point where the initializer list is + specified. @par Example diff --git a/include/boost/json/value_stack.hpp b/include/boost/json/value_stack.hpp index cdf95393..41c88238 100644 --- a/include/boost/json/value_stack.hpp +++ b/include/boost/json/value_stack.hpp @@ -23,33 +23,27 @@ namespace json { /** A stack of @ref value elements, for building a document. - This stack of @ref value allows iterative - construction of a JSON document in memory. - The implementation uses temporary internal - storage to buffer elements so that arrays, objects, - and strings in the document are constructed using a - single memory allocation. This improves performance - and makes efficient use of the @ref memory_resource + This stack of @ref value allows iterative construction of a JSON document + in memory. The implementation uses temporary internal storage to buffer + elements so that arrays, objects, and strings in the document are + constructed using a single memory allocation. This improves performance + and makes efficient use of the `boost::container::pmr::memory_resource` used to create the resulting @ref value. - Temporary storage used by the implementation - initially comes from an optional memory buffer - owned by the caller. If that storage is exhausted, + Temporary storage used by the implementation initially comes from an + optional memory buffer owned by the caller. If that storage is exhausted, then memory is obtained dynamically from the - @ref memory_resource provided on construction. + `boost::container::pmr::memory_resource` provided on construction. @par Usage - Construct the stack with an optional initial - temporary buffer, and a @ref storage_ptr to use for - more storage when the initial buffer is exhausted. - Then to build a @ref value, first call @ref reset - and optionally specify the @ref memory_resource - which will be used for the value. Then push elements - onto the stack by calling the corresponding functions. - After the document has been fully created, call - @ref release to acquire ownership of the top-level - @ref value. + Construct the stack with an optional initial temporary buffer, and a + @ref storage_ptr to use for more storage when the initial buffer is + exhausted. Then to build a @ref value, first call @ref reset and + optionally specify the `boost::container::pmr::memory_resource` which will + be used for the value. Then push elements onto the stack by calling the + corresponding functions. After the document has been fully created, call + @ref release to acquire ownership of the top-level @ref value. @par Performance @@ -190,10 +184,9 @@ public: intermediate storage; it will not be used for the @ref value returned by @ref release. - @param sp A pointer to the @ref memory_resource - to use for intermediate storage allocations. If - this argument is omitted, the default memory - resource is used. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use for intermediate storage allocations. If this argument is omitted, + the default memory resource is used. @param temp_buffer A pointer to a caller-owned buffer which will be used to store temporary @@ -222,12 +215,10 @@ public: No-throw guarantee. - @param sp A pointer to the @ref memory_resource - to use for top-level @ref value and all child - values. The stack will acquire shared ownership - of the memory resource until @ref release or - @ref reset is called, or when the stack is - destroyed. + @param sp A pointer to the `boost::container::pmr::memory_resource` to + use for top-level @ref value and all child values. The stack will + acquire shared ownership of the memory resource until @ref release or + @ref reset is called, or when the stack is destroyed. */ BOOST_JSON_DECL void diff --git a/test/Jamfile b/test/Jamfile index 20f3e603..57f5889e 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -36,6 +36,7 @@ local SOURCES = parse_into.cpp pilfer.cpp pointer.cpp + result_for.cpp serialize.cpp serializer.cpp snippets.cpp @@ -44,7 +45,6 @@ local SOURCES = stream_parser.cpp string.cpp string_view.cpp - system_error.cpp value.cpp value_from.cpp value_stack.cpp diff --git a/test/basic_parser.cpp b/test/basic_parser.cpp index c698f8a2..043111bc 100644 --- a/test/basic_parser.cpp +++ b/test/basic_parser.cpp @@ -136,7 +136,7 @@ validate( string_view s ) { // Parse with the null parser and return false on error null_parser p; - error_code ec; + system::error_code ec; p.write( s.data(), s.size(), ec ); if( ec ) return false; @@ -199,7 +199,7 @@ public: #define TEST_GRIND_ONE(s, good, po) \ do { \ string_view _test_gr1_s = s; \ - error_code ec; \ + system::error_code ec; \ fail_parser p((po)); \ auto sz = p.write(false, _test_gr1_s.data(), _test_gr1_s.size(), ec); \ if(good) \ @@ -224,7 +224,7 @@ public: { \ for(std::size_t j = 1;;++j) \ { \ - error_code ec; \ + system::error_code ec; \ fail_parser p(j, (po)); \ auto sz = p.write(true, _test_gr_s.data(), i, ec); \ if(ec == error::test_failure) \ @@ -258,7 +258,7 @@ public: { \ for(std::size_t j = 1;;++j) \ { \ - error_code ec; \ + system::error_code ec; \ throw_parser p(j, (po)); \ try \ { \ @@ -705,7 +705,7 @@ public: bool done) { fail_parser p; - error_code ec; + system::error_code ec; p.write_some( true, s.data(), s.size(), @@ -788,7 +788,7 @@ public: // no input { - error_code ec; + system::error_code ec; fail_parser p; p.write(false, nullptr, 0, ec); BOOST_TEST(ec); @@ -800,7 +800,7 @@ public: { fail_parser p; std::size_t n; - error_code ec; + system::error_code ec; n = p.write_some(true, "null", 4, ec ); if(BOOST_TEST(! ec)) { @@ -840,7 +840,7 @@ public: { if(v.result == 'i') { - error_code ec; + system::error_code ec; fail_parser p(po); p.write( false, @@ -962,28 +962,28 @@ public: constexpr static std::size_t max_string_size = std::size_t(-1); std::string captured = ""; - bool on_document_begin( error_code& ) { return true; } - bool on_document_end( error_code& ) { return true; } - bool on_object_begin( error_code& ) { return true; } - bool on_object_end( std::size_t, error_code& ) { return true; } - bool on_array_begin( error_code& ) { return true; } - bool on_array_end( std::size_t, error_code& ) { return true; } - bool on_key_part( string_view, std::size_t, error_code& ) { return true; } - bool on_key( string_view, std::size_t, error_code& ) { return true; } - bool on_string_part( string_view, std::size_t, error_code& ) { return true; } - bool on_string( string_view, std::size_t, error_code& ) { return true; } - bool on_number_part( string_view, error_code&) { return true; } - bool on_int64( std::int64_t, string_view, error_code& ) { return true; } - bool on_uint64( std::uint64_t, string_view, error_code& ) { return true; } - bool on_double( double, string_view, error_code& ) { return true; } - bool on_bool( bool, error_code& ) { return true; } - bool on_null( error_code& ) { return true; } - bool on_comment_part( string_view s, error_code& ) + bool on_document_begin( system::error_code& ) { return true; } + bool on_document_end( system::error_code& ) { return true; } + bool on_object_begin( system::error_code& ) { return true; } + bool on_object_end( std::size_t, system::error_code& ) { return true; } + bool on_array_begin( system::error_code& ) { return true; } + bool on_array_end( std::size_t, system::error_code& ) { return true; } + bool on_key_part( string_view, std::size_t, system::error_code& ) { return true; } + bool on_key( string_view, std::size_t, system::error_code& ) { return true; } + bool on_string_part( string_view, std::size_t, system::error_code& ) { return true; } + bool on_string( string_view, std::size_t, system::error_code& ) { return true; } + bool on_number_part( string_view, system::error_code&) { return true; } + bool on_int64( std::int64_t, string_view, system::error_code& ) { return true; } + bool on_uint64( std::uint64_t, string_view, system::error_code& ) { return true; } + bool on_double( double, string_view, system::error_code& ) { return true; } + bool on_bool( bool, system::error_code& ) { return true; } + bool on_null( system::error_code& ) { return true; } + bool on_comment_part( string_view s, system::error_code& ) { captured.append(s.data(), s.size()); return true; } - bool on_comment( string_view s, error_code& ) + bool on_comment( string_view s, system::error_code& ) { captured.append(s.data(), s.size()); return true; @@ -1002,7 +1002,7 @@ public: write( char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = p_.write_some( false, data, size, ec); @@ -1070,7 +1070,7 @@ public: { // test the handler comment_parser p; - error_code ec; + system::error_code ec; p.write( formatted.data(), formatted.size(), ec ); BOOST_TEST(! ec); BOOST_TEST(p.captured() == just_comments); @@ -1114,7 +1114,7 @@ public: parse_options po; po.allow_comments = true; fail_parser p(po); - error_code ec; + system::error_code ec; p.write(true, "//", 2, ec); // suspend while inside comment BOOST_TEST( !ec.failed() ); p.write(true, " \n1", 2, ec); // input ends comment, @@ -1177,32 +1177,32 @@ public: constexpr static std::size_t max_string_size = std::size_t(-1); std::string captured = ""; - bool on_document_begin( error_code& ) { return true; } - bool on_document_end( error_code& ) { return true; } - bool on_object_begin( error_code& ) { return true; } - bool on_object_end( std::size_t, error_code& ) { return true; } - bool on_array_begin( error_code& ) { return true; } - bool on_array_end( std::size_t, error_code& ) { return true; } - bool on_key_part( string_view, std::size_t, error_code& ) { return true; } - bool on_key( string_view, std::size_t, error_code& ) { return true; } - bool on_string_part( string_view sv, std::size_t, error_code& ) + bool on_document_begin( system::error_code& ) { return true; } + bool on_document_end( system::error_code& ) { return true; } + bool on_object_begin( system::error_code& ) { return true; } + bool on_object_end( std::size_t, system::error_code& ) { return true; } + bool on_array_begin( system::error_code& ) { return true; } + bool on_array_end( std::size_t, system::error_code& ) { return true; } + bool on_key_part( string_view, std::size_t, system::error_code& ) { return true; } + bool on_key( string_view, std::size_t, system::error_code& ) { return true; } + bool on_string_part( string_view sv, std::size_t, system::error_code& ) { captured.append(sv.data(), sv.size()); return true; } - bool on_string( string_view sv, std::size_t, error_code& ) + bool on_string( string_view sv, std::size_t, system::error_code& ) { captured.append(sv.data(), sv.size()); return true; } - bool on_number_part( string_view, error_code&) { return true; } - bool on_int64( std::int64_t, string_view, error_code& ) { return true; } - bool on_uint64( std::uint64_t, string_view, error_code& ) { return true; } - bool on_double( double, string_view, error_code& ) { return true; } - bool on_bool( bool, error_code& ) { return true; } - bool on_null( error_code& ) { return true; } - bool on_comment_part( string_view, error_code& ) { return true; } - bool on_comment( string_view, error_code& ) { return true; } + bool on_number_part( string_view, system::error_code&) { return true; } + bool on_int64( std::int64_t, string_view, system::error_code& ) { return true; } + bool on_uint64( std::uint64_t, string_view, system::error_code& ) { return true; } + bool on_double( double, string_view, system::error_code& ) { return true; } + bool on_bool( bool, system::error_code& ) { return true; } + bool on_null( system::error_code& ) { return true; } + bool on_comment_part( string_view, system::error_code& ) { return true; } + bool on_comment( string_view, system::error_code& ) { return true; } }; basic_parser p_; @@ -1218,7 +1218,7 @@ public: bool more, char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = p_.write_some( more, data, size, ec); @@ -1407,7 +1407,7 @@ public: utf8_parser p; for(std::size_t i = 0; i < expected.size(); i += write_size) { - error_code ec; + system::error_code ec; write_size = (std::min)(write_size, expected.size() - i); auto more = (i < expected.size() - write_size); auto written = p.write(more, @@ -1433,7 +1433,7 @@ public: parse_options opt; opt.max_depth = 4; null_parser p(opt); - error_code ec; + system::error_code ec; p.write(s.data(), s.size(), ec); BOOST_TEST(ec == error::too_deep); BOOST_TEST(ec.has_location()); @@ -1443,7 +1443,7 @@ public: parse_options opt; opt.max_depth = 4; null_parser p(opt); - error_code ec; + system::error_code ec; p.write(s.data(), s.size(), ec); BOOST_TEST(ec == error::too_deep); BOOST_TEST(ec.has_location()); @@ -1454,7 +1454,7 @@ public: parse_options opt; opt.max_depth = 4; null_parser p(opt); - error_code ec; + system::error_code ec; p.write(s.data(), s.size(), ec); BOOST_TEST(ec == error::too_deep); BOOST_TEST(ec.has_location()); @@ -1465,7 +1465,7 @@ public: parse_options opt; opt.max_depth = 4; null_parser p(opt); - error_code ec; + system::error_code ec; p.write(s.data(), s.size(), ec); BOOST_TEST(ec == error::too_deep); BOOST_TEST(ec.has_location()); @@ -1482,43 +1482,43 @@ public: constexpr static std::size_t max_string_size = std::size_t(-1); std::string captured = ""; - bool on_document_begin( error_code& ) { return true; } - bool on_document_end( error_code& ) { return true; } - bool on_object_begin( error_code& ) { return true; } - bool on_object_end( std::size_t, error_code& ) { return true; } - bool on_array_begin( error_code& ) { return true; } - bool on_array_end( std::size_t, error_code& ) { return true; } - bool on_key_part( string_view, std::size_t, error_code& ) { return true; } - bool on_key( string_view, std::size_t, error_code& ) { return true; } - bool on_string_part( string_view, std::size_t, error_code& ) { return true; } - bool on_string( string_view, std::size_t, error_code& ) { return true; } - bool on_number_part( string_view sv, error_code&) + bool on_document_begin( system::error_code& ) { return true; } + bool on_document_end( system::error_code& ) { return true; } + bool on_object_begin( system::error_code& ) { return true; } + bool on_object_end( std::size_t, system::error_code& ) { return true; } + bool on_array_begin( system::error_code& ) { return true; } + bool on_array_end( std::size_t, system::error_code& ) { return true; } + bool on_key_part( string_view, std::size_t, system::error_code& ) { return true; } + bool on_key( string_view, std::size_t, system::error_code& ) { return true; } + bool on_string_part( string_view, std::size_t, system::error_code& ) { return true; } + bool on_string( string_view, std::size_t, system::error_code& ) { return true; } + bool on_number_part( string_view sv, system::error_code&) { captured.append(sv.data(), sv.size()); return true; } - bool on_int64( std::int64_t, string_view sv, error_code& ) + bool on_int64( std::int64_t, string_view sv, system::error_code& ) { captured.append(sv.data(), sv.size()); captured += 's'; return true; } - bool on_uint64( std::uint64_t, string_view sv, error_code& ) + bool on_uint64( std::uint64_t, string_view sv, system::error_code& ) { captured.append(sv.data(), sv.size()); captured += 'u'; return true; } - bool on_double( double, string_view sv, error_code& ) + bool on_double( double, string_view sv, system::error_code& ) { captured.append(sv.data(), sv.size()); captured += 'd'; return true; } - bool on_bool( bool, error_code& ) { return true; } - bool on_null( error_code& ) { return true; } - bool on_comment_part( string_view, error_code& ) { return true; } - bool on_comment( string_view, error_code& ) { return true; } + bool on_bool( bool, system::error_code& ) { return true; } + bool on_null( system::error_code& ) { return true; } + bool on_comment_part( string_view, system::error_code& ) { return true; } + bool on_comment( string_view, system::error_code& ) { return true; } }; basic_parser p_; @@ -1534,7 +1534,7 @@ public: bool more, char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = p_.write_some( more, data, size, ec); @@ -1562,7 +1562,7 @@ public: i < sv.size(); ++i) { literal_parser p; - error_code ec; + system::error_code ec; if(i != 0) { p.write(true, @@ -1606,10 +1606,10 @@ public: { { null_parser p; - error_code ec; + system::error_code ec; p.write("*", 1, ec); BOOST_TEST(ec); - error_code ec2; + system::error_code ec2; p.write("[]", 2, ec2); BOOST_TEST(ec2 == ec); p.reset(); @@ -1622,13 +1622,13 @@ public: throw_parser p(1); try { - error_code ec; + system::error_code ec; p.write(false, "null", 4, ec); BOOST_TEST_FAIL(); } catch(std::exception const&) { - error_code ec; + system::error_code ec; p.write(false, "null", 4, ec); BOOST_TEST(ec == error::exception); BOOST_TEST(ec.has_location()); diff --git a/test/checking_resource.hpp b/test/checking_resource.hpp index 2b3f95a0..e4422ccb 100644 --- a/test/checking_resource.hpp +++ b/test/checking_resource.hpp @@ -19,7 +19,7 @@ namespace boost { namespace json { class checking_resource - : public memory_resource + : public container::pmr::memory_resource { storage_ptr upstream_; std::map> allocs_; diff --git a/test/doc_background.cpp b/test/doc_background.cpp index b33370c1..1bbba7a1 100644 --- a/test/doc_background.cpp +++ b/test/doc_background.cpp @@ -98,7 +98,7 @@ namespace std { namespace pmr { template< class T > -using vector = std::vector< T, polymorphic_allocator< T > >; +using vector = std::vector< T, boost::container::pmr::polymorphic_allocator< T > >; } // namespace pmr } // namespace std @@ -118,7 +118,7 @@ struct T {}; monotonic_resource mr; // Construct a vector using the monotonic buffer resource -vector< T > v1(( polymorphic_allocator< T >(&mr) )); +vector< T > v1(( boost::container::pmr::polymorphic_allocator< T >(&mr) )); // Or this way, since construction from memory_resource* is implicit: vector< T > v2( &mr ); @@ -145,7 +145,7 @@ vector< T > v2( &mr ); //---------------------------------------------------------- -struct my_resource : memory_resource +struct my_resource : container::pmr::memory_resource { void* do_allocate ( size_t, size_t ) override { return 0; } void do_deallocate( void*, size_t, size_t ) override {} diff --git a/test/doc_parsing.cpp b/test/doc_parsing.cpp index 9cdaf11e..bd121d1a 100644 --- a/test/doc_parsing.cpp +++ b/test/doc_parsing.cpp @@ -35,7 +35,7 @@ value jv = parse( "[1,2,3,4,5]" ); //---------------------------------------------------------- { //[doc_parsing_2 -error_code ec; +boost::system::error_code ec; value jv = parse( "[1,2,3,4,5]", ec ); if( ec ) std::cout << "Parsing failed: " << ec.message() << "\n"; @@ -46,7 +46,7 @@ if( ec ) //[doc_parsing_3 try { - error_code ec; + boost::system::error_code ec; value jv = parse( "[1,2,3,4,5]", ec ); if( ec ) std::cout << "Parsing failed: " << ec.message() << "\n"; @@ -121,7 +121,7 @@ static void set2() { { //[doc_parsing_8 stream_parser p; -error_code ec; +boost::system::error_code ec; string_view s = "[1,2,3] %HOME%"; std::size_t n = p.write_some( s, ec ); assert( ! ec && p.done() && n == 8 ); @@ -146,7 +146,7 @@ stream_parser p( storage_ptr(), opt ); // The stream_parser will us //---------------------------------------------------------- //[doc_parsing_10 -value read_json( std::istream& is, error_code& ec ) +value read_json( std::istream& is, boost::system::error_code& ec ) { stream_parser p; std::string line; @@ -164,7 +164,7 @@ value read_json( std::istream& is, error_code& ec ) //] //[doc_parsing_14 -std::vector read_jsons( std::istream& is, error_code& ec ) +std::vector read_jsons( std::istream& is, boost::system::error_code& ec ) { std::vector< value > jvs; stream_parser p; @@ -303,7 +303,7 @@ public: "l12345\n" "6\"!\n" "\"[2]3" ); - error_code ec; + system::error_code ec; auto jvs = read_jsons( ss, ec ); assert( !ec.failed() ); assert( jvs.size() == 6 ); diff --git a/test/doc_quick_look.cpp b/test/doc_quick_look.cpp index dec4188b..d4859adf 100644 --- a/test/doc_quick_look.cpp +++ b/test/doc_quick_look.cpp @@ -134,7 +134,7 @@ value jv = parse( "[1, 2, 3]" ); //---------------------------------------------------------- { //[doc_quick_look_9 -error_code ec; +boost::system::error_code ec; value jv = parse( R"( "Hello, world!" )", ec ); //] } @@ -153,7 +153,7 @@ value jv = parse( "[1, 2, 3, ] // array ", &mr, opt ); { //[doc_quick_look_11 stream_parser p; -error_code ec; +boost::system::error_code ec; p.reset(); p.write( "[1, 2 ", ec ); if( ! ec ) diff --git a/test/doc_storage_ptr.cpp b/test/doc_storage_ptr.cpp index 639e33dc..8d9fb16e 100644 --- a/test/doc_storage_ptr.cpp +++ b/test/doc_storage_ptr.cpp @@ -131,7 +131,7 @@ assert( str.storage().is_shared() ); // shared ownership //---------------------------------------------------------- //[doc_storage_ptr_10 -class logging_resource : public memory_resource +class logging_resource : public boost::container::pmr::memory_resource { private: void* do_allocate( std::size_t bytes, std::size_t align ) override diff --git a/test/doc_uses_allocator.cpp b/test/doc_uses_allocator.cpp index dfde03d5..9001368a 100644 --- a/test/doc_uses_allocator.cpp +++ b/test/doc_uses_allocator.cpp @@ -7,6 +7,7 @@ // Official repository: https://github.com/boostorg/json // +#include #include #include #include @@ -28,7 +29,7 @@ static void set1() { monotonic_resource mr; // Declare a vector of JSON values -std::vector< value, polymorphic_allocator< value > > v( &mr ); +std::vector< value, boost::container::pmr::polymorphic_allocator< value > > v( &mr ); // The polymorphic allocator will use our resource assert( v.get_allocator().resource() == &mr ); @@ -44,7 +45,7 @@ assert( v[0].storage().get() == &mr ); { //[doc_uses_allocator_2 // This vector will use the default memory resource -std::vector< value, polymorphic_allocator < value > > v; +std::vector< value, boost::container::pmr::polymorphic_allocator < value > > v; // This value will same memory resource as the vector value jv( v.get_allocator() ); diff --git a/test/doc_using_numbers.cpp b/test/doc_using_numbers.cpp index f8601b9c..09dd681e 100644 --- a/test/doc_using_numbers.cpp +++ b/test/doc_using_numbers.cpp @@ -124,7 +124,7 @@ catch(...) value jv = 10.5; -error_code ec; +boost::system::error_code ec; // ok, conversion is exact float r1 = jv.to_number< float >( ec ); diff --git a/test/double.cpp b/test/double.cpp index 7f99f068..2e338f53 100644 --- a/test/double.cpp +++ b/test/double.cpp @@ -53,7 +53,7 @@ public: operator()(string_view s, parse_options const& po = {}) const { BOOST_TEST_CHECKPOINT(); - error_code ec; + system::error_code ec; stream_parser p({}, po); p.write(s.data(), s.size(), ec); if(BOOST_TEST(! ec)) @@ -95,7 +95,7 @@ public: const parse_options& po = parse_options()) { stream_parser p(storage_ptr(), po); - error_code ec; + system::error_code ec; p.reset(std::move(sp)); p.write(s.data(), s.size(), ec); if(BOOST_TEST(! ec)) @@ -165,7 +165,7 @@ public: fail_resource mr; mr.fail_max = 0; stream_parser p(storage_ptr(), po); - error_code ec; + system::error_code ec; p.reset(&mr); p.write(s.data(), i, ec); if(BOOST_TEST(! ec)) diff --git a/test/limits.cpp b/test/limits.cpp index eab3e6a0..44e22a9d 100644 --- a/test/limits.cpp +++ b/test/limits.cpp @@ -214,7 +214,7 @@ public: string::max_size() + 1, '*'); auto const js = "\"" + big + "\":null"; - error_code ec; + system::error_code ec; auto jv = parse(js, ec); BOOST_TEST(ec == error::string_too_large); BOOST_TEST(ec.has_location()); @@ -227,7 +227,7 @@ public: string::max_size() + 1, '*'); auto const js = "{\"" + big + "\":null}"; - error_code ec; + system::error_code ec; auto jv = parse(js, ec); BOOST_TEST(ec == error::key_too_large); BOOST_TEST(ec.has_location()); @@ -260,13 +260,13 @@ public: "\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n" "\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n" "\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\""; - error_code ec; + system::error_code ec; auto jv = parse(s, ec); BOOST_TEST(! ec); } // overflow in on_key_part { - error_code ec; + system::error_code ec; std::string big; big = "\\b"; big += std::string( @@ -280,7 +280,7 @@ public: // overflow in on_key { - error_code ec; + system::error_code ec; std::string big; big = "\\b"; big += std::string( @@ -294,7 +294,7 @@ public: // overflow in on_string_part { - error_code ec; + system::error_code ec; std::string big; big = "\\b"; big += std::string( @@ -308,7 +308,7 @@ public: // overflow in on_string { - error_code ec; + system::error_code ec; std::string big; big = "\\b"; big += std::string( @@ -323,7 +323,7 @@ public: // object overflow { - error_code ec; + system::error_code ec; string_view s = R"({ "00":0,"01":0,"02":0,"03":0,"04":0,"05":0,"06":0,"07":0,"08":0,"09":0, "10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0, @@ -337,7 +337,7 @@ public: // array overflow { - error_code ec; + system::error_code ec; string_view s = "[" "0,0,0,0,0,0,0,0,0,0," "0,0,0,0,0,0,0,0,0,0," @@ -361,7 +361,7 @@ public: precise.numbers = number_precision::precise; stream_parser p( {}, precise ); - error_code ec; + system::error_code ec; p.write( buffer.data(), 1, ec ); BOOST_TEST_THROWS_WITH_LOCATION( p.write( buffer.data() + 1, buffer.size() - 1, ec )); diff --git a/test/memory_resource.cpp b/test/memory_resource.cpp index 7cc01112..2519ec36 100644 --- a/test/memory_resource.cpp +++ b/test/memory_resource.cpp @@ -7,8 +7,6 @@ // Official repository: https://github.com/boostorg/json // -// Test that header file is self-contained. -#include #include #include #include @@ -25,8 +23,7 @@ public: void testBoostPmr() { - using allocator_type = - polymorphic_allocator; + using allocator_type = container::pmr::polymorphic_allocator; // pass polymorphic_allocator // where storage_ptr is expected diff --git a/test/no_exceptions.cpp b/test/no_exceptions.cpp index f13598ea..3d4d51d6 100644 --- a/test/no_exceptions.cpp +++ b/test/no_exceptions.cpp @@ -30,7 +30,7 @@ public: void run() { - error_code ec; + system::error_code ec; value jv = parse(" 1 ", ec); BOOST_TEST( !ec.failed() ); BOOST_TEST( jv == 1 ); diff --git a/test/parse.cpp b/test/parse.cpp index c62fe38e..a0779e8c 100644 --- a/test/parse.cpp +++ b/test/parse.cpp @@ -29,7 +29,7 @@ public: return true; } - bool hasLocation(error_code const& ec) + bool hasLocation(system::error_code const& ec) { return ec.has_location(); } @@ -71,14 +71,14 @@ public: void good(string_view s) { - good_impl(s); + good_impl(s); good_impl(s); } void bad(string_view s) { - bad_impl(s); + bad_impl(s); bad_impl(s); } diff --git a/test/parse_into.cpp b/test/parse_into.cpp index d2156e39..c9258bb5 100644 --- a/test/parse_into.cpp +++ b/test/parse_into.cpp @@ -71,7 +71,7 @@ public: std::string json = serialize( value_from( t1 ) ); T t2{}; - error_code jec; + system::error_code jec; parse_into(t2, json, jec); BOOST_TEST( !jec.failed() ) && BOOST_TEST( t1 == t2 ); @@ -131,7 +131,7 @@ public: # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wmissing-field-initializers" #endif - error_code ec; + system::error_code ec; T t{}; std::string json = serialize(sample); parser_for p( parse_options{}, &t ); @@ -196,7 +196,7 @@ public: double d1 = 12; std::string json = serialize( value_from( 12 ) ); - error_code ec; + system::error_code ec; double d2; parse_into(d2, json, ec); BOOST_TEST( !ec.failed() ); @@ -456,7 +456,7 @@ public: { int n; - error_code ec; + system::error_code ec; parse_into( n, "12 1", ec); BOOST_TEST( ec == error::extra_data ); BOOST_TEST( ec.has_location() ); @@ -465,7 +465,7 @@ public: { std::stringstream is("12 1"); int n; - error_code ec; + system::error_code ec; parse_into( n, is, ec); BOOST_TEST( ec == error::extra_data ); BOOST_TEST( ec.has_location() ); @@ -475,7 +475,7 @@ public: int n; std::stringstream is("1"); is.setstate( std::ios::failbit ); - error_code ec; + system::error_code ec; parse_into(n, is, ec); BOOST_TEST( ec == error::input_error ); BOOST_TEST( ec.has_location() ); diff --git a/test/parser.cpp b/test/parser.cpp index 5ee3d9fc..d3e79bc2 100644 --- a/test/parser.cpp +++ b/test/parser.cpp @@ -25,7 +25,7 @@ public: } bool - hasLocation(error_code const& ec) + hasLocation(system::error_code const& ec) { return ec.has_location(); } @@ -370,7 +370,7 @@ public: run() { testCtors(); - testMembers(); + testMembers(); testMembers(); } }; diff --git a/test/pointer.cpp b/test/pointer.cpp index 2b205590..55a2d398 100644 --- a/test/pointer.cpp +++ b/test/pointer.cpp @@ -17,7 +17,7 @@ namespace json { class pointer_test { bool - hasLocation(error_code const& ec) + hasLocation(system::error_code const& ec) { return ec.has_location(); } @@ -354,10 +354,10 @@ public: testEscaped(); testNested(); testErrors(); - testNonThrowing(); + testNonThrowing(); testNonThrowing(); testSet(); - testSetNonThrowing(); + testSetNonThrowing(); testSetNonThrowing(); } }; diff --git a/test/system_error.cpp b/test/result_for.cpp similarity index 86% rename from test/system_error.cpp rename to test/result_for.cpp index 9e440b7e..885e35e5 100644 --- a/test/system_error.cpp +++ b/test/result_for.cpp @@ -8,9 +8,9 @@ // // Test that header file is self-contained. -#include +#include // Test that header file is properly guarder -#include +#include #include @@ -19,7 +19,7 @@ namespace boost { namespace json { -class system_error_test +class result_for_test { public: void @@ -37,7 +37,7 @@ public: } }; -TEST_SUITE(system_error_test, "boost.json.system_error"); +TEST_SUITE(result_for_test, "boost.json.result_for"); } // namespace json } // namespace boost diff --git a/test/serializer.cpp b/test/serializer.cpp index 034b7519..25b5e57e 100644 --- a/test/serializer.cpp +++ b/test/serializer.cpp @@ -54,7 +54,7 @@ public: string_view name = {}) { { - error_code ec; + system::error_code ec; auto const s1 = serialize(jv); auto const jv2 = parse(s1, ec); if(! BOOST_TEST(equal(jv, jv2))) @@ -74,7 +74,7 @@ public: // large buffer { - error_code ec; + system::error_code ec; serializer sr; sr.reset(&jv); string js; @@ -563,7 +563,7 @@ public: "[1,2,3,4,5]" }) { - error_code ec; + system::error_code ec; auto const jv1 = parse(js, ec); if(! BOOST_TEST(! ec)) return; diff --git a/test/snippets.cpp b/test/snippets.cpp index 5e78c9e0..3bc0752a 100644 --- a/test/snippets.cpp +++ b/test/snippets.cpp @@ -88,19 +88,23 @@ tag_invoke( const try_value_to_tag< ip_address >&, value const& jv ) if( arr.size() != 4 ) return make_error_code( std::errc::invalid_argument ); - result< unsigned char > oct1 = try_value_to< unsigned char >( arr[0] ); + boost::system::result< unsigned char > oct1 + = try_value_to< unsigned char >( arr[0] ); if( !oct1 ) return make_error_code( std::errc::invalid_argument ); - result< unsigned char > oct2 = try_value_to< unsigned char >( arr[1] ); + boost::system::result< unsigned char > oct2 + = try_value_to< unsigned char >( arr[1] ); if( !oct2 ) return make_error_code( std::errc::invalid_argument ); - result< unsigned char > oct3 = try_value_to< unsigned char >( arr[2] ); + boost::system::result< unsigned char > oct3 + = try_value_to< unsigned char >( arr[2] ); if( !oct3 ) return make_error_code( std::errc::invalid_argument ); - result< unsigned char > oct4 = try_value_to< unsigned char >( arr[3] ); + boost::system::result< unsigned char > oct4 + = try_value_to< unsigned char >( arr[3] ); if( !oct4 ) return make_error_code( std::errc::invalid_argument ); @@ -849,7 +853,8 @@ usingExchange() //[snippet_nothrow_2 value jv = parse( R"([127,0,0,12])" ); - result< ip_address > addr = try_value_to< ip_address >( jv ); + boost::system::result< ip_address > addr + = try_value_to< ip_address >( jv ); assert( addr.has_value() ); ip_address addr2{ 127, 0, 0, 12 }; @@ -927,7 +932,7 @@ usingPointer() value* elem2 = [&]() -> value* { //[snippet_pointer_3 - error_code ec; + boost::system::error_code ec; return jv.find_pointer("/one/foo/1", ec); //] }(); diff --git a/test/storage_ptr.cpp b/test/storage_ptr.cpp index 055c7f3e..125e4285 100644 --- a/test/storage_ptr.cpp +++ b/test/storage_ptr.cpp @@ -35,7 +35,7 @@ public: static value jv2; struct throwing - : memory_resource + : container::pmr::memory_resource { throwing() { @@ -154,7 +154,7 @@ public: struct my_resource : other - , memory_resource + , container::pmr::memory_resource { void* do_allocate( diff --git a/test/stream_parser.cpp b/test/stream_parser.cpp index aeea177d..42a95fdc 100644 --- a/test/stream_parser.cpp +++ b/test/stream_parser.cpp @@ -140,14 +140,14 @@ public: void testMembers() { - // write_some(char const*, size_t, error_code&) + // write_some(char const*, size_t, system::error_code&) // write_some(char const*, size_t, std::error_code&) - // write_some(string_view, error_code&) + // write_some(string_view, system::error_code&) // write_some(string_view, std::error_code&) { { stream_parser p; - error_code ec; + system::error_code ec; BOOST_TEST(p.write_some( "[]*", ec) == 2); BOOST_TEST(! ec); @@ -161,7 +161,7 @@ public: } { stream_parser p; - error_code ec; + system::error_code ec; BOOST_TEST(p.write_some( "[*", ec) == 1); BOOST_TEST(ec); @@ -189,14 +189,14 @@ public: } } - // write(char const*, size_t, error_code&) + // write(char const*, size_t, system::error_code&) // write(char const*, size_t, std::error_code&) - // write(string_view, error_code&) + // write(string_view, system::error_code&) // write(string_view, std::error_code&) { { stream_parser p; - error_code ec; + system::error_code ec; BOOST_TEST(p.write( "null", ec) == 4); BOOST_TEST(! ec); @@ -210,7 +210,7 @@ public: } { stream_parser p; - error_code ec; + system::error_code ec; p.write("[]*", ec), BOOST_TEST( ec == error::extra_data); @@ -258,7 +258,7 @@ public: { stream_parser p; p.write("[1,2"); - error_code ec; + system::error_code ec; p.finish(ec); BOOST_TEST( ec == error::incomplete); @@ -267,7 +267,7 @@ public: { stream_parser p; p.write("[1,2"); - error_code ec; + system::error_code ec; p.finish(ec); BOOST_TEST_THROWS_WITH_LOCATION( p.finish() ); } @@ -311,7 +311,7 @@ public: } { stream_parser p; - error_code ec; + system::error_code ec; p.write("[]*", ec); BOOST_TEST( ec == error::extra_data); @@ -332,7 +332,7 @@ public: const parse_options& po = parse_options()) { stream_parser p(storage_ptr(), po); - error_code ec; + system::error_code ec; p.reset(std::move(sp)); p.write(s.data(), s.size(), ec); if(BOOST_TEST(! ec)) @@ -402,7 +402,7 @@ public: fail_resource mr; mr.fail_max = 0; stream_parser p(storage_ptr(), po); - error_code ec; + system::error_code ec; p.reset(&mr); p.write(s.data(), i, ec); if(BOOST_TEST(! ec)) @@ -562,7 +562,7 @@ public: std::string js; js = "\"" + big + "\""; auto const N = js.size() / 2; - error_code ec; + system::error_code ec; stream_parser p; p.write(js.data(), N, ec); if(BOOST_TEST(! ec)) @@ -594,7 +594,7 @@ public: operator()(string_view s) const { BOOST_TEST_CHECKPOINT(); - error_code ec; + system::error_code ec; stream_parser p; p.write(s.data(), s.size(), ec); if(BOOST_TEST(! ec)) @@ -890,7 +890,7 @@ public: // depth { - error_code ec; + system::error_code ec; parse_options opt; opt.max_depth = 0; stream_parser p(storage_ptr(), opt); @@ -957,7 +957,7 @@ public: // depth { - error_code ec; + system::error_code ec; parse_options opt; opt.max_depth = 0; stream_parser p(storage_ptr(), opt); @@ -977,16 +977,16 @@ public: "{\"1\":{},\"2\":[],\"3\":\"x\",\"4\":1," "\"5\":-1,\"6\":1.0,\"7\":false,\"8\":null}"; - // parse(string_view, error_code) + // parse(string_view, system::error_code) { { - error_code ec; + system::error_code ec; auto jv = parse(js, ec); BOOST_TEST(! ec); check_round_trip(jv); } { - error_code ec; + system::error_code ec; auto jv = parse("xxx", ec); BOOST_TEST(ec); BOOST_TEST(ec.has_location()); @@ -994,10 +994,10 @@ public: } } - // parse(string_view, storage_ptr, error_code) + // parse(string_view, storage_ptr, system::error_code) { { - error_code ec; + system::error_code ec; monotonic_resource mr; auto jv = parse(js, ec, &mr); BOOST_TEST(! ec); @@ -1005,7 +1005,7 @@ public: } { - error_code ec; + system::error_code ec; monotonic_resource mr; auto jv = parse("xxx", ec, &mr); BOOST_TEST(ec); @@ -1079,7 +1079,7 @@ R"xx({ storage_ptr sp = make_shared_resource(); stream_parser p(sp); - error_code ec; + system::error_code ec; p.write(in.data(), in.size(), ec); if(BOOST_TEST(! ec)) p.finish(ec); @@ -1310,7 +1310,7 @@ R"xx({ while( static_cast( INT_MAX - zeroes.size() ) > count ) count += p.write( zeroes.data(), zeroes.size() ); - error_code ec; + system::error_code ec; p.write(zeroes.data(), zeroes.size(), ec); BOOST_TEST( ec == error::exponent_overflow ); } @@ -1323,7 +1323,7 @@ R"xx({ while( static_cast( INT_MAX - zeroes.size() ) > count ) count += p.write( zeroes.data(), zeroes.size() ); - error_code ec; + system::error_code ec; p.write(zeroes.data(), zeroes.size(), ec); BOOST_TEST( ec == error::exponent_overflow ); } @@ -1344,7 +1344,7 @@ R"xx({ std::string const int_min = std::to_string(INT_MIN); p.write( int_min.data(), int_min.size() ); - error_code ec; + system::error_code ec; p.finish(ec); BOOST_TEST( ec == error::exponent_overflow ); } @@ -1366,7 +1366,7 @@ R"xx({ std::string const int_max = std::to_string(INT_MAX); p.write( int_max.data(), int_max.size() ); - error_code ec; + system::error_code ec; p.finish(ec); BOOST_TEST( ec == error::exponent_overflow ); } diff --git a/test/test.hpp b/test/test.hpp index cd1f58f2..6c1bdb5c 100644 --- a/test/test.hpp +++ b/test/test.hpp @@ -40,7 +40,7 @@ struct test_failure : std::exception }; struct fail_resource - : memory_resource + : container::pmr::memory_resource { std::size_t fail_max = 0; std::size_t fail = 0; @@ -113,7 +113,7 @@ fail_loop(F&& f) //---------------------------------------------------------- struct unique_resource - : memory_resource + : container::pmr::memory_resource { unique_resource() = default; @@ -155,24 +155,24 @@ class null_parser constexpr static std::size_t max_key_size = std::size_t(-1); constexpr static std::size_t max_string_size = std::size_t(-1); - bool on_document_begin( error_code& ) { return true; } - bool on_document_end( error_code& ) { return true; } - bool on_object_begin( error_code& ) { return true; } - bool on_object_end( std::size_t, error_code& ) { return true; } - bool on_array_begin( error_code& ) { return true; } - bool on_array_end( std::size_t, error_code& ) { return true; } - bool on_key_part( string_view, std::size_t, error_code& ) { return true; } - bool on_key( string_view, std::size_t, error_code& ) { return true; } - bool on_string_part( string_view, std::size_t, error_code& ) { return true; } - bool on_string( string_view, std::size_t, error_code& ) { return true; } - bool on_number_part( string_view, error_code&) { return true; } - bool on_int64( std::int64_t, string_view, error_code& ) { return true; } - bool on_uint64( std::uint64_t, string_view, error_code& ) { return true; } - bool on_double( double, string_view, error_code& ) { return true; } - bool on_bool( bool, error_code& ) { return true; } - bool on_null( error_code& ) { return true; } - bool on_comment_part( string_view, error_code& ) { return true; } - bool on_comment( string_view, error_code& ) { return true; } + bool on_document_begin( system::error_code& ) { return true; } + bool on_document_end( system::error_code& ) { return true; } + bool on_object_begin( system::error_code& ) { return true; } + bool on_object_end( std::size_t, system::error_code& ) { return true; } + bool on_array_begin( system::error_code& ) { return true; } + bool on_array_end( std::size_t, system::error_code& ) { return true; } + bool on_key_part( string_view, std::size_t, system::error_code& ) { return true; } + bool on_key( string_view, std::size_t, system::error_code& ) { return true; } + bool on_string_part( string_view, std::size_t, system::error_code& ) { return true; } + bool on_string( string_view, std::size_t, system::error_code& ) { return true; } + bool on_number_part( string_view, system::error_code&) { return true; } + bool on_int64( std::int64_t, string_view, system::error_code& ) { return true; } + bool on_uint64( std::uint64_t, string_view, system::error_code& ) { return true; } + bool on_double( double, string_view, system::error_code& ) { return true; } + bool on_bool( bool, system::error_code& ) { return true; } + bool on_null( system::error_code& ) { return true; } + bool on_comment_part( string_view, system::error_code& ) { return true; } + bool on_comment( string_view, system::error_code& ) { return true; } }; basic_parser p_; @@ -199,7 +199,7 @@ public: write( char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = p_.write_some( false, data, size, ec); @@ -228,7 +228,7 @@ class fail_parser } bool - maybe_fail(error_code& ec) + maybe_fail(system::error_code& ec) { if(n && --n > 0) return true; @@ -238,21 +238,21 @@ class fail_parser bool on_document_begin( - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } bool on_document_end( - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } bool on_object_begin( - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -260,14 +260,14 @@ class fail_parser bool on_object_end( std::size_t, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } bool on_array_begin( - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -275,7 +275,7 @@ class fail_parser bool on_array_end( std::size_t, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -284,7 +284,7 @@ class fail_parser on_key_part( string_view, std::size_t, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -293,7 +293,7 @@ class fail_parser on_key( string_view, std::size_t, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -302,7 +302,7 @@ class fail_parser on_string_part( string_view, std::size_t, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -311,7 +311,7 @@ class fail_parser on_string( string_view, std::size_t, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -319,7 +319,7 @@ class fail_parser bool on_number_part( string_view, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -328,7 +328,7 @@ class fail_parser on_int64( int64_t, string_view, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -337,7 +337,7 @@ class fail_parser on_uint64( uint64_t, string_view, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -346,7 +346,7 @@ class fail_parser on_double( double, string_view, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -354,13 +354,13 @@ class fail_parser bool on_bool( bool, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } bool - on_null(error_code& ec) + on_null(system::error_code& ec) { return maybe_fail(ec); } @@ -368,7 +368,7 @@ class fail_parser bool on_comment_part( string_view, - error_code& ec) + system::error_code& ec) { return maybe_fail(ec); } @@ -376,53 +376,53 @@ class fail_parser bool on_comment( string_view, - error_code& ec) + system::error_code& ec) + { + return maybe_fail(ec); + } + }; + + basic_parser p_; + + public: + fail_parser() + : p_(parse_options()) { - return maybe_fail(ec); } - }; - basic_parser p_; + explicit + fail_parser( + std::size_t n, + parse_options po = parse_options()) + : p_(po) + { + p_.handler().n = n; + } -public: - fail_parser() - : p_(parse_options()) - { - } + explicit + fail_parser(parse_options po) + : p_(po) + { + } - explicit - fail_parser( - std::size_t n, - parse_options po = parse_options()) - : p_(po) - { - p_.handler().n = n; - } + void + reset() + { + p_.reset(); + } - explicit - fail_parser(parse_options po) - : p_(po) - { - } + bool + done() const noexcept + { + return p_.done(); + } - void - reset() - { - p_.reset(); - } - - bool - done() const noexcept - { - return p_.done(); - } - - std::size_t - write_some( - bool more, - char const* data, - std::size_t size, - error_code& ec) + std::size_t + write_some( + bool more, + char const* data, + std::size_t size, + system::error_code& ec) { return p_.write_some( more, data, size, ec); @@ -433,7 +433,7 @@ public: bool more, char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = p_.write_some( more, data, size, ec); @@ -482,21 +482,21 @@ class throw_parser bool on_document_begin( - error_code&) + system::error_code&) { return maybe_throw(); } bool on_document_end( - error_code&) + system::error_code&) { return maybe_throw(); } bool on_object_begin( - error_code&) + system::error_code&) { return maybe_throw(); } @@ -504,14 +504,14 @@ class throw_parser bool on_object_end( std::size_t, - error_code&) + system::error_code&) { return maybe_throw(); } bool on_array_begin( - error_code&) + system::error_code&) { return maybe_throw(); } @@ -519,7 +519,7 @@ class throw_parser bool on_array_end( std::size_t, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -528,7 +528,7 @@ class throw_parser on_key_part( string_view, std::size_t, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -537,7 +537,7 @@ class throw_parser on_key( string_view, std::size_t, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -546,7 +546,7 @@ class throw_parser on_string_part( string_view, std::size_t, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -555,7 +555,7 @@ class throw_parser on_string( string_view, std::size_t, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -563,7 +563,7 @@ class throw_parser bool on_number_part( string_view, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -572,7 +572,7 @@ class throw_parser on_int64( int64_t, string_view, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -581,7 +581,7 @@ class throw_parser on_uint64( uint64_t, string_view, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -590,7 +590,7 @@ class throw_parser on_double( double, string_view, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -598,13 +598,13 @@ class throw_parser bool on_bool( bool, - error_code&) + system::error_code&) { return maybe_throw(); } bool - on_null(error_code&) + on_null(system::error_code&) { return maybe_throw(); } @@ -612,7 +612,7 @@ class throw_parser bool on_comment_part( string_view, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -620,7 +620,7 @@ class throw_parser bool on_comment( string_view, - error_code&) + system::error_code&) { return maybe_throw(); } @@ -660,7 +660,7 @@ public: bool more, char const* data, std::size_t size, - error_code& ec) + system::error_code& ec) { auto const n = p_.write_some( more, data, size, ec); diff --git a/test/test_suite.hpp b/test/test_suite.hpp index c6c0375a..58a72861 100644 --- a/test/test_suite.hpp +++ b/test/test_suite.hpp @@ -11,6 +11,7 @@ #define TEST_SUITE_HPP #include +#include #include #include @@ -682,7 +683,7 @@ using log_type = detail::log_ostream; "system_error", __FILE__, __LINE__, \ TEST_SUITE_FUNCTION); \ } \ - catch (::boost::json::system_error const& exc) \ + catch (::boost::system::system_error const& exc) \ { \ ::test_suite::detail::current()->maybe_fail( \ exc.code().has_location(), "has_location()", __FILE__, __LINE__, \ diff --git a/test/value.cpp b/test/value.cpp index 9f93657c..1f6afce0 100644 --- a/test/value.cpp +++ b/test/value.cpp @@ -1686,7 +1686,7 @@ public: } { - error_code ec; + system::error_code ec; value(nullptr).to_number(ec); BOOST_TEST(ec == error::not_number); BOOST_TEST(ec.has_location()); diff --git a/test/value_from.cpp b/test/value_from.cpp index 37eb2e0a..3eb4c447 100644 --- a/test/value_from.cpp +++ b/test/value_from.cpp @@ -135,7 +135,7 @@ void tag_invoke( ::boost::json::value_from_tag, ::boost::json::value& jv, - ::boost::json::error_code& ec, + ::boost::system::error_code& ec, T8 const& t8) { if( t8.error ) @@ -163,7 +163,7 @@ tag_invoke( if( t9.num == 0 ) throw std::invalid_argument(""); if( t9.num < 0 ) - throw ::boost::json::system_error( + throw ::boost::system::system_error( make_error_code(::boost::json::error::syntax)); jv = "T9"; diff --git a/test/value_to.cpp b/test/value_to.cpp index 3bd03f3f..ed98a7fc 100644 --- a/test/value_to.cpp +++ b/test/value_to.cpp @@ -40,7 +40,7 @@ struct T1 { }; //---------------------------------------------------------- struct T2 { }; -boost::json::result +boost::system::result tag_invoke( boost::json::try_value_to_tag, boost::json::value const& jv) @@ -61,7 +61,7 @@ tag_invoke( { boost::json::string const* str = jv.if_string(); if( !str ) - throw boost::json::system_error( + throw boost::system::system_error( make_error_code(boost::json::error::not_string)); if ( *str != "T3" ) throw std::invalid_argument(""); @@ -157,7 +157,7 @@ struct custom_context struct T9 { }; -boost::json::result +boost::system::result tag_invoke( boost::json::try_value_to_tag, boost::json::value const& jv, @@ -581,7 +581,7 @@ public: { BOOST_TEST_THROWS( value_to<::value_to_test_ns::T2>( value(), ctx... ), - system_error); + system::system_error); } // nonthrowing overload falls back to throwing customization { @@ -749,7 +749,7 @@ public: BOOST_TEST_THROWS( value_to( value(), value_to_test_ns::custom_context() ), - system_error); + system::system_error); } struct run_templated_tests