3#ifndef AWKWARD_IO_JSON_H_
4#define AWKWARD_IO_JSON_H_
24 virtual int64_t
read(int64_t num_bytes,
char* buffer) = 0;
48 const char* nan_string =
nullptr,
49 const char* posinf_string =
nullptr,
50 const char* neginf_string =
nullptr);
57 const char* nan_string,
58 const char* posinf_string,
59 const char* neginf_string,
60 const char* jsonassembly,
66 return current_stack_depth_;
71 return current_instruction_;
76 return instructions_.data()[current_instruction_ * 4];
81 return instructions_.data()[current_instruction_ * 4 + 1];
86 return instructions_.data()[current_instruction_ * 4 + 2];
91 return instructions_.data()[current_instruction_ * 4 + 3];
96 current_instruction_++;
101 current_instruction_--;
106 instruction_stack_.data()[current_stack_depth_] = current_instruction_;
107 current_stack_depth_++;
108 current_instruction_ = jump_to;
113 current_stack_depth_--;
114 current_instruction_ = instruction_stack_.data()[current_stack_depth_];
119 int64_t* offsets = string_offsets_.data();
120 char* chars = characters_.data();
124 for (int64_t i = stringsstart; i <
argument3(); i++) {
126 stop = offsets[i + 1];
127 if (strncmp(str, &chars[start], (
size_t)(stop - start)) == 0) {
128 return i - stringsstart;
135 inline int64_t
find_key(
const char* str)
noexcept {
136 int64_t* offsets = string_offsets_.data();
137 char* chars = characters_.data();
141 for (int64_t i = current_instruction_ + 1; i <= current_instruction_ +
argument1(); i++) {
142 stringi = instructions_.data()[i * 4 + 1];
143 start = offsets[stringi];
144 stop = offsets[stringi + 1];
145 if (strncmp(str, &chars[start], (
size_t)(stop - start)) == 0) {
146 return instructions_.data()[i * 4 + 2];
154 buffers_uint8_[(size_t)index].append(*
reinterpret_cast<uint8_t*
>(&x));
159 buffers_uint8_[(size_t)index].append(x);
163 inline void write_many_uint8(int64_t index, int64_t num_items,
const uint8_t* values)
noexcept {
164 buffers_uint8_[(size_t)index].extend(values, (
size_t)num_items);
169 buffers_int64_[(size_t)index].append(x);
174 buffers_int64_[(size_t)index].append(
static_cast<int64_t
>(x));
179 buffers_int64_[(size_t)index].append(buffers_int64_[(
size_t)index].last() + x);
184 buffers_float64_[(size_t)index].append(x);
189 return counters_[(size_t)index]++;
207 return (int64_t)output_names_.size();
212 return output_names_[(size_t)i];
217 switch (output_dtypes_[(
size_t)i]) {
233 switch (output_dtypes_[(
size_t)i]) {
235 return (int64_t)buffers_uint8_[(size_t)output_which_[(
size_t)i]].nbytes();
237 return (int64_t)buffers_uint8_[(size_t)output_which_[(
size_t)i]].nbytes();
239 return (int64_t)buffers_int64_[(size_t)output_which_[(
size_t)i]].nbytes() / 8;
241 return (int64_t)buffers_float64_[(size_t)output_which_[(
size_t)i]].nbytes() / 8;
249 switch (output_dtypes_[(
size_t)i]) {
251 buffers_uint8_[(size_t)output_which_[(
size_t)i]].concatenate(
252 reinterpret_cast<uint8_t*
>(external_pointer)
256 buffers_uint8_[(size_t)output_which_[(
size_t)i]].concatenate(
257 reinterpret_cast<uint8_t*
>(external_pointer)
261 buffers_int64_[(size_t)output_which_[(
size_t)i]].concatenate(
262 reinterpret_cast<int64_t*
>(external_pointer)
266 buffers_float64_[(size_t)output_which_[(
size_t)i]].concatenate(
267 reinterpret_cast<double*
>(external_pointer)
276 std::vector<int64_t> instructions_;
277 std::vector<char> characters_;
278 std::vector<int64_t> string_offsets_;
280 std::vector<std::string> output_names_;
281 std::vector<util::dtype> output_dtypes_;
282 std::vector<int64_t> output_which_;
283 std::vector<GrowableBuffer<uint8_t>> buffers_uint8_;
284 std::vector<GrowableBuffer<int64_t>> buffers_int64_;
285 std::vector<GrowableBuffer<double>> buffers_float64_;
287 int64_t current_instruction_;
288 std::vector<int64_t> instruction_stack_;
289 int64_t current_stack_depth_;
290 std::vector<int64_t> counters_;
User interface to the Builder system: the ArrayBuilder is a fixed reference while the Builder subclas...
Definition ArrayBuilder.h:23
Abstract class to represent a file-like object, something with a read(num_bytes) method....
Definition json.h:22
virtual int64_t read(int64_t num_bytes, char *buffer)=0
void write_many_uint8(int64_t index, int64_t num_items, const uint8_t *values) noexcept
HERE.
Definition json.h:163
void step_forward() noexcept
HERE.
Definition json.h:95
void pop_stack() noexcept
HERE.
Definition json.h:112
FromJsonObjectSchema(FileLikeObject *source, int64_t buffersize, bool read_one, const char *nan_string, const char *posinf_string, const char *neginf_string, const char *jsonassembly, int64_t initial, double resize)
void write_uint64(int64_t index, uint64_t x) noexcept
HERE.
Definition json.h:173
void output_fill(int64_t i, void *external_pointer) const
HERE.
Definition json.h:248
int64_t instruction() const noexcept
HERE.
Definition json.h:75
int64_t length() const noexcept
HERE.
Definition json.h:193
void write_float64(int64_t index, double x) noexcept
HERE.
Definition json.h:183
int64_t find_enum(const char *str) noexcept
HERE.
Definition json.h:118
void write_int64(int64_t index, int64_t x) noexcept
HERE.
Definition json.h:168
int64_t current_instruction() const noexcept
HERE.
Definition json.h:70
int64_t argument1() const noexcept
HERE.
Definition json.h:80
int64_t num_outputs() const
HERE.
Definition json.h:206
void step_backward() noexcept
HERE.
Definition json.h:100
void write_uint8(int64_t index, uint8_t x) noexcept
HERE.
Definition json.h:158
int64_t get_and_increment(int64_t index) noexcept
HERE.
Definition json.h:188
void write_add_int64(int64_t index, int64_t x) noexcept
HERE.
Definition json.h:178
int64_t argument2() const noexcept
HERE.
Definition json.h:85
void add_to_length(int64_t length) noexcept
HERE.
Definition json.h:198
std::string output_name(int64_t i) const
HERE.
Definition json.h:211
void write_int8(int64_t index, int8_t x) noexcept
HERE.
Definition json.h:153
void push_stack(int64_t jump_to) noexcept
HERE.
Definition json.h:105
int64_t find_key(const char *str) noexcept
HERE.
Definition json.h:135
int64_t argument3() const noexcept
HERE.
Definition json.h:90
std::string debug() const noexcept
HERE.
int64_t output_num_items(int64_t i) const
HERE.
Definition json.h:232
std::string output_dtype(int64_t i) const
HERE.
Definition json.h:216
int64_t current_stack_depth() const noexcept
HERE.
Definition json.h:65
#define LIBAWKWARD_EXPORT_SYMBOL
Definition common.h:44
Definition ArrayBuilder.h:14
LIBAWKWARD_EXPORT_SYMBOL void fromjsonobject(FileLikeObject *source, ArrayBuilder &builder, int64_t buffersize, bool read_one, const char *nan_string=nullptr, const char *posinf_string=nullptr, const char *neginf_string=nullptr)
Parses a JSON-encoded file-like object using an ArrayBuilder.