1 #ifndef SIMDJSON_IMPLEMENTATION_H
2 #define SIMDJSON_IMPLEMENTATION_H
4 #include "simdjson/common_defs.h"
5 #include "simdjson/internal/dom_parser_implementation.h"
6 #include "simdjson/internal/isadetection.h"
20 simdjson_warn_unused
bool validate_utf8(
const char * buf,
size_t len) noexcept;
27 simdjson_inline simdjson_warn_unused
bool validate_utf8(
const std::string_view sv) noexcept {
37 simdjson_inline simdjson_warn_unused
bool validate_utf8(
const std::string& s) noexcept {
62 virtual const std::string &
name()
const {
return _name; }
72 virtual const std::string &
description()
const {
return _description; }
90 virtual uint32_t required_instruction_sets()
const {
return _required_instruction_sets; }
103 virtual error_code create_dom_parser_implementation(
106 std::unique_ptr<internal::dom_parser_implementation> &dst
107 )
const noexcept = 0;
122 simdjson_warn_unused
virtual error_code minify(
const uint8_t *buf,
size_t len, uint8_t *dst,
size_t &dst_len)
const noexcept = 0;
134 simdjson_warn_unused
virtual bool validate_utf8(
const char *buf,
size_t len)
const noexcept = 0;
139 std::string_view
name,
141 uint32_t required_instruction_sets
145 _required_instruction_sets(required_instruction_sets)
154 const std::string _name;
159 const std::string _description;
164 const uint32_t _required_instruction_sets;
173 class available_implementation_list {
176 simdjson_inline available_implementation_list() {}
178 size_t size() const noexcept;
180 const implementation * const *begin() const noexcept;
182 const implementation * const *end() const noexcept;
197 const implementation * operator[](const std::string_view &name) const noexcept {
198 for (
const implementation * impl : *
this) {
199 if (impl->name() == name) {
return impl; }
216 const implementation *detect_best_supported() const noexcept;
222 atomic_ptr(T *_ptr) : ptr{_ptr} {}
224 operator const T*()
const {
return ptr.load(); }
225 const T& operator*()
const {
return *ptr; }
226 const T* operator->()
const {
return ptr.load(); }
228 operator T*() {
return ptr.load(); }
229 T& operator*() {
return *ptr; }
230 T* operator->() {
return ptr.load(); }
231 atomic_ptr& operator=(T *_ptr) { ptr = _ptr;
return *
this; }
An implementation of simdjson for a particular CPU architecture.
virtual const std::string & name() const
The name of this implementation.
virtual const std::string & description() const
The description of this implementation.
virtual simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) const noexcept=0
Validate the UTF-8 string.
bool supported_by_runtime_system() const
The instruction sets this implementation is compiled against and the current CPU match.
We want to support argument-dependent lookup (ADL).
simdjson_warn_unused bool validate_utf8(const char *buf, size_t len) noexcept
Validate the UTF-8 string.
error_code
All possible errors returned by simdjson.
SIMDJSON_DLLIMPORTEXPORT const internal::available_implementation_list & get_available_implementations()
The list of available implementations compiled into simdjson.
SIMDJSON_DLLIMPORTEXPORT internal::atomic_ptr< const implementation > & get_active_implementation()
The active implementation.