simdjson  3.7.0
Ridiculously Fast JSON
implementation.h
1 #ifndef SIMDJSON_IMPLEMENTATION_H
2 #define SIMDJSON_IMPLEMENTATION_H
3 
4 #include "simdjson/internal/atomic_ptr.h"
5 #include "simdjson/internal/dom_parser_implementation.h"
6 
7 #include <memory>
8 
9 namespace simdjson {
10 
18 simdjson_warn_unused bool validate_utf8(const char * buf, size_t len) noexcept;
25 simdjson_inline simdjson_warn_unused bool validate_utf8(const std::string_view sv) noexcept {
26  return validate_utf8(sv.data(), sv.size());
27 }
28 
35 simdjson_inline simdjson_warn_unused bool validate_utf8(const std::string& s) noexcept {
36  return validate_utf8(s.data(), s.size());
37 }
38 
46 public:
47 
56  virtual const std::string &name() const { return _name; }
57 
66  virtual const std::string &description() const { return _description; }
67 
76 
84  virtual uint32_t required_instruction_sets() const { return _required_instruction_sets; }
85 
97  virtual error_code create_dom_parser_implementation(
98  size_t capacity,
99  size_t max_depth,
100  std::unique_ptr<internal::dom_parser_implementation> &dst
101  ) const noexcept = 0;
102 
116  simdjson_warn_unused virtual error_code minify(const uint8_t *buf, size_t len, uint8_t *dst, size_t &dst_len) const noexcept = 0;
117 
118 
128  simdjson_warn_unused virtual bool validate_utf8(const char *buf, size_t len) const noexcept = 0;
129 
130 protected:
132  simdjson_inline implementation(
133  std::string_view name,
134  std::string_view description,
135  uint32_t required_instruction_sets
136  ) :
137  _name(name),
138  _description(description),
139  _required_instruction_sets(required_instruction_sets)
140  {
141  }
142  virtual ~implementation()=default;
143 
144 private:
148  const std::string _name;
149 
153  const std::string _description;
154 
158  const uint32_t _required_instruction_sets;
159 };
160 
162 namespace internal {
163 
167 class available_implementation_list {
168 public:
170  simdjson_inline available_implementation_list() {}
172  size_t size() const noexcept;
174  const implementation * const *begin() const noexcept;
176  const implementation * const *end() const noexcept;
177 
191  const implementation * operator[](const std::string_view &name) const noexcept {
192  for (const implementation * impl : *this) {
193  if (impl->name() == name) { return impl; }
194  }
195  return nullptr;
196  }
197 
210  const implementation *detect_best_supported() const noexcept;
211 };
212 
213 } // namespace internal
214 
218 extern SIMDJSON_DLLIMPORTEXPORT const internal::available_implementation_list& get_available_implementations();
219 
225 extern SIMDJSON_DLLIMPORTEXPORT internal::atomic_ptr<const implementation>& get_active_implementation();
226 
227 } // namespace simdjson
228 
229 #endif // SIMDJSON_IMPLEMENTATION_H
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.
The top level simdjson namespace, containing everything the library provides.
Definition: base.h:8
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.
Definition: error.h:19
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.