mirror of
https://github.com/simdjson/simdjson
synced 2026-06-08 17:27:07 +00:00
Merge branch 'master' of https://github.com/simdjson/simdjson into builder_development_branch_extra
`document::get()&&` is now deprecated
This commit is contained in:
@@ -25,6 +25,7 @@ CompileFlags:
|
||||
Diagnostics:
|
||||
Suppress:
|
||||
- pp_including_mainfile_in_preamble
|
||||
- unused-includes
|
||||
---
|
||||
# Amalgamated files that require or partly define an implementation
|
||||
If:
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
name: Ubuntu ppc64le (GCC 11)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: uraimo/run-on-arch-action@v2
|
||||
name: Test
|
||||
id: runcmd
|
||||
with:
|
||||
arch: aarch64
|
||||
distro: ubuntu_latest
|
||||
githubToken: ${{ github.token }}
|
||||
install: |
|
||||
apt-get update -q -y
|
||||
apt-get install -y cmake make g++
|
||||
run: |
|
||||
cmake -DSIMDJSON_SANITIZE_UNDEFINED=ON -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -B build
|
||||
cmake --build build -j=2
|
||||
ctest --output-on-failure --test-dir build
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
fuzz-seconds: 600
|
||||
dry-run: false
|
||||
- name: Upload Crash
|
||||
uses: actions/upload-artifact@v1
|
||||
uses: actions/upload-artifact@v4
|
||||
if: failure() && steps.build.outcome == 'success'
|
||||
with:
|
||||
name: artifacts
|
||||
|
||||
@@ -24,7 +24,7 @@ jobs:
|
||||
echo "no trailing whitespace found, good!"
|
||||
fi
|
||||
- name: Archive whitespace patch
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: whitespace-patch
|
||||
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
- msystem: "MINGW64"
|
||||
install: mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-gcc
|
||||
type: Debug
|
||||
- msystem: "MINGW64"
|
||||
- msystem: "MINGW64"
|
||||
install: mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-gcc
|
||||
type: RelWithDebInfo
|
||||
env:
|
||||
|
||||
@@ -24,6 +24,6 @@ jobs:
|
||||
apt-get update -q -y
|
||||
apt-get install -y cmake make g++
|
||||
run: |
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -B build
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -B build
|
||||
cmake --build build -j=2
|
||||
ctest --output-on-failure --test-dir build
|
||||
|
||||
@@ -24,6 +24,6 @@ jobs:
|
||||
apt-get update -q -y
|
||||
apt-get install -y cmake make g++
|
||||
run: |
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -B build
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -B build
|
||||
cmake --build build -j=2
|
||||
ctest --output-on-failure --test-dir build
|
||||
|
||||
@@ -24,6 +24,6 @@ jobs:
|
||||
apt-get update -q -y
|
||||
apt-get install -y cmake make g++
|
||||
run: |
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -B build
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -B build
|
||||
cmake --build build -j=2
|
||||
ctest --output-on-failure --test-dir build
|
||||
|
||||
@@ -26,15 +26,15 @@ jobs:
|
||||
run: |
|
||||
cmake -G "${{matrix.gen}}" -A ${{matrix.arch}} -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -DBUILD_SHARED_LIBS=${{matrix.shared}} -B build
|
||||
- name: Build Debug
|
||||
run: cmake --build build --config ${{build_type}} --verbose
|
||||
run: cmake --build build --config ${{matrix.build_type}} --verbose
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd build
|
||||
ctest -C ${{build_type}} -LE explicitonly --output-on-failure
|
||||
ctest -C ${{matrix.build_type}} -LE explicitonly --output-on-failure
|
||||
- name: Install
|
||||
run: |
|
||||
cmake --install build --config ${{build_type}}
|
||||
cmake --install build --config ${{matrix.build_type}}
|
||||
- name: Test Installation
|
||||
run: |
|
||||
cmake -G "${{matrix.gen}}" -A ${{matrix.arch}} -B build_install_test tests/installation_tests/find
|
||||
cmake --build build_install_test --config ${{build_type}}
|
||||
cmake --build build_install_test --config ${{matrix.build_type}}
|
||||
Vendored
+6
-18
@@ -109,23 +109,11 @@
|
||||
"numbers": "cpp",
|
||||
"semaphore": "cpp",
|
||||
"stop_token": "cpp",
|
||||
"cfenv": "cpp",
|
||||
"format": "cpp",
|
||||
"xlocmes": "cpp",
|
||||
"xlocmon": "cpp",
|
||||
"xlocnum": "cpp",
|
||||
"xloctime": "cpp",
|
||||
"xutility": "cpp",
|
||||
"coroutine": "cpp",
|
||||
"xfacet": "cpp",
|
||||
"xhash": "cpp",
|
||||
"xiosbase": "cpp",
|
||||
"xlocale": "cpp",
|
||||
"xlocbuf": "cpp",
|
||||
"xlocinfo": "cpp",
|
||||
"xmemory": "cpp",
|
||||
"xstring": "cpp",
|
||||
"xtr1common": "cpp",
|
||||
"xtree": "cpp"
|
||||
"cfenv": "cpp"
|
||||
},
|
||||
"cmake.configureSettings": {
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "YES",
|
||||
"SIMDJSON_DEVELOPER_MODE": "ON",
|
||||
"SIMDJSON_SINGLEHEADER": "OFF"
|
||||
}
|
||||
}
|
||||
+17
-8
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.14)
|
||||
project(
|
||||
simdjson
|
||||
# The version number is modified by tools/release.py
|
||||
VERSION 3.10.0
|
||||
VERSION 3.10.1
|
||||
DESCRIPTION "Parsing gigabytes of JSON per second"
|
||||
HOMEPAGE_URL "https://simdjson.org/"
|
||||
LANGUAGES CXX C
|
||||
@@ -23,7 +23,11 @@ string(
|
||||
set(SIMDJSON_LIB_VERSION "23.0.0" CACHE STRING "simdjson library version")
|
||||
set(SIMDJSON_LIB_SOVERSION "23" CACHE STRING "simdjson library soversion")
|
||||
|
||||
option(SIMDJSON_BUILD_STATIC_LIB "Build simdjson_static library along with simdjson" OFF)
|
||||
option(SIMDJSON_BUILD_STATIC_LIB "Build simdjson_static library along with simdjson (only makes sense if BUILD_SHARED_LIBS=ON)" OFF)
|
||||
if(SIMDJSON_BUILD_STATIC_LIB AND NOT BUILD_SHARED_LIBS)
|
||||
message(WARNING "SIMDJSON_BUILD_STATIC_LIB only makes sense if BUILD_SHARED_LIBS is set to ON")
|
||||
message(WARNING "You might be building and installing a two identical static libraries.")
|
||||
endif()
|
||||
|
||||
option(SIMDJSON_ENABLE_THREADS "Link with thread support" ON)
|
||||
|
||||
@@ -51,6 +55,7 @@ endif()
|
||||
if(is_top_project)
|
||||
option(SIMDJSON_DEVELOPER_MODE "Enable targets for developing simdjson" OFF)
|
||||
option(BUILD_SHARED_LIBS "Build simdjson as a shared library" OFF)
|
||||
option(SIMDJSON_SINGLEHEADER "Disable singleheader generation" ON)
|
||||
endif()
|
||||
|
||||
include(cmake/handle-deprecations.cmake)
|
||||
@@ -155,11 +160,13 @@ endif()
|
||||
include(CMakePackageConfigHelpers)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
install(
|
||||
FILES singleheader/simdjson.h
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
COMPONENT simdjson_Development
|
||||
)
|
||||
if(SIMDJSON_SINGLEHEADER)
|
||||
install(
|
||||
FILES singleheader/simdjson.h
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
COMPONENT simdjson_Development
|
||||
)
|
||||
endif()
|
||||
|
||||
install(
|
||||
TARGETS simdjson
|
||||
@@ -203,6 +210,7 @@ if(SIMDJSON_BUILD_STATIC_LIB)
|
||||
TARGETS simdjson_static
|
||||
EXPORT simdjson_staticTargets
|
||||
ARCHIVE COMPONENT simdjson_Development
|
||||
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
)
|
||||
install(
|
||||
EXPORT simdjson_staticTargets
|
||||
@@ -286,8 +294,9 @@ add_subdirectory(tools) ## This needs to be before tests because of cxxopts
|
||||
# most of the data has been moved to https://github.com/simdjson/simdjson-data
|
||||
add_subdirectory(jsonexamples)
|
||||
|
||||
|
||||
if(SIMDJSON_SINGLEHEADER)
|
||||
add_subdirectory(singleheader)
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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.10.0"
|
||||
PROJECT_NUMBER = "3.10.1"
|
||||
|
||||
# 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
|
||||
|
||||
@@ -201,8 +201,8 @@ For the video inclined, <br />
|
||||
Funding
|
||||
-------
|
||||
|
||||
The work is supported by the Natural Sciences and Engineering Research Council of Canada under grant
|
||||
number RGPIN-2017-03910.
|
||||
The work is supported by the Natural Sciences and Engineering Research Council of Canada under grants
|
||||
RGPIN-2017-03910 and RGPIN-2024-03787.
|
||||
|
||||
[license]: LICENSE
|
||||
[license img]: https://img.shields.io/badge/License-Apache%202-blue.svg
|
||||
|
||||
+1
-1
@@ -125,7 +125,7 @@ Whitespace Characters:
|
||||
- **Nothing**
|
||||
|
||||
Some official formats **(non-exhaustive list)**:
|
||||
- [Newline-Delimited JSON (NDJSON)](http://ndjson.org/)
|
||||
- [Newline-Delimited JSON (NDJSON)](https://github.com/ndjson/ndjson-spec)
|
||||
- [JSON lines (JSONL)](http://jsonlines.org/)
|
||||
- [Record separator-delimited JSON (RFC 7464)](https://tools.ietf.org/html/rfc7464) <- Not supported by JsonStream!
|
||||
- [More on Wikipedia...](https://en.wikipedia.org/wiki/JSON_streaming)
|
||||
|
||||
@@ -35,6 +35,12 @@ simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
|
||||
return input_num & (input_num-1);
|
||||
}
|
||||
|
||||
// We sometimes call leading_zeroes on inputs that are zero,
|
||||
// but the algorithms do not end up using the returned value.
|
||||
// Sadly, sanitizers are not smart enough to figure it out.
|
||||
// Applies only when SIMDJSON_PREFER_REVERSE_BITS is defined and true.
|
||||
// (See below.)
|
||||
SIMDJSON_NO_SANITIZE_UNDEFINED
|
||||
/* result might be undefined when input_num is zero */
|
||||
simdjson_inline int leading_zeroes(uint64_t input_num) {
|
||||
#ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
|
||||
|
||||
@@ -51,6 +51,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace arm64
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_ARM64_NUMBERPARSING_DEFS_H
|
||||
|
||||
@@ -50,6 +50,8 @@ double from_chars(const char *first, const char* end) noexcept;
|
||||
#define SIMDJSON_ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n)-1)) == 0)
|
||||
|
||||
#if SIMDJSON_REGULAR_VISUAL_STUDIO
|
||||
// We could use [[deprecated]] but it requires C++14
|
||||
#define simdjson_deprecated __declspec(deprecated)
|
||||
|
||||
#define simdjson_really_inline __forceinline
|
||||
#define simdjson_never_inline __declspec(noinline)
|
||||
@@ -88,6 +90,8 @@ double from_chars(const char *first, const char* end) noexcept;
|
||||
#define SIMDJSON_POP_DISABLE_UNUSED_WARNINGS
|
||||
|
||||
#else // SIMDJSON_REGULAR_VISUAL_STUDIO
|
||||
// We could use [[deprecated]] but it requires C++14
|
||||
#define simdjson_deprecated __attribute__((deprecated))
|
||||
|
||||
#define simdjson_really_inline inline __attribute__((always_inline))
|
||||
#define simdjson_never_inline inline __attribute__((noinline))
|
||||
|
||||
@@ -75,6 +75,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace fallback
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
|
||||
|
||||
@@ -574,7 +574,6 @@ simdjson_unused simdjson_inline simdjson_result<number_type> get_number_type(con
|
||||
// Our objective is accurate parsing (ULP of 0) at high speed.
|
||||
template<typename W>
|
||||
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
|
||||
|
||||
//
|
||||
// Check for minus sign
|
||||
//
|
||||
|
||||
@@ -3,17 +3,15 @@
|
||||
#ifndef SIMDJSON_CONDITIONAL_INCLUDE
|
||||
#define SIMDJSON_GENERIC_ONDEMAND_DOCUMENT_INL_H
|
||||
#include "simdjson/generic/ondemand/base.h"
|
||||
#include "simdjson/generic/ondemand/array-inl.h"
|
||||
#include "simdjson/generic/ondemand/array_iterator.h"
|
||||
#include "simdjson/generic/ondemand/document.h"
|
||||
#include "simdjson/generic/ondemand/json_iterator-inl.h"
|
||||
#include "simdjson/generic/ondemand/json_path_to_pointer_conversion.h"
|
||||
#include "simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h"
|
||||
#include "simdjson/generic/ondemand/json_type.h"
|
||||
#include "simdjson/generic/ondemand/object-inl.h"
|
||||
#include "simdjson/generic/ondemand/raw_json_string.h"
|
||||
#include "simdjson/generic/ondemand/value.h"
|
||||
#include "simdjson/generic/ondemand/value-inl.h"
|
||||
#include "simdjson/generic/ondemand/array-inl.h"
|
||||
#include "simdjson/generic/ondemand/json_iterator-inl.h"
|
||||
#include "simdjson/generic/ondemand/object-inl.h"
|
||||
#include "simdjson/generic/ondemand/value_iterator-inl.h"
|
||||
#include "simdjson/generic/ondemand/deserialize.h"
|
||||
#endif // SIMDJSON_CONDITIONAL_INCLUDE
|
||||
@@ -182,7 +180,9 @@ template<> simdjson_inline error_code document::get(value& out) & noexcept { ret
|
||||
|
||||
#if SIMDJSON_EXCEPTIONS
|
||||
template <class T>
|
||||
simdjson_inline document::operator T() noexcept(false) { return get<T>(); }
|
||||
simdjson_deprecated simdjson_inline document::operator T() && noexcept(false) { return get<T>(); }
|
||||
template <class T>
|
||||
simdjson_inline document::operator T() & noexcept(false) { return get<T>(); }
|
||||
simdjson_inline document::operator array() & noexcept(false) { return get_array(); }
|
||||
simdjson_inline document::operator object() & noexcept(false) { return get_object(); }
|
||||
simdjson_inline document::operator uint64_t() noexcept(false) { return get_uint64(); }
|
||||
@@ -469,7 +469,7 @@ simdjson_inline simdjson_result<T> simdjson_result<SIMDJSON_IMPLEMENTATION::onde
|
||||
return first.get<T>();
|
||||
}
|
||||
template<typename T>
|
||||
simdjson_inline simdjson_result<T> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get() && noexcept {
|
||||
simdjson_deprecated simdjson_inline simdjson_result<T> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get() && noexcept {
|
||||
if (error()) { return error(); }
|
||||
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first).get<T>();
|
||||
}
|
||||
@@ -485,7 +485,7 @@ simdjson_inline error_code simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::do
|
||||
}
|
||||
|
||||
template<> simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>() & noexcept = delete;
|
||||
template<> simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>() && noexcept {
|
||||
template<> simdjson_deprecated simdjson_inline simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document> simdjson_result<SIMDJSON_IMPLEMENTATION::ondemand::document>::get<SIMDJSON_IMPLEMENTATION::ondemand::document>() && noexcept {
|
||||
if (error()) { return error(); }
|
||||
return std::forward<SIMDJSON_IMPLEMENTATION::ondemand::document>(first);
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ public:
|
||||
* is provided.
|
||||
*/
|
||||
template<typename T>
|
||||
simdjson_inline simdjson_result<T> get() &&
|
||||
simdjson_deprecated simdjson_inline simdjson_result<T> get() &&
|
||||
#ifdef __cpp_concepts
|
||||
noexcept(deserializable<T, document> ? nothrow_deserializable<T, document> : true)
|
||||
#else
|
||||
@@ -254,7 +254,7 @@ public:
|
||||
#endif
|
||||
}
|
||||
/** @overload template<typename T> error_code get(T &out) & noexcept */
|
||||
template<typename T> simdjson_inline error_code get(T &out) && noexcept;
|
||||
template<typename T> simdjson_deprecated simdjson_inline error_code get(T &out) && noexcept;
|
||||
|
||||
#if SIMDJSON_EXCEPTIONS
|
||||
/**
|
||||
@@ -267,7 +267,10 @@ public:
|
||||
* @returns An instance of type T
|
||||
*/
|
||||
template <class T>
|
||||
explicit simdjson_inline operator T() noexcept(false);
|
||||
explicit simdjson_inline operator T() & noexcept(false);
|
||||
template <class T>
|
||||
explicit simdjson_deprecated simdjson_inline operator T() && noexcept(false);
|
||||
|
||||
/**
|
||||
* Cast this JSON value to an array.
|
||||
*
|
||||
@@ -833,7 +836,7 @@ public:
|
||||
simdjson_inline simdjson_result<bool> is_null() noexcept;
|
||||
|
||||
template<typename T> simdjson_inline simdjson_result<T> get() & noexcept;
|
||||
template<typename T> simdjson_inline simdjson_result<T> get() && noexcept;
|
||||
template<typename T> simdjson_deprecated simdjson_inline simdjson_result<T> get() && noexcept;
|
||||
|
||||
template<typename T> simdjson_inline error_code get(T &out) & noexcept;
|
||||
template<typename T> simdjson_inline error_code get(T &out) && noexcept;
|
||||
|
||||
@@ -316,7 +316,7 @@ private:
|
||||
friend class document;
|
||||
friend class json_iterator;
|
||||
friend struct simdjson_result<ondemand::document_stream>;
|
||||
friend struct internal::simdjson_result_base<ondemand::document_stream>;
|
||||
friend struct simdjson::internal::simdjson_result_base<ondemand::document_stream>;
|
||||
}; // document_stream
|
||||
|
||||
} // namespace ondemand
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#ifndef SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_INL_H
|
||||
#define SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_INL_H
|
||||
|
||||
#ifndef SIMDJSON_CONDITIONAL_INCLUDE
|
||||
#define SIMDJSON_GENERIC_ONDEMAND_JSON_PATH_TO_POINTER_CONVERSION_INL_H
|
||||
#include "simdjson/generic/ondemand/json_path_to_pointer_conversion.h"
|
||||
#endif // SIMDJSON_CONDITIONAL_INCLUDE
|
||||
|
||||
namespace simdjson {
|
||||
namespace SIMDJSON_IMPLEMENTATION {}
|
||||
namespace ondemand {
|
||||
|
||||
simdjson_inline std::string json_path_to_pointer_conversion(std::string_view json_path) {
|
||||
if (json_path.empty() || (json_path.front() != '.' && json_path.front() != '[') {
|
||||
return "-1"; // Sentinel value to be handled as an error by the caller.
|
||||
}
|
||||
|
||||
std::string result;
|
||||
// Reserve space to reduce allocations, adjusting for potential increases due
|
||||
// to escaping.
|
||||
result.reserve(json_path.size() * 2);
|
||||
|
||||
// Skip the initial '.' as it's assumed every path starts with it.
|
||||
size_t i = 0;
|
||||
|
||||
while (i < json_path.length()) {
|
||||
if (json_path[i] == '.') {
|
||||
result += '/';
|
||||
} else if (json_path[i] == '[') {
|
||||
result += '/';
|
||||
++i; // Move past the '['
|
||||
while (i < json_path.length() && json_path[i] != ']') {
|
||||
if (json_path[i] == '~') {
|
||||
result += "~0";
|
||||
} else if (json_path[i] == '/') {
|
||||
result += "~1";
|
||||
} else {
|
||||
result += json_path[i];
|
||||
}
|
||||
++i;
|
||||
}
|
||||
if (i == json_path.length() || json_path[i] != ']') {
|
||||
return "-1"; // Returning sentinel value that will be handled as an error by the caller
|
||||
}
|
||||
} else {
|
||||
if (json_path[i] == '~') {
|
||||
result += "~0";
|
||||
} else if (json_path[i] == '/') {
|
||||
result += "~1";
|
||||
} else {
|
||||
result += json_path[i];
|
||||
}
|
||||
}
|
||||
++i;
|
||||
}
|
||||
|
||||
return simdjson_result<std::string>(result);
|
||||
}
|
||||
|
||||
|
||||
} // namespace ondemand
|
||||
} // namespace SIMDJSON_IMPLEMENTATION
|
||||
} // namespace simdjson
|
||||
|
||||
#endif // SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_INL_H
|
||||
@@ -1,22 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#ifndef SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_H
|
||||
#define SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_H
|
||||
|
||||
namespace simdjson {
|
||||
namespace SIMDJSON_IMPLEMENTATION {
|
||||
namespace internal {
|
||||
|
||||
/**
|
||||
* Converts JSONPath to JSON Pointer.
|
||||
* @param json_path The JSONPath string to be converted.
|
||||
* @return A string containing the equivalent JSON Pointer.
|
||||
* @throws simdjson_error If the conversion fails.
|
||||
*/
|
||||
simdjson_inline std::string json_path_to_pointer_conversion(std::string_view json_path);
|
||||
|
||||
} // namespace internal
|
||||
} // namespace SIMDJSON_IMPLEMENTATION
|
||||
} // namespace simdjson
|
||||
|
||||
#endif // SIMDJSON_JSON_PATH_TO_POINTER_CONVERSION_H
|
||||
@@ -340,7 +340,7 @@ public:
|
||||
|
||||
private:
|
||||
/** @private [for benchmarking access] The implementation to use */
|
||||
std::unique_ptr<internal::dom_parser_implementation> implementation{};
|
||||
std::unique_ptr<simdjson::internal::dom_parser_implementation> implementation{};
|
||||
size_t _capacity{0};
|
||||
size_t _max_capacity;
|
||||
size_t _max_depth{DEFAULT_MAX_DEPTH};
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
#include "simdjson/generic/ondemand/array.h"
|
||||
#include "simdjson/generic/ondemand/array_iterator.h"
|
||||
#include "simdjson/generic/ondemand/json_iterator.h"
|
||||
#include "simdjson/generic/ondemand/json_path_to_pointer_conversion.h"
|
||||
#include "simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h"
|
||||
#include "simdjson/generic/ondemand/json_type.h"
|
||||
#include "simdjson/generic/ondemand/object.h"
|
||||
#include "simdjson/generic/ondemand/raw_json_string.h"
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
#include "simdjson/generic/atomparsing.h"
|
||||
#include "simdjson/generic/numberparsing.h"
|
||||
#include "simdjson/generic/ondemand/json_iterator.h"
|
||||
#include "simdjson/generic/ondemand/value_iterator.h"
|
||||
#include "simdjson/generic/ondemand/json_type-inl.h"
|
||||
#include "simdjson/generic/ondemand/raw_json_string-inl.h"
|
||||
#include "simdjson/generic/ondemand/value_iterator.h"
|
||||
#endif // SIMDJSON_CONDITIONAL_INCLUDE
|
||||
|
||||
namespace simdjson {
|
||||
|
||||
@@ -36,6 +36,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace lasx
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_LASX_NUMBERPARSING_DEFS_H
|
||||
|
||||
@@ -36,6 +36,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace lsx
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_LSX_NUMBERPARSING_DEFS_H
|
||||
|
||||
@@ -53,6 +53,9 @@ inline padded_string::padded_string(const char *data, size_t length) noexcept
|
||||
if ((data != nullptr) && (data_ptr != nullptr)) {
|
||||
std::memcpy(data_ptr, data, length);
|
||||
}
|
||||
if (data_ptr == nullptr) {
|
||||
viable_size = 0;
|
||||
}
|
||||
}
|
||||
#ifdef __cpp_char8_t
|
||||
inline padded_string::padded_string(const char8_t *data, size_t length) noexcept
|
||||
@@ -60,12 +63,17 @@ inline padded_string::padded_string(const char8_t *data, size_t length) noexcept
|
||||
if ((data != nullptr) && (data_ptr != nullptr)) {
|
||||
std::memcpy(data_ptr, reinterpret_cast<const char *>(data), length);
|
||||
}
|
||||
if (data_ptr == nullptr) {
|
||||
viable_size = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// note: do not pass std::string arguments by value
|
||||
inline padded_string::padded_string(const std::string & str_ ) noexcept
|
||||
: viable_size(str_.size()), data_ptr(internal::allocate_padded_buffer(str_.size())) {
|
||||
if (data_ptr != nullptr) {
|
||||
if (data_ptr == nullptr) {
|
||||
viable_size = 0;
|
||||
} else {
|
||||
std::memcpy(data_ptr, str_.data(), str_.size());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,4 +201,43 @@ using std::size_t;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__
|
||||
#define SIMDJSON_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||
#elif defined _WIN32
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 0
|
||||
#else
|
||||
#if defined(__APPLE__) || defined(__FreeBSD__)
|
||||
#include <machine/endian.h>
|
||||
#elif defined(sun) || defined(__sun)
|
||||
#include <sys/byteorder.h>
|
||||
#elif defined(__MVS__)
|
||||
#include <sys/endian.h>
|
||||
#else
|
||||
#ifdef __has_include
|
||||
#if __has_include(<endian.h>)
|
||||
#include <endian.h>
|
||||
#endif //__has_include(<endian.h>)
|
||||
#endif //__has_include
|
||||
#endif
|
||||
#
|
||||
#ifndef __BYTE_ORDER__
|
||||
// safe choice
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 0
|
||||
#endif
|
||||
#
|
||||
#ifndef __ORDER_LITTLE_ENDIAN__
|
||||
// safe choice
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 0
|
||||
#endif
|
||||
#
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 0
|
||||
#else
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#endif // SIMDJSON_PORTABILITY_H
|
||||
|
||||
@@ -60,6 +60,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace ppc64
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_PPC64_NUMBERPARSING_DEFS_H
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#define SIMDJSON_SIMDJSON_VERSION_H
|
||||
|
||||
/** The version of simdjson being used (major.minor.revision) */
|
||||
#define SIMDJSON_VERSION "3.10.0"
|
||||
#define SIMDJSON_VERSION "3.10.1"
|
||||
|
||||
namespace simdjson {
|
||||
enum {
|
||||
@@ -19,7 +19,7 @@ enum {
|
||||
/**
|
||||
* The revision (major.minor.REVISION) of simdjson being used.
|
||||
*/
|
||||
SIMDJSON_VERSION_REVISION = 0
|
||||
SIMDJSON_VERSION_REVISION = 1
|
||||
};
|
||||
} // namespace simdjson
|
||||
|
||||
|
||||
@@ -323,6 +323,10 @@ class Amalgamator:
|
||||
for line in fid2:
|
||||
line = line.rstrip('\n')
|
||||
|
||||
# Ignore #pragma once, it causes warnings if it ends up in a .cpp file
|
||||
if re.search(r'^#pragma once$', line):
|
||||
continue
|
||||
|
||||
# Ignore lines inside #ifndef SIMDJSON_CONDITIONAL_INCLUDE
|
||||
if re.search(r'^#ifndef\s+SIMDJSON_CONDITIONAL_INCLUDE\s*$', line):
|
||||
assert file.is_conditional_include, f"{file} uses #ifndef SIMDJSON_CONDITIONAL_INCLUDE but is not an amalgamated file!"
|
||||
|
||||
+116
-10
@@ -1,4 +1,4 @@
|
||||
/* auto-generated on 2024-08-01 09:31:50 -0400. Do not edit! */
|
||||
/* auto-generated on 2024-09-17 15:48:50 -0400. Do not edit! */
|
||||
/* including simdjson.cpp: */
|
||||
/* begin file simdjson.cpp */
|
||||
#define SIMDJSON_SRC_SIMDJSON_CPP
|
||||
@@ -284,6 +284,45 @@ using std::size_t;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__
|
||||
#define SIMDJSON_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||
#elif defined _WIN32
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 0
|
||||
#else
|
||||
#if defined(__APPLE__) || defined(__FreeBSD__)
|
||||
#include <machine/endian.h>
|
||||
#elif defined(sun) || defined(__sun)
|
||||
#include <sys/byteorder.h>
|
||||
#elif defined(__MVS__)
|
||||
#include <sys/endian.h>
|
||||
#else
|
||||
#ifdef __has_include
|
||||
#if __has_include(<endian.h>)
|
||||
#include <endian.h>
|
||||
#endif //__has_include(<endian.h>)
|
||||
#endif //__has_include
|
||||
#endif
|
||||
#
|
||||
#ifndef __BYTE_ORDER__
|
||||
// safe choice
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 0
|
||||
#endif
|
||||
#
|
||||
#ifndef __ORDER_LITTLE_ENDIAN__
|
||||
// safe choice
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 0
|
||||
#endif
|
||||
#
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 0
|
||||
#else
|
||||
#define SIMDJSON_IS_BIG_ENDIAN 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#endif // SIMDJSON_PORTABILITY_H
|
||||
/* end file simdjson/portability.h */
|
||||
|
||||
@@ -332,6 +371,8 @@ double from_chars(const char *first, const char* end) noexcept;
|
||||
#define SIMDJSON_ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n)-1)) == 0)
|
||||
|
||||
#if SIMDJSON_REGULAR_VISUAL_STUDIO
|
||||
// We could use [[deprecated]] but it requires C++14
|
||||
#define simdjson_deprecated __declspec(deprecated)
|
||||
|
||||
#define simdjson_really_inline __forceinline
|
||||
#define simdjson_never_inline __declspec(noinline)
|
||||
@@ -370,6 +411,8 @@ double from_chars(const char *first, const char* end) noexcept;
|
||||
#define SIMDJSON_POP_DISABLE_UNUSED_WARNINGS
|
||||
|
||||
#else // SIMDJSON_REGULAR_VISUAL_STUDIO
|
||||
// We could use [[deprecated]] but it requires C++14
|
||||
#define simdjson_deprecated __attribute__((deprecated))
|
||||
|
||||
#define simdjson_really_inline inline __attribute__((always_inline))
|
||||
#define simdjson_never_inline inline __attribute__((noinline))
|
||||
@@ -545,7 +588,6 @@ SIMDJSON_PUSH_DISABLE_ALL_WARNINGS
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef NONSTD_SV_LITE_H_INCLUDED
|
||||
#define NONSTD_SV_LITE_H_INCLUDED
|
||||
@@ -7635,6 +7677,12 @@ simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
|
||||
return input_num & (input_num-1);
|
||||
}
|
||||
|
||||
// We sometimes call leading_zeroes on inputs that are zero,
|
||||
// but the algorithms do not end up using the returned value.
|
||||
// Sadly, sanitizers are not smart enough to figure it out.
|
||||
// Applies only when SIMDJSON_PREFER_REVERSE_BITS is defined and true.
|
||||
// (See below.)
|
||||
SIMDJSON_NO_SANITIZE_UNDEFINED
|
||||
/* result might be undefined when input_num is zero */
|
||||
simdjson_inline int leading_zeroes(uint64_t input_num) {
|
||||
#ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
|
||||
@@ -7807,7 +7855,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace arm64
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_ARM64_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/arm64/numberparsing_defs.h */
|
||||
@@ -9424,7 +9478,6 @@ simdjson_unused simdjson_inline simdjson_result<number_type> get_number_type(con
|
||||
// Our objective is accurate parsing (ULP of 0) at high speed.
|
||||
template<typename W>
|
||||
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
|
||||
|
||||
//
|
||||
// Check for minus sign
|
||||
//
|
||||
@@ -10391,6 +10444,12 @@ simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
|
||||
return input_num & (input_num-1);
|
||||
}
|
||||
|
||||
// We sometimes call leading_zeroes on inputs that are zero,
|
||||
// but the algorithms do not end up using the returned value.
|
||||
// Sadly, sanitizers are not smart enough to figure it out.
|
||||
// Applies only when SIMDJSON_PREFER_REVERSE_BITS is defined and true.
|
||||
// (See below.)
|
||||
SIMDJSON_NO_SANITIZE_UNDEFINED
|
||||
/* result might be undefined when input_num is zero */
|
||||
simdjson_inline int leading_zeroes(uint64_t input_num) {
|
||||
#ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
|
||||
@@ -10563,7 +10622,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace arm64
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_ARM64_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/arm64/numberparsing_defs.h */
|
||||
@@ -15766,7 +15831,6 @@ simdjson_unused simdjson_inline simdjson_result<number_type> get_number_type(con
|
||||
// Our objective is accurate parsing (ULP of 0) at high speed.
|
||||
template<typename W>
|
||||
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
|
||||
|
||||
//
|
||||
// Check for minus sign
|
||||
//
|
||||
@@ -21980,7 +22044,6 @@ simdjson_unused simdjson_inline simdjson_result<number_type> get_number_type(con
|
||||
// Our objective is accurate parsing (ULP of 0) at high speed.
|
||||
template<typename W>
|
||||
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
|
||||
|
||||
//
|
||||
// Check for minus sign
|
||||
//
|
||||
@@ -26746,7 +26809,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace ppc64
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_PPC64_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/ppc64/numberparsing_defs.h */
|
||||
@@ -28350,7 +28419,6 @@ simdjson_unused simdjson_inline simdjson_result<number_type> get_number_type(con
|
||||
// Our objective is accurate parsing (ULP of 0) at high speed.
|
||||
template<typename W>
|
||||
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
|
||||
|
||||
//
|
||||
// Check for minus sign
|
||||
//
|
||||
@@ -29490,7 +29558,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace ppc64
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_PPC64_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/ppc64/numberparsing_defs.h */
|
||||
@@ -35086,7 +35160,6 @@ simdjson_unused simdjson_inline simdjson_result<number_type> get_number_type(con
|
||||
// Our objective is accurate parsing (ULP of 0) at high speed.
|
||||
template<typename W>
|
||||
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
|
||||
|
||||
//
|
||||
// Check for minus sign
|
||||
//
|
||||
@@ -40172,7 +40245,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace lsx
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_LSX_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/lsx/numberparsing_defs.h */
|
||||
@@ -41646,7 +41725,6 @@ simdjson_unused simdjson_inline simdjson_result<number_type> get_number_type(con
|
||||
// Our objective is accurate parsing (ULP of 0) at high speed.
|
||||
template<typename W>
|
||||
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
|
||||
|
||||
//
|
||||
// Check for minus sign
|
||||
//
|
||||
@@ -42701,7 +42779,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace lsx
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_LSX_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/lsx/numberparsing_defs.h */
|
||||
@@ -46155,7 +46239,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace lasx
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_LASX_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/lasx/numberparsing_defs.h */
|
||||
@@ -47645,7 +47735,6 @@ simdjson_unused simdjson_inline simdjson_result<number_type> get_number_type(con
|
||||
// Our objective is accurate parsing (ULP of 0) at high speed.
|
||||
template<typename W>
|
||||
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
|
||||
|
||||
//
|
||||
// Check for minus sign
|
||||
//
|
||||
@@ -48700,7 +48789,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace lasx
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_LASX_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/lasx/numberparsing_defs.h */
|
||||
@@ -52184,7 +52279,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace fallback
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/fallback/numberparsing_defs.h */
|
||||
@@ -53243,7 +53344,6 @@ simdjson_unused simdjson_inline simdjson_result<number_type> get_number_type(con
|
||||
// Our objective is accurate parsing (ULP of 0) at high speed.
|
||||
template<typename W>
|
||||
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
|
||||
|
||||
//
|
||||
// Check for minus sign
|
||||
//
|
||||
@@ -54318,7 +54418,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
|
||||
} // namespace fallback
|
||||
} // namespace simdjson
|
||||
|
||||
#ifndef SIMDJSON_SWAR_NUMBER_PARSING
|
||||
#if SIMDJSON_IS_BIG_ENDIAN
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 0
|
||||
#else
|
||||
#define SIMDJSON_SWAR_NUMBER_PARSING 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
|
||||
/* end file simdjson/fallback/numberparsing_defs.h */
|
||||
|
||||
+335
-213
File diff suppressed because it is too large
Load Diff
@@ -13,7 +13,8 @@ function(add_dual_compile_test TEST_NAME)
|
||||
target_compile_definitions(${TEST_NAME}_should_not_compile PRIVATE COMPILATION_TEST_USE_FAILING_CODE=1)
|
||||
endfunction(add_dual_compile_test)
|
||||
|
||||
|
||||
add_dual_compile_test(iterate_object)
|
||||
add_dual_compile_test(iterate_array)
|
||||
add_dual_compile_test(iterate_char_star)
|
||||
add_dual_compile_test(iterate_string_view)
|
||||
add_dual_compile_test(iterate_temporary_buffer)
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
|
||||
#include <iostream>
|
||||
#include "simdjson.h"
|
||||
|
||||
using namespace simdjson;
|
||||
|
||||
int main() {
|
||||
auto json = "[1]"_padded;
|
||||
ondemand::parser parser;
|
||||
auto f = [](ondemand::parser& p, simdjson::padded_string& jsons) -> ondemand::document {
|
||||
ondemand::document doc;
|
||||
auto error = p.iterate(jsons).get(doc);
|
||||
if(error) { std::abort(); }
|
||||
return doc;
|
||||
};
|
||||
ondemand::array arrayv;
|
||||
#if COMPILATION_TEST_USE_FAILING_CODE
|
||||
// Not allowed as this would be unsafe, the document must remain alive.
|
||||
auto error = f(parser).get_array().get(arrayv);
|
||||
#else
|
||||
ondemand::document doc = f(parser, json);
|
||||
auto error = doc.get_array().get(arrayv);
|
||||
#endif
|
||||
if(error) {
|
||||
std::cout << "Failure" << std::endl;
|
||||
}
|
||||
int64_t a = 0;
|
||||
error = arrayv.at(0).get_int64().get(a);
|
||||
if(error) {
|
||||
std::cout << "failure" << std::endl;
|
||||
}
|
||||
printf("a = %d\n", (int)a);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
|
||||
#include <iostream>
|
||||
#include "simdjson.h"
|
||||
|
||||
using namespace simdjson;
|
||||
|
||||
int main() {
|
||||
auto json = "{\"a\":1}"_padded;
|
||||
ondemand::parser parser;
|
||||
auto f = [](ondemand::parser& p, simdjson::padded_string& jsons) -> ondemand::document {
|
||||
ondemand::document doc;
|
||||
auto error = p.iterate(jsons).get(doc);
|
||||
if(error) { std::abort(); }
|
||||
return doc;
|
||||
};
|
||||
ondemand::object objv;
|
||||
#if COMPILATION_TEST_USE_FAILING_CODE
|
||||
// Not allowed as this would be unsafe, the document must remain alive.
|
||||
auto error = f(parser).get_object().get(objv);
|
||||
#else
|
||||
ondemand::document doc = f(parser, json);
|
||||
auto error = doc.get_object().get(objv);
|
||||
#endif
|
||||
if(error) {
|
||||
std::cout << "Failure" << std::endl;
|
||||
}
|
||||
int64_t a = 0;
|
||||
error = objv["a"].get_int64().get(a);
|
||||
if(error) {
|
||||
std::cout << "failure" << std::endl;
|
||||
}
|
||||
printf("a = %d\n", (int)a);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
@@ -59,6 +59,22 @@ void compilation_test_3() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Do not run this, it is only meant to compile
|
||||
void compilation_test_4() {
|
||||
const padded_string bogus = ""_padded;
|
||||
ondemand::parser parser;
|
||||
int64_t x1 = (int64_t)parser.iterate(bogus);
|
||||
double x2 = (double)parser.iterate(bogus);
|
||||
std::string_view x = (std::string_view)parser.iterate(bogus);
|
||||
uint64_t x3 = (uint64_t)parser.iterate(bogus);
|
||||
bool x4 = (bool)parser.iterate(bogus);
|
||||
(void) x1;
|
||||
(void) x2;
|
||||
(void) x3;
|
||||
(void) x4;
|
||||
(void) x;
|
||||
}
|
||||
#endif // SIMDJSON_EXCEPTIONS
|
||||
|
||||
int main(void) {
|
||||
|
||||
@@ -164,8 +164,7 @@ namespace json_pointer_tests {
|
||||
ASSERT_TRUE(is_scalar);
|
||||
ASSERT_ERROR(doc.at_pointer("").get(val), simdjson::SCALAR_DOCUMENT_AS_VALUE);
|
||||
std::cout << " checking true"<< std::endl;
|
||||
ASSERT_SUCCESS(parser.iterate(true_json).get(doc));
|
||||
ASSERT_SUCCESS(doc.is_scalar().get(is_scalar));
|
||||
ASSERT_SUCCESS(parser.iterate(true_json).is_scalar().get(is_scalar));
|
||||
ASSERT_TRUE(is_scalar);
|
||||
ASSERT_ERROR(doc.at_pointer("").get(val), simdjson::SCALAR_DOCUMENT_AS_VALUE);
|
||||
std::cout << " checking object"<< std::endl;
|
||||
|
||||
Reference in New Issue
Block a user