26 #include "../rw/Reader.h"
27 #include "../rw/Writer.h"
28 #include "../visitor/Visitor.h"
33 template <
class ReaderImplementation,
class WriterImplementation,
class DerivedT>
34 requires isReader<ReaderImplementation> && isWriter<WriterImplementation>
39 std::is_base_of<Converter<typename T::ReaderType, typename T::WriterType, typename T::This>,
42 template <
class ConverterImplementation>
43 requires isConverter<ConverterImplementation>
44 typename ConverterImplementation::WriterReturnType
45 readAndWrite(
typename ConverterImplementation::ReaderInputType& o);
49 template <
class ReaderImplementation,
class WriterImplementation,
class DerivedT>
50 requires isReader<ReaderImplementation> && isWriter<WriterImplementation>
51 struct Converter :
virtual public Visitor<typename ReaderImplementation::InputType>
60 ReaderImplementation
r;
61 WriterImplementation
w;
69 return r.getDescriptor(o);
75 std::map<std::string, ReaderInputTypeNonConst> elementsOfInput;
76 std::map<std::string, WriterReturnType> elementsReturn;
78 r.readDict(o, elementsOfInput, p);
79 for (
const auto& [key,
value] : elementsOfInput)
81 auto converted = readAndWrite<DerivedT>(
value);
82 elementsReturn.insert({key, converted});
91 std::vector<ReaderInputTypeNonConst> elementsOfInput;
92 std::vector<WriterReturnType> elementsReturn;
94 r.readList(o, elementsOfInput, p);
95 for (
const auto&
value : elementsOfInput)
97 auto converted = readAndWrite<DerivedT>(
value);
98 elementsReturn.push_back(converted);
107 std::vector<int> shape;
108 std::vector<unsigned char>
data;
110 r.readNDArray(o, shape, type,
data, p);
137 r.readFloat(o, i, p);
146 r.readDouble(o, i, p);
164 r.readString(o, i, p);
174 "A visitor got data but the enum is unknown.");
182 template <
class ConverterImplementation>
183 requires isConverter<ConverterImplementation>
184 typename ConverterImplementation::WriterReturnType
187 ConverterImplementation
v;
189 return v.last_returned;