@@ -142,6 +142,8 @@ class basic_cbor_parser : public ser_context
142142 byte_string_type bytes_buffer_;
143143 std::vector<parse_state,parse_state_allocator_type> state_stack_;
144144 bool is_typed_array_{false };
145+ bool is_multi_dim_{false };
146+ mdarray_order order_{};
145147 std::unique_ptr<typed_array_iterator> typed_array_iter_;
146148 typed_array_element_types element_type_{};
147149 semantic_tag typed_array_tag_{};
@@ -232,6 +234,21 @@ class basic_cbor_parser : public ser_context
232234 return is_typed_array_;
233235 }
234236
237+ bool is_multi_dim () const
238+ {
239+ return is_multi_dim_;
240+ }
241+
242+ mdarray_order order () const
243+ {
244+ return order_;
245+ }
246+
247+ jsoncons::span<const std::size_t > extents () const
248+ {
249+ return jsoncons::span<const std::size_t >(extents_.data (), extents_.size ());
250+ }
251+
235252 template <typename Sourceable>
236253 void reset (Sourceable&& source)
237254 {
@@ -297,6 +314,8 @@ class basic_cbor_parser : public ser_context
297314 void to_end_array ()
298315 {
299316 is_typed_array_ = false ;
317+ is_multi_dim_ = false ;
318+ order_ = mdarray_order{};
300319 state_stack_.pop_back ();
301320 }
302321
@@ -672,9 +691,11 @@ class basic_cbor_parser : public ser_context
672691 more_ = !cursor_mode_;
673692 break ;
674693 case 40 : // row major storage
694+ order_ = mdarray_order::row_major;
675695 produce_begin_multi_dim (visitor, semantic_tag::multi_dim_row_major, ec);
676696 break ;
677697 case 1040 : // column major storage
698+ order_ = mdarray_order::column_major;
678699 produce_begin_multi_dim (visitor, semantic_tag::multi_dim_column_major, ec);
679700 break ;
680701 default :
0 commit comments