#ifndef RFL_PARSING_PARSER_C_ARRAY_HPP_ #define RFL_PARSING_PARSER_C_ARRAY_HPP_ #include #include #include "../Result.hpp" #include "../always_false.hpp" #include "../internal/Array.hpp" #include "../internal/to_std_array.hpp" #include "Parent.hpp" #include "Parser_array.hpp" #include "Parser_base.hpp" #include "schema/Type.hpp" namespace rfl { namespace parsing { template requires AreReaderAndWriter struct Parser { public: using InputArrayType = typename R::InputArrayType; using InputVarType = typename R::InputVarType; using OutputArrayType = typename W::OutputArrayType; using OutputVarType = typename W::OutputVarType; using ParentType = Parent; using CArray = T[_size]; static Result> read( const R& _r, const InputVarType& _var) noexcept { using StdArray = internal::to_std_array_t; return Parser::read(_r, _var); } template static void write(const W& _w, const CArray& _arr, const P& _parent) noexcept { auto arr = ParentType::add_array(_w, _size, _parent); const auto new_parent = typename ParentType::Array {&arr}; for (const auto& e : _arr) { Parser, ProcessorsType>::write( _w, e, new_parent); } _w.end_array(&arr); } static schema::Type to_schema( std::map* _definitions) { using StdArray = internal::to_std_array_t; return Parser, ProcessorsType>::to_schema(_definitions); } }; } // namespace parsing } // namespace rfl #endif