mirror of
https://github.com/simdjson/simdjson
synced 2026-06-08 17:27:07 +00:00
version bump
This commit is contained in:
+1
-1
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.14)
|
||||
project(
|
||||
simdjson
|
||||
# The version number is modified by tools/release.py
|
||||
VERSION 3.6.3
|
||||
VERSION 3.6.4
|
||||
DESCRIPTION "Parsing gigabytes of JSON per second"
|
||||
HOMEPAGE_URL "https://simdjson.org/"
|
||||
LANGUAGES CXX C
|
||||
|
||||
@@ -38,7 +38,7 @@ PROJECT_NAME = simdjson
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = "3.6.3"
|
||||
PROJECT_NUMBER = "3.6.4"
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer a
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#define SIMDJSON_SIMDJSON_VERSION_H
|
||||
|
||||
/** The version of simdjson being used (major.minor.revision) */
|
||||
#define SIMDJSON_VERSION "3.6.3"
|
||||
#define SIMDJSON_VERSION "3.6.4"
|
||||
|
||||
namespace simdjson {
|
||||
enum {
|
||||
@@ -19,7 +19,7 @@ enum {
|
||||
/**
|
||||
* The revision (major.minor.REVISION) of simdjson being used.
|
||||
*/
|
||||
SIMDJSON_VERSION_REVISION = 3
|
||||
SIMDJSON_VERSION_REVISION = 4
|
||||
};
|
||||
} // namespace simdjson
|
||||
|
||||
|
||||
+31
-35
@@ -1,4 +1,4 @@
|
||||
/* auto-generated on . Do not edit! */
|
||||
/* auto-generated on 2024-01-28 12:42:59 -0500. Do not edit! */
|
||||
/* including simdjson.cpp: */
|
||||
/* begin file simdjson.cpp */
|
||||
#define SIMDJSON_SRC_SIMDJSON_CPP
|
||||
@@ -10872,7 +10872,7 @@ namespace simdjson {
|
||||
namespace arm64 {
|
||||
namespace {
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline bool is_ascii(const simd8x64<uint8_t>& input);
|
||||
|
||||
} // unnamed namespace
|
||||
@@ -11439,7 +11439,7 @@ using namespace simd;
|
||||
const simd8<uint8_t> prev_input, const simd8<uint8_t> sc) {
|
||||
simd8<uint8_t> prev2 = input.prev<2>(prev_input);
|
||||
simd8<uint8_t> prev3 = input.prev<3>(prev_input);
|
||||
simd8<uint8_t> must23 = simd8<uint8_t>(must_be_2_3_continuation(prev2, prev3));
|
||||
simd8<uint8_t> must23 = must_be_2_3_continuation(prev2, prev3);
|
||||
simd8<uint8_t> must23_80 = must23 & uint8_t(0x80);
|
||||
return must23_80 ^ sc;
|
||||
}
|
||||
@@ -13634,10 +13634,10 @@ simdjson_unused simdjson_inline simd8<bool> must_be_continuation(const simd8<uin
|
||||
return is_second_byte ^ is_third_byte ^ is_fourth_byte;
|
||||
}
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<bool> is_third_byte = prev2 >= uint8_t(0xe0u);
|
||||
simd8<bool> is_fourth_byte = prev3 >= uint8_t(0xf0u);
|
||||
return is_third_byte ^ is_fourth_byte;
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<uint8_t> is_third_byte = prev2.saturating_sub(0xe0u-0x80); // Only 111_____ will be >= 0x80
|
||||
simd8<uint8_t> is_fourth_byte = prev3.saturating_sub(0xf0u-0x80); // Only 1111____ will be >= 0x80
|
||||
return is_third_byte | is_fourth_byte;
|
||||
}
|
||||
|
||||
} // unnamed namespace
|
||||
@@ -20944,7 +20944,7 @@ namespace simdjson {
|
||||
namespace haswell {
|
||||
namespace {
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline bool is_ascii(const simd8x64<uint8_t>& input);
|
||||
|
||||
} // unnamed namespace
|
||||
@@ -21511,7 +21511,7 @@ using namespace simd;
|
||||
const simd8<uint8_t> prev_input, const simd8<uint8_t> sc) {
|
||||
simd8<uint8_t> prev2 = input.prev<2>(prev_input);
|
||||
simd8<uint8_t> prev3 = input.prev<3>(prev_input);
|
||||
simd8<uint8_t> must23 = simd8<uint8_t>(must_be_2_3_continuation(prev2, prev3));
|
||||
simd8<uint8_t> must23 = must_be_2_3_continuation(prev2, prev3);
|
||||
simd8<uint8_t> must23_80 = must23 & uint8_t(0x80);
|
||||
return must23_80 ^ sc;
|
||||
}
|
||||
@@ -23703,11 +23703,10 @@ simdjson_unused simdjson_inline simd8<bool> must_be_continuation(const simd8<uin
|
||||
return simd8<int8_t>(is_second_byte | is_third_byte | is_fourth_byte) > int8_t(0);
|
||||
}
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<uint8_t> is_third_byte = prev2.saturating_sub(0xe0u-1); // Only 111_____ will be > 0
|
||||
simd8<uint8_t> is_fourth_byte = prev3.saturating_sub(0xf0u-1); // Only 1111____ will be > 0
|
||||
// Caller requires a bool (all 1's). All values resulting from the subtraction will be <= 64, so signed comparison is fine.
|
||||
return simd8<int8_t>(is_third_byte | is_fourth_byte) > int8_t(0);
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<uint8_t> is_third_byte = prev2.saturating_sub(0xe0u-0x80); // Only 111_____ will be >= 0x80
|
||||
simd8<uint8_t> is_fourth_byte = prev3.saturating_sub(0xf0u-0x80); // Only 1111____ will be >= 0x80
|
||||
return is_third_byte | is_fourth_byte;
|
||||
}
|
||||
|
||||
} // unnamed namespace
|
||||
@@ -27103,7 +27102,7 @@ namespace simdjson {
|
||||
namespace icelake {
|
||||
namespace {
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline bool is_ascii(const simd8x64<uint8_t>& input);
|
||||
|
||||
} // unnamed namespace
|
||||
@@ -27670,7 +27669,7 @@ using namespace simd;
|
||||
const simd8<uint8_t> prev_input, const simd8<uint8_t> sc) {
|
||||
simd8<uint8_t> prev2 = input.prev<2>(prev_input);
|
||||
simd8<uint8_t> prev3 = input.prev<3>(prev_input);
|
||||
simd8<uint8_t> must23 = simd8<uint8_t>(must_be_2_3_continuation(prev2, prev3));
|
||||
simd8<uint8_t> must23 = must_be_2_3_continuation(prev2, prev3);
|
||||
simd8<uint8_t> must23_80 = must23 & uint8_t(0x80);
|
||||
return must23_80 ^ sc;
|
||||
}
|
||||
@@ -29861,11 +29860,10 @@ simdjson_unused simdjson_inline simd8<bool> must_be_continuation(const simd8<uin
|
||||
return simd8<int8_t>(is_second_byte | is_third_byte | is_fourth_byte) > int8_t(0);
|
||||
}
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<uint8_t> is_third_byte = prev2.saturating_sub(0xe0u-1); // Only 111_____ will be > 0
|
||||
simd8<uint8_t> is_fourth_byte = prev3.saturating_sub(0xf0u-1); // Only 1111____ will be > 0
|
||||
// Caller requires a bool (all 1's). All values resulting from the subtraction will be <= 64, so signed comparison is fine.
|
||||
return simd8<int8_t>(is_third_byte | is_fourth_byte) > int8_t(0);
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<uint8_t> is_third_byte = prev2.saturating_sub(0xe0u-0x80); // Only 111_____ will be >= 0x80
|
||||
simd8<uint8_t> is_fourth_byte = prev3.saturating_sub(0xf0u-0x80); // Only 1111____ will be >= 0x80
|
||||
return is_third_byte | is_fourth_byte;
|
||||
}
|
||||
|
||||
} // unnamed namespace
|
||||
@@ -33533,7 +33531,7 @@ namespace simdjson {
|
||||
namespace ppc64 {
|
||||
namespace {
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline bool is_ascii(const simd8x64<uint8_t>& input);
|
||||
|
||||
} // unnamed namespace
|
||||
@@ -34100,7 +34098,7 @@ using namespace simd;
|
||||
const simd8<uint8_t> prev_input, const simd8<uint8_t> sc) {
|
||||
simd8<uint8_t> prev2 = input.prev<2>(prev_input);
|
||||
simd8<uint8_t> prev3 = input.prev<3>(prev_input);
|
||||
simd8<uint8_t> must23 = simd8<uint8_t>(must_be_2_3_continuation(prev2, prev3));
|
||||
simd8<uint8_t> must23 = must_be_2_3_continuation(prev2, prev3);
|
||||
simd8<uint8_t> must23_80 = must23 & uint8_t(0x80);
|
||||
return must23_80 ^ sc;
|
||||
}
|
||||
@@ -36265,11 +36263,10 @@ simdjson_unused simdjson_inline simd8<bool> must_be_continuation(const simd8<uin
|
||||
return simd8<int8_t>(is_second_byte | is_third_byte | is_fourth_byte) > int8_t(0);
|
||||
}
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<uint8_t> is_third_byte = prev2.saturating_sub(0xe0u-1); // Only 111_____ will be > 0
|
||||
simd8<uint8_t> is_fourth_byte = prev3.saturating_sub(0xf0u-1); // Only 1111____ will be > 0
|
||||
// Caller requires a bool (all 1's). All values resulting from the subtraction will be <= 64, so signed comparison is fine.
|
||||
return simd8<int8_t>(is_third_byte | is_fourth_byte) > int8_t(0);
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<uint8_t> is_third_byte = prev2.saturating_sub(0xe0u-0x80); // Only 111_____ will be >= 0x80
|
||||
simd8<uint8_t> is_fourth_byte = prev3.saturating_sub(0xf0u-0x80); // Only 1111____ will be >= 0x80
|
||||
return is_third_byte | is_fourth_byte;
|
||||
}
|
||||
|
||||
} // unnamed namespace
|
||||
@@ -40537,7 +40534,7 @@ namespace simdjson {
|
||||
namespace westmere {
|
||||
namespace {
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3);
|
||||
simdjson_inline bool is_ascii(const simd8x64<uint8_t>& input);
|
||||
|
||||
} // unnamed namespace
|
||||
@@ -41104,7 +41101,7 @@ using namespace simd;
|
||||
const simd8<uint8_t> prev_input, const simd8<uint8_t> sc) {
|
||||
simd8<uint8_t> prev2 = input.prev<2>(prev_input);
|
||||
simd8<uint8_t> prev3 = input.prev<3>(prev_input);
|
||||
simd8<uint8_t> must23 = simd8<uint8_t>(must_be_2_3_continuation(prev2, prev3));
|
||||
simd8<uint8_t> must23 = must_be_2_3_continuation(prev2, prev3);
|
||||
simd8<uint8_t> must23_80 = must23 & uint8_t(0x80);
|
||||
return must23_80 ^ sc;
|
||||
}
|
||||
@@ -43300,11 +43297,10 @@ simdjson_unused simdjson_inline simd8<bool> must_be_continuation(const simd8<uin
|
||||
return simd8<int8_t>(is_second_byte | is_third_byte | is_fourth_byte) > int8_t(0);
|
||||
}
|
||||
|
||||
simdjson_inline simd8<bool> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<uint8_t> is_third_byte = prev2.saturating_sub(0xe0u-1); // Only 111_____ will be > 0
|
||||
simd8<uint8_t> is_fourth_byte = prev3.saturating_sub(0xf0u-1); // Only 1111____ will be > 0
|
||||
// Caller requires a bool (all 1's). All values resulting from the subtraction will be <= 64, so signed comparison is fine.
|
||||
return simd8<int8_t>(is_third_byte | is_fourth_byte) > int8_t(0);
|
||||
simdjson_inline simd8<uint8_t> must_be_2_3_continuation(const simd8<uint8_t> prev2, const simd8<uint8_t> prev3) {
|
||||
simd8<uint8_t> is_third_byte = prev2.saturating_sub(0xe0u-0x80); // Only 111_____ will be >= 0x80
|
||||
simd8<uint8_t> is_fourth_byte = prev3.saturating_sub(0xf0u-0x80); // Only 1111____ will be >= 0x80
|
||||
return is_third_byte | is_fourth_byte;
|
||||
}
|
||||
|
||||
} // unnamed namespace
|
||||
|
||||
+55
-4
@@ -1,4 +1,4 @@
|
||||
/* auto-generated on . Do not edit! */
|
||||
/* auto-generated on 2024-01-28 12:42:59 -0500. Do not edit! */
|
||||
/* including simdjson.h: */
|
||||
/* begin file simdjson.h */
|
||||
#ifndef SIMDJSON_H
|
||||
@@ -2344,7 +2344,7 @@ namespace std {
|
||||
#define SIMDJSON_SIMDJSON_VERSION_H
|
||||
|
||||
/** The version of simdjson being used (major.minor.revision) */
|
||||
#define SIMDJSON_VERSION "3.6.3"
|
||||
#define SIMDJSON_VERSION "3.6.4"
|
||||
|
||||
namespace simdjson {
|
||||
enum {
|
||||
@@ -2359,7 +2359,7 @@ enum {
|
||||
/**
|
||||
* The revision (major.minor.REVISION) of simdjson being used.
|
||||
*/
|
||||
SIMDJSON_VERSION_REVISION = 3
|
||||
SIMDJSON_VERSION_REVISION = 4
|
||||
};
|
||||
} // namespace simdjson
|
||||
|
||||
@@ -4472,6 +4472,53 @@ public:
|
||||
*/
|
||||
inline simdjson_result<element> load(const std::string &path) & noexcept;
|
||||
inline simdjson_result<element> load(const std::string &path) && = delete ;
|
||||
|
||||
/**
|
||||
* Load a JSON document from a file into a provide document instance and return a temporary reference to it.
|
||||
* It is similar to the function `load` except that instead of parsing into the internal
|
||||
* `document` instance associated with the parser, it allows the user to provide a document
|
||||
* instance.
|
||||
*
|
||||
* dom::parser parser;
|
||||
* dom::document doc;
|
||||
* element doc_root = parser.load_into_document(doc, "jsonexamples/twitter.json");
|
||||
*
|
||||
* The function is eager: the file's content is loaded in memory inside the parser instance
|
||||
* and immediately parsed. The file can be deleted after the `parser.load_into_document` call.
|
||||
*
|
||||
* ### IMPORTANT: Document Lifetime
|
||||
*
|
||||
* After the call to load_into_document, the parser is no longer needed.
|
||||
*
|
||||
* The JSON document lives in the document instance: you must keep the document
|
||||
* instance alive while you navigate through it (i.e., used the returned value from
|
||||
* load_into_document). You are encourage to reuse the document instance
|
||||
* many times with new data to avoid reallocations:
|
||||
*
|
||||
* dom::document doc;
|
||||
* element doc_root1 = parser.load_into_document(doc, "jsonexamples/twitter.json");
|
||||
* //... doc_root1 is a pointer inside doc
|
||||
* element doc_root2 = parser.load_into_document(doc, "jsonexamples/twitter.json");
|
||||
* //... doc_root2 is a pointer inside doc
|
||||
* // at this point doc_root1 is no longer safe
|
||||
*
|
||||
* Moving the document instance is safe, but it invalidates the element instances. After
|
||||
* moving a document, you can recover safe access to the document root with its `root()` method.
|
||||
*
|
||||
* @param doc The document instance where the parsed data will be stored (on success).
|
||||
* @param path The path to load.
|
||||
* @return The document, or an error:
|
||||
* - IO_ERROR if there was an error opening or reading the file.
|
||||
* Be mindful that on some 32-bit systems,
|
||||
* the file size might be limited to 2 GB.
|
||||
* - MEMALLOC if the parser does not have enough capacity and memory allocation fails.
|
||||
* - CAPACITY if the parser does not have enough capacity and len > max_capacity.
|
||||
* - other json errors if parsing fails. You should not rely on these errors to always the same for the
|
||||
* same document: they may vary under runtime dispatch (so they may vary depending on your system and hardware).
|
||||
*/
|
||||
inline simdjson_result<element> load_into_document(document& doc, const std::string &path) & noexcept;
|
||||
inline simdjson_result<element> load_into_document(document& doc, const std::string &path) && =delete;
|
||||
|
||||
/**
|
||||
* Parse a JSON document and return a temporary reference to it.
|
||||
*
|
||||
@@ -7579,10 +7626,14 @@ inline simdjson_result<size_t> parser::read_file(const std::string &path) noexce
|
||||
}
|
||||
|
||||
inline simdjson_result<element> parser::load(const std::string &path) & noexcept {
|
||||
return load_into_document(doc, path);
|
||||
}
|
||||
|
||||
inline simdjson_result<element> parser::load_into_document(document& provided_doc, const std::string &path) & noexcept {
|
||||
size_t len;
|
||||
auto _error = read_file(path).get(len);
|
||||
if (_error) { return _error; }
|
||||
return parse(loaded_bytes.get(), len, false);
|
||||
return parse_into_document(provided_doc, loaded_bytes.get(), len, false);
|
||||
}
|
||||
|
||||
inline simdjson_result<document_stream> parser::load_many(const std::string &path, size_t batch_size) noexcept {
|
||||
|
||||
Reference in New Issue
Block a user