Commit graph

992 commits

Author SHA1 Message Date
Perry Kundert a8cc7a1bc8 Consistently use std::char_traits int_type-->char conversion intrinsics 2017-10-16 08:06:10 -07:00
Jamie Seward 8ba7f69ab4 Fix whitespace 2017-10-16 00:49:59 -07:00
Jamie Seward 8a4af820c7 Fix warning C4706 2017-10-16 00:41:58 -07:00
Niels Lohmann d300a8e268
🚨 fixed warnings #776 2017-10-13 08:46:29 +02:00
Perry Kundert 23440eb86e Remove outdated commentary about the value of eof(), retain input type
o We assume the same character int_type as the unerlying std::istream
o There are no assumptions on the value of eof(), other than that it
  will not be a valid unsigned char value.
o To retain performance, we do not allow swapping out the underlying
  std::streambuf during our use of the std::istream for parsing.
2017-10-06 12:54:43 -07:00
Perry Kundert 45e1e3d48a Revert some unnecessary member initializer changes. 2017-10-06 07:53:31 -07:00
Perry Kundert 5e480b56d8 Further simplify character type handling 2017-10-06 07:37:49 -07:00
Perry Kundert 1b43a45bec Implement correct handling of std::streambuf int_type, eof()
o Make no assumptions about eof(), other than that it is somewhere
  outside of the valid range of char_type.
2017-10-05 16:16:41 -07:00
Perry Kundert 184dab60e6 Accelerate access to underlying std::istream streambuf 2017-10-05 16:16:41 -07:00
Perry Kundert f775922ca8 Specify initializers for yytest, token_string using initializer-lists
o We can retain -Weffc++ and specify default initializers by using
  initializer lists.  The risks are low (of additional non-conformat
  compilers), because there is already one other such initialization
  used in the code-base.
2017-10-05 16:16:41 -07:00
Perry Kundert 546e148b24 Further performance improvements, and corrections in get_token_string
o An (-'ve valued, typically -1) EOF must never be allowed in
  token_string, as it be converted to 255 -- a legitimate value.
o Comparing against a specific eof() (-1, typically) is more costly than
  detecting +'ve/-'ve.  Since EOF is the only non-positive value allowed
  we can use the simpler test.
o Removed unnecessary test for token_string size, as it is already
  tested in the method, and must never occur in correct code; used an
  assert instead.
2017-10-05 16:16:41 -07:00
Perry Kundert 8665e25942 Rename get_string to move_string to imply side-effect 2017-10-05 16:16:41 -07:00
Perry Kundert e0d890cc23 Corrected unnnecessary const restriction on returned std::string 2017-10-05 16:16:41 -07:00
Perry Kundert 97a388802d Improve performance by constructing yytext as a std::string
o Return its contents when necessary.  In many cases, this avoids
  construction of multiple copies of the yytext token.  Exceeds
  performance of current develop branch.
2017-10-05 16:15:46 -07:00
Perry Kundert 7c523338c5 Remove unnnecessary NUL termination of yytext (as it may contain NULs) 2017-10-05 16:01:41 -07:00
Perry Kundert 14ca1f6f09 Restore istream performance #764
o Use std::streambuf I/O instead of std::istream; does not maintain
  (unused) istream flags.
o Further simplify get/unget handling.
o Restore original handling of NUL in input stream; ignored during
  token_string escaping.
2017-10-05 16:01:41 -07:00
Perry Kundert 12efeadc2e Further simplify istream handling; use native unget 2017-10-05 16:01:41 -07:00
Perry Kundert 90adf6ec20 Simplify get_token_string, unnecessary buffering, handle Byte Order Mark 2017-10-05 16:01:41 -07:00
Niels Lohmann 5cb6d7187d
🚨 fixing last warning in #755 2017-10-04 17:28:35 +02:00
Niels Lohmann 54bd1b5124
Merge branch 'develop' into feature/issue698 2017-10-03 17:23:05 +02:00
Niels Lohmann 7435d54e97
🔨 clean up 2017-10-02 23:06:41 +02:00
Niels Lohmann 4912231450
Merge branch 'develop' into feature/issue698 2017-10-02 18:25:25 +02:00
Niels Lohmann b91805e1f0
🚨 removing a compiler warning #755 2017-10-02 18:11:36 +02:00
Niels Lohmann f89f8b2d0b
Merge branch 'develop' into feature/issue698 2017-10-02 17:47:53 +02:00
Niels Lohmann 8be303d4fb
🏁 fixing a min() call for MSVC #762 2017-10-02 13:54:14 +02:00
Niels Lohmann 1df836ce40
removed call to std::signbit #761 2017-10-01 15:48:29 +02:00
Niels Lohmann 8af49d4be5
🚨 removing compiler warnings #755 2017-09-30 11:00:26 +02:00
Niels Lohmann 1a66527dca
📝 fixed documentation #745 2017-09-30 10:18:18 +02:00
Niels Lohmann 295d65ada7
Merge branch 'develop' into feature/issue698 2017-09-10 01:13:43 +02:00
Niels Lohmann fcba9ec537
🔨 clean up 2017-09-10 01:12:03 +02:00
Niels Lohmann 31ce7e1e59
Merge branch 'develop' into feature/issue698 2017-09-09 11:05:20 +02:00
Niels Lohmann c607b5c2ac
📝 improved documentation 2017-09-06 17:14:06 +02:00
Niels Lohmann 91e0032853
📝 improved documentation 2017-08-29 23:46:26 +02:00
Niels Lohmann 15e757c42b
🔨 trying to fix memory issue with valarray 2017-08-27 10:41:39 +02:00
Théo DELRIEU bb1b4c934e
fix from_json implementation for pair/tuple
Introduced by 6e4910d5c5

Fixes #707
2017-08-23 10:05:43 +02:00
Niels Lohmann 0b5e8f859b
🔨 cleanup
Fixed some warning in Clion.
2017-08-23 00:42:15 +02:00
Niels Lohmann 9fd031b6f4
🐛 re-added support for std::valarray #702 2017-08-22 23:28:23 +02:00
Niels Lohmann 64ef100ebf
Revert "💥 changed iterators to andom_access_iterator #593"
This reverts commit c77a0be5f3.
2017-08-20 20:44:44 +02:00
Niels Lohmann c77a0be5f3
💥 changed iterators to andom_access_iterator #593
This commit changes the iterator category to andom_access_iterator and allows offsets and subscript operators for object iterators.
2017-08-16 21:35:22 +02:00
Niels Lohmann aba8b58492
🔨 approach to un-break the changes for #462 2017-08-16 20:11:05 +02:00
Niels Lohmann 22b59693f1
💥 CBOR/MessagePack input must end with EOF #505
The CBOR and MessagePack parsers now expect the input to be read until the end. Unless the new parameter "strict" is set to false (it is true by default), an exception is raised if the parser ends prematurely. This is a breaking change as the parsers ignored unread input so far.

Furthermore, the offset/startIndex paramter introduced in #462 was removed as this behavior can be mimicked with an iterator range. For instance, instead of calling "from_cbor(vec, 5);", you can write "from_cbor({vec.begin()+5, vec.end()});".
2017-08-16 14:48:23 +02:00
Niels Lohmann 4391bf5615
Merge branch 'feature/update' into develop 2017-08-16 07:39:30 +02:00
Niels Lohmann 1e360bb32b
🔨 preparation for #505
Added a parameter to control whether parsing CBOR and MessagePack must completely consume the input.
2017-08-16 07:39:11 +02:00
Niels Lohmann 72afe53fa0
📝 updated documentation for update() function #661 2017-08-15 21:42:50 +02:00
Niels Lohmann 039e2f03bc
Merge branch 'develop' into feature/update 2017-08-15 19:54:22 +02:00
Niels Lohmann 08805f7f14
🔨 cleanup 2017-08-13 20:57:27 +02:00
Niels Lohmann 7d19aed567
🔨 cleanup 2017-08-13 19:02:58 +02:00
Niels Lohmann 6151b056eb
🔨 cleanup 2017-08-10 23:40:30 +02:00
Niels Lohmann a46afd4008 Merge pull request #679 from traits/patch-1
Digraph warning
2017-08-10 11:39:13 +02:00
traits 54c67dcfec Update json.hpp 2017-08-10 09:05:00 +02:00
WebProdPP c9509ccf97 Update json.hpp
mistake
2017-08-09 16:13:43 +03:00
Kyle Thompson 4b55f0ebd6 To fix compilation issue for intel OSX compiler
o To prevent the compilation issue on OSX with the intel compiler suite.  The
error was found with icpc version 15.0.3.187 where the "__clang_version__" was
not defined correctly, while "__clang__" was.
2017-08-08 18:43:03 -04:00
traits ab44a50d98 Digraph warning
The original version can trigger a digraph-related warning in VS2015. Is this namespace construct a typo or something deliberate?
2017-08-07 14:23:48 +02:00
DmitryKuk 19437c15de massage -> message 2017-08-05 10:43:08 +03:00
Niels Lohmann d2c3592908
added test cases for update #661 2017-08-02 22:44:58 +02:00
Niels Lohmann d1e13d5128
🎉 first draft for #661 2017-08-02 22:12:41 +02:00
Niels Lohmann 0ea0d7d860 Merge pull request #674 from wincent/patch-1
Fix "not constraint" grammar in docs
2017-08-01 20:21:04 +02:00
Niels Lohmann efdfd3aa5b
replaced by-value call #673 2017-08-01 19:37:25 +02:00
Greg Hurrell 391303521a Fix "not constraint" grammar in docs 2017-08-01 08:56:28 -07:00
Niels Lohmann e60002a1b3
🔨 fixed GCC warnings in #663
https://github.com/nlohmann/json/pull/663#issuecomment-318931884
2017-07-31 23:17:14 +02:00
Niels Lohmann 850d856aae
🔨 cleanup after #663 2017-07-30 20:30:05 +02:00
Niels Lohmann 3d67ec40a6
Merge branch 'develop' of https://github.com/nlohmann/json into develop 2017-07-30 20:01:35 +02:00
Niels Lohmann 85c768084b
🔨 using emplace 2017-07-30 20:01:31 +02:00
Niels Lohmann aad55219f8 Merge branch 'develop' into move-construction 2017-07-30 19:49:24 +02:00
Niels Lohmann 96dd4ffa19
🔨 simplified a call 2017-07-30 18:30:34 +02:00
Niels Lohmann 7737a29518
🔨 small parser performance improvements
- replaced list of pairs by flat list in next_byte_in_range
- implemented early exit in case of parse errors
- reused memory for object keys
- direct calls to embedded objects/arrays for insertions
2017-07-30 13:25:36 +02:00
Niels Lohmann c819a2d732
🔨 refactored some scanner internals 2017-07-28 19:18:50 +02:00
Niels Lohmann 5851daa576
binary formats can be stored in std::string, std::ofstreams or std::ostringstream #477 2017-07-28 00:21:55 +02:00
Niels Lohmann 7d51214045
implemented exception-free parser #458 #582
You can now pass a boolean "allow_exceptions" to the parse functions. If it is false, no exceptions are thrown in case of a parse error. Instead, parsing is stopped at the first error and a JSON value of type "discarded" (check with is_discarded()) is returned.
2017-07-27 20:33:11 +02:00
Niels Lohmann 669ebf51bc
🔨 fixed an error in MSVC 2017-07-27 06:04:35 +02:00
Niels Lohmann 3d589fd032
🔨 fixed compilation error 2017-07-26 23:59:56 +02:00
Niels Lohmann e6aa700360
🔨 cleanup 2017-07-26 23:44:55 +02:00
Nikita Ofitserov 93bb71232d Move from rvalues eagerly to work around MSVC problem
On MSVC compiler, temporaries that are constructed during a
list initialization, are sometimes destroyed even before calling
the initializing constructor, instead of at the end of the
containing full-expression. This is clearly non-conforming to
[class.temporary].
As the impact of this bug is silently producing incorrect
JSON values, move eagerly from rvalues to be safe.

See https://stackoverflow.com/questions/24586411
2017-07-25 12:17:32 +03:00
Nikita Ofitserov 897879bccb Make detail::json_ref do less work by deferring moves/copies 2017-07-24 12:29:06 +03:00
Niels Lohmann 4414f94cd5
🔨 using input/output adapters for CBOR and MessagePack
- You can now pass a reference to a vector to the to_cbor and to_msgpack functions. The output will be written (appended) to the vector. #476

- You can now pass an output stream with uint8_t character type to the to_cbor and to_msgpack functions. #477

- You can now read from uint8_t */size in the to_cbor and to_msgpack functions. An input adapter will be created from this pair, so you need to use braces. #478
2017-07-23 23:02:24 +02:00
Nikita Ofitserov 09cda57309 Support moving from rvalues in an std::initializer_list
This commit works around an issue in std::initializer_list design.
By using a detail::json_ref proxy with a mutable value inside,
rvalue-ness of an input to list initializer is remembered and
used later to move from the proxy instead of copying.
2017-07-23 23:57:17 +03:00
Nikita Ofitserov cf3ca3b78c Optimize json construction from rvalue string_t/array_t/object_t 2017-07-23 23:50:59 +03:00
Niels Lohmann 9b1c058810
🔨 reorganized interfaces for parse/accept functions #623
We now rely on implicit conversions to an input_adapter object in the parse/accept functions.
2017-07-23 18:11:34 +02:00
Niels Lohmann 18e0430bfe
🔨 adding destroy function to discard values 2017-07-22 22:57:22 +02:00
Niels Lohmann 5b5f0090a1
🔨 trying to fix the sanitizer error
Travis found an error with Clang 3.8's sanitizers, see https://travis-ci.org/nlohmann/json/jobs/256366699. Unfortunately, I cannot reproduce this error with clang version 6.0.0 (trunk 308825) locally. However, this seems to be an issue, because so far, we did not reset a value after moving from it.
2017-07-22 16:41:42 +02:00
Niels Lohmann d53ef95067
🔨 fixed some warnings 2017-07-22 15:33:31 +02:00
Niels Lohmann c7a69ae03e
started working on parser with provded result reference #418
Internally, the parser now writes its result into a JSON value provided as a reference. To be usable, the public interfaces need to be extended.
2017-07-22 15:18:38 +02:00
Niels Lohmann f513c46749
🔨 further cleanup 2017-07-22 13:35:04 +02:00
Niels Lohmann 024fec8a9b
🔨 more cleanup using clang-tidy 2017-07-21 18:26:07 +02:00
Niels Lohmann a09193e967
🔨 cleanup
- Replaced codepoint calculation by bit operations.
- Fixed several clang-tidy warnings.
2017-07-20 23:01:16 +02:00
Niels Lohmann 21d23982ca
🐛 fix for #656
A complete rewrite of the string escape function. It now provides codepoint-to-\uxxxx escaping. Invalid UTF-8 byte sequences are not escaped, but copied as-is. I haven’t spent much time optimizing the code - but the library now agrees with Python on every single Unicode character’s escaping (see file test/data/json_nlohmann_tests/all_unicode_ascii.json).

Other minor changes: replaced "size_t" by "std::size_t"
2017-07-17 07:53:02 +02:00
Ryan Mulder 486f3a2d16 restore necessary comman in documentation of dump 2017-07-11 14:18:02 -04:00
Ryan Mulder 40461c6c55 update comment on dump to not indicate that ensure_ascii is true by default 2017-07-11 13:59:07 -04:00
Ryan Mulder 71597be294 add ensure_ascii parameter to dump. #330 2017-07-11 13:48:08 -04:00
Théo DELRIEU 8585d35c92
move serializer outside of basic_json 2017-07-09 21:30:34 +02:00
Théo DELRIEU acff23efb2
move binary_{reader,writer} outside of basic_json 2017-07-09 21:30:33 +02:00
Théo DELRIEU bb752fd30c
move json_reverse_iterator outside of basic_json 2017-07-09 21:30:33 +02:00
Théo DELRIEU 0ba98b6fe0
move internal_iterator/iter_impl/iteration_proxy outside of basic_json 2017-07-09 21:30:31 +02:00
Théo DELRIEU 00d6e27194
move primitive_iterator outside of basic_json 2017-07-09 21:22:16 +02:00
Théo DELRIEU 8e681d1e57
move lexer/parser outside of basic_json 2017-07-09 21:22:15 +02:00
Théo DELRIEU 15625ca4a7
move input adapters outside of basic_json 2017-07-09 21:21:12 +02:00
Théo DELRIEU a332142194
move json_pointer outside of basic_json 2017-07-09 21:21:09 +02:00
Théo DELRIEU fe086d7432
forward declare basic_json, add two macros
Those macros are used to reduce template argument boilerplate
2017-07-09 16:16:42 +02:00
Oleg Endo e3bb156f82 fix typo 2017-07-09 15:20:28 +09:00
Oleg Endo b753cb6ee7 use std::make_shared 2017-07-09 15:19:08 +09:00