json/test/src
Florian Albrechtskirchinger 5352856f04
Implement support for string_view (attempt no. 3) (#3423)
* Add key_compare member to ordered_map

* Replace == with key_compare in ordered_map

* Expose the actual comparison function used by object_t

nlohmann::ordered_map uses a different comparison function than the one
provided via template parameter.
* Introduce a type trait to detect if object_t has a key_compare member.
* Rename object_comparator_t to default_object_comparator_t.
* Add object_comparator_t to be conditionally defined as
  object_t::key_compare, if available, or default_object_comparator_t
  otherwise.
* Update the documentation accordingly.

Co-authored-by: Niels Lohmann <niels.lohmann@gmail.com>

* Add type traits to check if a type is usable as object key

Add type trait to check:
* if a type is a specialization of a template.
* if a type is a json_pointer.
* if a type is a basic_json::{const_,}iterator.
* if two types are comparable using a given comparison functor.
* if a type is comparable to basic_json::object_t::key_type.
* if a type has a member type is_transparent.
* if a type is usable as object key.
* if a type has an erase() function accepting a given KeyType.

Co-authored-by: Niels Lohmann <niels.lohmann@gmail.com>

* Rework basic_json element access to accept more key types

Rework basic_json element access member functions and operators to
accept any type that meets the requirements defined by type trait
detail::is_usable_as_key_type.

Member functions and operators:
* at()
* operator[]
* value()
* erase()
* find()
* count()
* contains()

Update documentation to reflect these changes.

Add unit tests to excercise the new functions using std::string_view.

Co-authored-by: Niels Lohmann <niels.lohmann@gmail.com>

Co-authored-by: Niels Lohmann <niels.lohmann@gmail.com>
2022-04-29 21:40:02 +02:00
..
fuzzer-driver_afl.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
fuzzer-parse_bjdata.cpp Support UBJSON-derived Binary JData (BJData) format (#3336) 2022-04-29 21:17:30 +02:00
fuzzer-parse_bson.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
fuzzer-parse_cbor.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
fuzzer-parse_json.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
fuzzer-parse_msgpack.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
fuzzer-parse_ubjson.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
test_utils.hpp 🚨 fix warning 2020-07-26 12:12:17 +02:00
unit-algorithms.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-allocator.cpp Fix C++20/gcc-12 issues (Part 1) (#3379) 2022-03-07 22:19:28 +01:00
unit-alt-string.cpp Re-template json_pointer on string type (#3415) 2022-04-12 14:18:16 +02:00
unit-assert_macro.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-bjdata.cpp Support UBJSON-derived Binary JData (BJData) format (#3336) 2022-04-29 21:17:30 +02:00
unit-bson.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-byte_container_with_subtype.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-capacity.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-cbor.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-class_const_iterator.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-class_iterator.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-class_lexer.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-class_parser.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-comparison.cpp Improve unit testing (Part 1) (#3380) 2022-03-24 07:54:07 +01:00
unit-concepts.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-constructor1.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-constructor2.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-convenience.cpp Re-template json_pointer on string type (#3415) 2022-04-12 14:18:16 +02:00
unit-conversions.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-deserialization.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-diagnostics.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-disabled_exceptions.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-element_access1.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-element_access2.cpp Implement support for string_view (attempt no. 3) (#3423) 2022-04-29 21:40:02 +02:00
unit-hash.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-inspection.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-items.cpp Improve unit testing (Part 1) (#3380) 2022-03-24 07:54:07 +01:00
unit-iterators1.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-iterators2.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-json_patch.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-json_pointer.cpp Re-template json_pointer on string type (#3415) 2022-04-12 14:18:16 +02:00
unit-large_json.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-merge_patch.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-meta.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-modifiers.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-msgpack.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-noexcept.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-ordered_json.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-ordered_map.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-pointer_access.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-readme.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-reference_access.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-regression1.cpp Refactor unit tests to use more convenient doctest assertion macros (Part 2) (#3405) 2022-04-01 14:38:17 +02:00
unit-regression2.cpp Disable regression test for #3070 on GCC <8.4 (#3451) 2022-04-22 14:21:16 +02:00
unit-serialization.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-testsuites.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-to_chars.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-ubjson.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-udt_macro.cpp Add macros NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT and ..._NON_INTRUSIVE_WITH_DEFAULT (#3143) 2022-01-30 22:06:50 +01:00
unit-udt.cpp Update CI image (#3420) 2022-04-06 15:14:14 +02:00
unit-unicode1.cpp Refactor unit tests to use more convenient doctest assertion macros (#3393) 2022-03-24 15:55:35 +01:00
unit-unicode2.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-unicode3.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-unicode4.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-unicode5.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-user_defined_input.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit-wstring.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
unit.cpp 🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00