Skip to content

Commit 40757fa

Browse files
committed
Added staj2_ classes
1 parent bfffca7 commit 40757fa

File tree

8 files changed

+2016
-219
lines changed

8 files changed

+2016
-219
lines changed

include/jsoncons/staj2_cursor.hpp

Lines changed: 1169 additions & 0 deletions
Large diffs are not rendered by default.

include/jsoncons/staj_cursor.hpp

Lines changed: 3 additions & 219 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
// See https://github.com/danielaparker/jsoncons for latest version
66

7-
#ifndef JSONCONS_STAJ_READER_HPP
8-
#define JSONCONS_STAJ_READER_HPP
7+
#ifndef JSONCONS_STAJ_CURSOR_HPP
8+
#define JSONCONS_STAJ_CURSOR_HPP
99

1010
#include <memory> // std::allocator
1111
#include <string>
@@ -23,6 +23,7 @@
2323
#include <jsoncons/sink.hpp>
2424
#include <jsoncons/detail/write_number.hpp>
2525
#include <jsoncons/json_type_traits.hpp>
26+
#include <jsoncons/typed_array_view.hpp>
2627
#include <jsoncons/converter.hpp>
2728

2829
namespace jsoncons {
@@ -462,223 +463,6 @@ enum class staj_cursor_state
462463
shape
463464
};
464465

465-
struct uint8_array_arg_t {explicit uint8_array_arg_t() = default; };
466-
constexpr uint8_array_arg_t uint8_array_arg = uint8_array_arg_t();
467-
struct uint16_array_arg_t {explicit uint16_array_arg_t() = default; };
468-
struct uint32_array_arg_t {explicit uint32_array_arg_t() = default; };
469-
constexpr uint32_array_arg_t uint32_array_arg = uint32_array_arg_t();
470-
struct uint64_array_arg_t {explicit uint64_array_arg_t() = default; };
471-
constexpr uint64_array_arg_t uint64_array_arg = uint64_array_arg_t();
472-
struct int8_array_arg_t {explicit int8_array_arg_t() = default; };
473-
constexpr int8_array_arg_t int8_array_arg = int8_array_arg_t();
474-
struct int16_array_arg_t {explicit int16_array_arg_t() = default; };
475-
constexpr int16_array_arg_t int16_array_arg = int16_array_arg_t();
476-
struct int32_array_arg_t {explicit int32_array_arg_t() = default; };
477-
constexpr int32_array_arg_t int32_array_arg = int32_array_arg_t();
478-
struct int64_array_arg_t {explicit int64_array_arg_t() = default; };
479-
constexpr int64_array_arg_t int64_array_arg = int64_array_arg_t();
480-
constexpr uint16_array_arg_t uint16_array_arg = uint16_array_arg_t();
481-
struct half_array_arg_t {explicit half_array_arg_t() = default; };
482-
constexpr half_array_arg_t half_array_arg = half_array_arg_t();
483-
struct float_array_arg_t {explicit float_array_arg_t() = default; };
484-
constexpr float_array_arg_t float_array_arg = float_array_arg_t();
485-
struct double_array_arg_t {explicit double_array_arg_t() = default; };
486-
constexpr double_array_arg_t double_array_arg = double_array_arg_t();
487-
struct float128_array_arg_t {explicit float128_array_arg_t() = default; };
488-
constexpr float128_array_arg_t float128_array_arg = float128_array_arg_t();
489-
490-
enum class typed_array_type{uint8_value=1,uint16_value,uint32_value,uint64_value,
491-
int8_value,int16_value,int32_value,int64_value,
492-
half_value, float_value,double_value};
493-
494-
class typed_array_view
495-
{
496-
typed_array_type type_;
497-
union
498-
{
499-
const uint8_t* uint8_data_;
500-
const uint16_t* uint16_data_;
501-
const uint32_t* uint32_data_;
502-
const uint64_t* uint64_data_;
503-
const int8_t* int8_data_;
504-
const int16_t* int16_data_;
505-
const int32_t* int32_data_;
506-
const int64_t* int64_data_;
507-
const float* float_data_;
508-
const double* double_data_;
509-
} data_;
510-
std::size_t size_;
511-
public:
512-
513-
typed_array_view()
514-
: type_(), data_(), size_(0)
515-
{
516-
}
517-
518-
typed_array_view(const typed_array_view& other)
519-
: type_(other.type_), data_(other.data_), size_(other.size())
520-
{
521-
}
522-
523-
typed_array_view(typed_array_view&& other) noexcept
524-
{
525-
swap(*this,other);
526-
}
527-
528-
typed_array_view(const uint8_t* data, std::size_t size)
529-
: type_(typed_array_type::uint8_value), size_(size)
530-
{
531-
data_.uint8_data_ = data;
532-
}
533-
534-
typed_array_view(const uint16_t* data, std::size_t size)
535-
: type_(typed_array_type::uint16_value), size_(size)
536-
{
537-
data_.uint16_data_ = data;
538-
}
539-
540-
typed_array_view(const uint32_t* data, std::size_t size)
541-
: type_(typed_array_type::uint32_value), size_(size)
542-
{
543-
data_.uint32_data_ = data;
544-
}
545-
546-
typed_array_view(const uint64_t* data, std::size_t size)
547-
: type_(typed_array_type::uint64_value), size_(size)
548-
{
549-
data_.uint64_data_ = data;
550-
}
551-
552-
typed_array_view(const int8_t* data, std::size_t size)
553-
: type_(typed_array_type::int8_value), size_(size)
554-
{
555-
data_.int8_data_ = data;
556-
}
557-
558-
typed_array_view(const int16_t* data, std::size_t size)
559-
: type_(typed_array_type::int16_value), size_(size)
560-
{
561-
data_.int16_data_ = data;
562-
}
563-
564-
typed_array_view(const int32_t* data, std::size_t size)
565-
: type_(typed_array_type::int32_value), size_(size)
566-
{
567-
data_.int32_data_ = data;
568-
}
569-
570-
typed_array_view(const int64_t* data, std::size_t size)
571-
: type_(typed_array_type::int64_value), size_(size)
572-
{
573-
data_.int64_data_ = data;
574-
}
575-
576-
typed_array_view(half_array_arg_t, const uint16_t* data, std::size_t size)
577-
: type_(typed_array_type::half_value), size_(size)
578-
{
579-
data_.uint16_data_ = data;
580-
}
581-
582-
typed_array_view(const float* data, std::size_t size)
583-
: type_(typed_array_type::float_value), size_(size)
584-
{
585-
data_.float_data_ = data;
586-
}
587-
588-
typed_array_view(const double* data, std::size_t size)
589-
: type_(typed_array_type::double_value), size_(size)
590-
{
591-
data_.double_data_ = data;
592-
}
593-
594-
typed_array_view& operator=(const typed_array_view& other)
595-
{
596-
typed_array_view temp(other);
597-
swap(*this,temp);
598-
return *this;
599-
}
600-
601-
typed_array_type type() const {return type_;}
602-
603-
std::size_t size() const
604-
{
605-
return size_;
606-
}
607-
608-
jsoncons::span<const uint8_t> data(uint8_array_arg_t) const
609-
{
610-
JSONCONS_ASSERT(type_ == typed_array_type::uint8_value);
611-
return jsoncons::span<const uint8_t>(data_.uint8_data_, size_);
612-
}
613-
614-
jsoncons::span<const uint16_t> data(uint16_array_arg_t) const
615-
{
616-
JSONCONS_ASSERT(type_ == typed_array_type::uint16_value);
617-
return jsoncons::span<const uint16_t>(data_.uint16_data_, size_);
618-
}
619-
620-
jsoncons::span<const uint32_t> data(uint32_array_arg_t) const
621-
{
622-
JSONCONS_ASSERT(type_ == typed_array_type::uint32_value);
623-
return jsoncons::span<const uint32_t>(data_.uint32_data_, size_);
624-
}
625-
626-
jsoncons::span<const uint64_t> data(uint64_array_arg_t) const
627-
{
628-
JSONCONS_ASSERT(type_ == typed_array_type::uint64_value);
629-
return jsoncons::span<const uint64_t>(data_.uint64_data_, size_);
630-
}
631-
632-
jsoncons::span<const int8_t> data(int8_array_arg_t) const
633-
{
634-
JSONCONS_ASSERT(type_ == typed_array_type::int8_value);
635-
return jsoncons::span<const int8_t>(data_.int8_data_, size_);
636-
}
637-
638-
jsoncons::span<const int16_t> data(int16_array_arg_t) const
639-
{
640-
JSONCONS_ASSERT(type_ == typed_array_type::int16_value);
641-
return jsoncons::span<const int16_t>(data_.int16_data_, size_);
642-
}
643-
644-
jsoncons::span<const int32_t> data(int32_array_arg_t) const
645-
{
646-
JSONCONS_ASSERT(type_ == typed_array_type::int32_value);
647-
return jsoncons::span<const int32_t>(data_.int32_data_, size_);
648-
}
649-
650-
jsoncons::span<const int64_t> data(int64_array_arg_t) const
651-
{
652-
JSONCONS_ASSERT(type_ == typed_array_type::int64_value);
653-
return jsoncons::span<const int64_t>(data_.int64_data_, size_);
654-
}
655-
656-
jsoncons::span<const uint16_t> data(half_array_arg_t) const
657-
{
658-
JSONCONS_ASSERT(type_ == typed_array_type::half_value);
659-
return jsoncons::span<const uint16_t>(data_.uint16_data_, size_);
660-
}
661-
662-
jsoncons::span<const float> data(float_array_arg_t) const
663-
{
664-
JSONCONS_ASSERT(type_ == typed_array_type::float_value);
665-
return jsoncons::span<const float>(data_.float_data_, size_);
666-
}
667-
668-
jsoncons::span<const double> data(double_array_arg_t) const
669-
{
670-
JSONCONS_ASSERT(type_ == typed_array_type::double_value);
671-
return jsoncons::span<const double>(data_.double_data_, size_);
672-
}
673-
674-
friend void swap(typed_array_view& a, typed_array_view& b) noexcept
675-
{
676-
std::swap(a.data_,b.data_);
677-
std::swap(a.type_,b.type_);
678-
std::swap(a.size_,b.size_);
679-
}
680-
};
681-
682466
template <class CharT>
683467
class basic_staj_visitor : public basic_json_visitor<CharT>
684468
{

0 commit comments

Comments
 (0)