Stroika Library 3.0d23x
 
Loading...
Searching...
No Matches
Variant/XML/Reader.cpp
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2026. All rights reserved
3 */
4#include "Stroika/Foundation/StroikaPreComp.h"
5
7#include "Stroika/Foundation/DataExchange/BadFormatException.h"
10
11#include "Reader.h"
12
13using std::byte;
14
15using namespace Stroika::Foundation;
17using namespace Stroika::Foundation::DataExchange::XML;
18
20using Memory::MakeSharedPtr;
21
22// Comment this in to turn on aggressive noisy DbgTrace in this module
23//#define USE_NOISY_TRACE_IN_THIS_MODULE_ 1
24
25class Variant::XML::Reader::Rep_ final : public Variant::Reader::_IRep, public Memory::UseBlockAllocationIfAppropriate<Rep_> {
26public:
27 Rep_ (const SerializationConfiguration& config)
28 : fSerializationConfiguration_{config}
29 {
30 }
31
32public:
33 virtual _SharedPtrIRep Clone () const override
34 {
35 return MakeSharedPtr<Rep_> (fSerializationConfiguration_);
36 }
37 virtual optional<filesystem::path> GetDefaultFileSuffix () const override
38 {
39 return ".xml"sv;
40 }
41 virtual VariantValue Read (const Streams::InputStream::Ptr<byte>& in) const override
42 {
43 // not sure about this - we may want to led xerces read raw binary bytes!!
44 return Read (Streams::BinaryToText::Reader::New (in));
45 }
46 virtual VariantValue Read ([[maybe_unused]] const Streams::InputStream::Ptr<Character>& in) const override
47 {
48#if USE_NOISY_TRACE_IN_THIS_MODULE_
49 Debug::TraceContextBumper ctx{"DataExchange::XML::Reader::Rep_::Read"};
50#endif
51// TODO - USE SAXREADER HERE!!!
52#if qStroika_HasComponent_xerces
54 return VariantValue{};
55#else
57 return VariantValue{};
58#endif
59 }
60 nonvirtual SerializationConfiguration GetConfiguration () const
61 {
62 return fSerializationConfiguration_;
63 }
64 nonvirtual void SetConfiguration (const SerializationConfiguration& config)
65 {
66 fSerializationConfiguration_ = config;
67 }
68
69private:
70 SerializationConfiguration fSerializationConfiguration_;
71};
72
73/*
74 ********************************************************************************
75 ************************** DataExchange::XML::Reader ***************************
76 ********************************************************************************
77 */
78Variant::XML::Reader::Reader (const SerializationConfiguration& config)
79 : inherited{MakeSharedPtr<Rep_> (config)}
80{
81}
82
83Variant::XML::Reader::Rep_& Variant::XML::Reader::GetRep_ ()
84{
85 EnsureMember (&inherited::_GetRep (), Rep_);
86 return reinterpret_cast<Rep_&> (inherited::_GetRep ());
87}
88
89const Variant::XML::Reader::Rep_& Variant::XML::Reader::GetRep_ () const
90{
91 EnsureMember (&inherited::_GetRep (), Rep_);
92 return reinterpret_cast<const Rep_&> (inherited::_GetRep ());
93}
94
95SerializationConfiguration Variant::XML::Reader::GetConfiguration () const
96{
97 return GetRep_ ().GetConfiguration ();
98}
99
100void Variant::XML::Reader::SetConfiguration (const SerializationConfiguration& config)
101{
102 GetRep_ ().SetConfiguration (config);
103}
#define AssertNotImplemented()
Definition Assertions.h:401
#define EnsureMember(p, c)
Definition Assertions.h:319
auto MakeSharedPtr(ARGS_TYPE &&... args) -> shared_ptr< T >
same as make_shared, but if type T has block allocation, then use block allocation for the 'shared pa...
conditional_t< qStroika_Foundation_Memory_PreferBlockAllocation and andTrueCheck, BlockAllocationUseHelper< T >, Common::Empty > UseBlockAllocationIfAppropriate
Use this to enable block allocation for a particular class. Beware of subclassing.
Simple variant-value (case variant union) object, with (variant) basic types analogous to a value in ...
InputStream<>::Ptr is Smart pointer (with abstract Rep) class defining the interface to reading from ...
Ptr New(const InputStream::Ptr< byte > &src, optional< AutomaticCodeCvtFlags > codeCvtFlags={}, optional< SeekableFlag > seekable={}, ReadAhead readAhead=eReadAheadAllowed)
Create an InputStream::Ptr<Character> from the arguments (usually binary source) - which can be used ...