Skip to content

Commit e95b337

Browse files
committed
2 parents b89b8ab + efd1f0f commit e95b337

10 files changed

Lines changed: 401 additions & 224 deletions

File tree

include/jsoncons/staj_cursor.hpp

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -74,24 +74,6 @@ class basic_staj_visitor : public basic_json_visitor<CharT>
7474
return event_;
7575
}
7676

77-
bool in_available() const
78-
{
79-
return state_ != staj_cursor_state();
80-
}
81-
82-
void send_available(std::error_code& ec)
83-
{
84-
switch (state_)
85-
{
86-
case staj_cursor_state::multi_dim:
87-
case staj_cursor_state::shape:
88-
advance_multi_dim(ec);
89-
break;
90-
default:
91-
break;
92-
}
93-
}
94-
9577
staj_cursor_state state() const
9678
{
9779
return state_;

include/jsoncons/staj_event_reader.hpp

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -72,24 +72,6 @@ namespace jsoncons {
7272
return event_;
7373
}
7474

75-
bool in_available() const
76-
{
77-
return state_ != item_event_reader_state();
78-
}
79-
80-
void send_available(std::error_code& ec)
81-
{
82-
switch (state_)
83-
{
84-
case item_event_reader_state::multi_dim:
85-
case item_event_reader_state::shape:
86-
advance_multi_dim(ec);
87-
break;
88-
default:
89-
break;
90-
}
91-
}
92-
9375
item_event_reader_state state() const
9476
{
9577
return state_;

include/jsoncons/typed_array.hpp

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -209,42 +209,6 @@ class slice
209209

210210
enum class mdarray_order {row_major, column_major};
211211

212-
struct row_major_layout
213-
{
214-
std::vector<std::size_t> operator()(jsoncons::span<const std::size_t> extents) const
215-
{
216-
std::vector<std::size_t> strides(extents.size(), 0);
217-
218-
std::size_t size = 1;
219-
const size_t num_extents = extents.size();
220-
for (size_t i = 0; i < num_extents; ++i)
221-
{
222-
strides[num_extents-i-1] = size;
223-
size *= extents[num_extents-i-1];
224-
}
225-
226-
return strides;
227-
}
228-
};
229-
230-
struct column_major_layout
231-
{
232-
std::vector<std::size_t> operator()(jsoncons::span<const std::size_t> extents) const
233-
{
234-
std::vector<std::size_t> strides(extents.size(), 0);
235-
236-
std::size_t size = 1;
237-
const size_t num_extents = extents.size();
238-
for (size_t i = 0; i < num_extents; ++i)
239-
{
240-
strides[i] = size;
241-
size *= extents[i];
242-
}
243-
244-
return strides;
245-
}
246-
};
247-
248212
class typed_array_iterator
249213
{
250214
public:
@@ -281,7 +245,7 @@ class typed_array_iterator
281245
};
282246

283247
template <typename ValueType, typename Func=jsoncons::identity>
284-
class typed_array_span_iterator : public typed_array_iterator
248+
class sequential_typed_array_iterator : public typed_array_iterator
285249
{
286250
jsoncons::span<ValueType> data_;
287251
semantic_tag tag_;
@@ -290,7 +254,7 @@ class typed_array_span_iterator : public typed_array_iterator
290254
bool done_{false};
291255
std::size_t index_{0};
292256
public:
293-
typed_array_span_iterator(jsoncons::span<ValueType> data,
257+
sequential_typed_array_iterator(jsoncons::span<ValueType> data,
294258
semantic_tag tag = semantic_tag{}, Func func = Func())
295259
: data_(data), tag_(tag), func_(func)
296260
{
@@ -340,12 +304,31 @@ class mdarray_iterator : public typed_array_iterator
340304
bool first_{true};
341305
bool done_{false};
342306
public:
343-
template <typename Layout= jsoncons::row_major_layout>
344307
mdarray_iterator(jsoncons::span<ValueType> data, jsoncons::span<const std::size_t> extents,
345-
Layout layout = Layout())
308+
mdarray_order order = mdarray_order::row_major)
346309
: data_{data}, dimensions_(extents.size(), mdarray_dimension<ValueType>{})
347310
{
348-
std::vector<std::size_t> strides = layout(extents);
311+
std::vector<std::size_t> strides(extents.size(), 0);
312+
if (order == mdarray_order::column_major)
313+
{
314+
std::size_t stride = 1;
315+
const size_t num_extents = extents.size();
316+
for (size_t i = 0; i < num_extents; ++i)
317+
{
318+
strides[i] = stride;
319+
stride *= extents[i];
320+
}
321+
}
322+
else
323+
{
324+
std::size_t stride = 1;
325+
const size_t num_extents = extents.size();
326+
for (size_t i = 0; i < num_extents; ++i)
327+
{
328+
strides[num_extents-i-1] = stride;
329+
stride *= extents[num_extents-i-1];
330+
}
331+
}
349332
for (std::size_t i = 0; i < strides.size(); ++i)
350333
{
351334
dimensions_[i].extent = extents[i];

include/jsoncons_ext/cbor/cbor_cursor.hpp

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -288,18 +288,11 @@ class basic_cbor_cursor : public basic_staj_cursor<char>, private virtual ser_co
288288

289289
void read_next(std::error_code& ec)
290290
{
291-
if (cursor_visitor_.in_available())
291+
parser_.restart();
292+
while (!parser_.stopped())
292293
{
293-
cursor_visitor_.send_available(ec);
294-
}
295-
else
296-
{
297-
parser_.restart();
298-
while (!parser_.stopped())
299-
{
300-
parser_.parse(cursor_handler_adaptor_, ec);
301-
if (JSONCONS_UNLIKELY(ec)) {return;}
302-
}
294+
parser_.parse(cursor_handler_adaptor_, ec);
295+
if (JSONCONS_UNLIKELY(ec)) {return;}
303296
}
304297
}
305298

include/jsoncons_ext/cbor/cbor_event_reader.hpp

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -251,18 +251,11 @@ class cbor_event_reader : public basic_staj_event_reader<char>, private virtual
251251

252252
void read_next(std::error_code& ec)
253253
{
254-
if (cursor_visitor_.in_available())
255-
{
256-
cursor_visitor_.send_available(ec);
257-
}
258-
else
254+
parser_.restart();
255+
while (!parser_.stopped())
259256
{
260-
parser_.restart();
261-
while (!parser_.stopped())
262-
{
263-
parser_.parse(cursor_visitor_, ec);
264-
if (JSONCONS_UNLIKELY(ec)) {return;}
265-
}
257+
parser_.parse(cursor_visitor_, ec);
258+
if (JSONCONS_UNLIKELY(ec)) {return;}
266259
}
267260
}
268261

0 commit comments

Comments
 (0)