DNA Calib 1.1
Project brief
Classes | Public Types | Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset > Class Template Reference

#include <OutputArchive.h>

Inheritance diagram for terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >:
Inheritance graph
Collaboration diagram for terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >:
Collaboration graph

Classes

struct  SerializationState
 

Public Types

using SizeType = TSize
 
using OffsetType = TOffset
 

Public Member Functions

 ExtendableJSONOutputArchive (TExtender *extender, TStream *stream_, std::uint32_t indentWidth)
 
bool isOk ()
 
void sync ()
 
void label (const char *value)
 
- Public Member Functions inherited from terse::Archive< TExtender >
 Archive (TExtender *impl_)
 
bool isOk ()
 
void sync ()
 
void label (const char *value)
 
void operator() (Args &&... args)
 
TExtender & operator<< (TSerializable &source)
 
TExtender & operator>> (TSerializable &dest)
 
void * getUserData () const
 
void setUserData (void *data)
 

Protected Member Functions

template<typename T >
void process (Transparent< T > &&source)
 
void process (Anchor< OffsetType > &)
 
void process (ArchiveOffset< OffsetType > &source)
 
void process (typename ArchiveOffset< OffsetType >::Proxy &)
 
void process (typename ArchiveOffset< OffsetType >::Proxy &&)
 
void process (ArchiveSize< SizeType, OffsetType > &source)
 
void process (typename ArchiveSize< SizeType, OffsetType >::Proxy &)
 
void process (typename ArchiveSize< SizeType, OffsetType >::Proxy &&)
 
template<typename T , typename ... Args>
void process (const Blob< T, Args... > &source)
 
template<typename T >
std::enable_if< traits::has_save_member< T >::value, void >::type process (const T &source)
 
template<typename T >
std::enable_if< traits::has_serialize_member< T >::value, void >::type process (const T &source)
 
template<typename T >
std::enable_if< traits::has_save_function< T >::value, void >::type process (const T &source)
 
template<typename T >
std::enable_if< traits::has_serialize_function< T >::value, void >::type process (const T &source)
 
template<typename T >
std::enable_if<!traits::has_save_member< T >::value &&!traits::has_serialize_member< T >::value &&!traits::has_save_function< T >::value &&!traits::has_serialize_function< T >::value, void >::type process (const T &source)
 
void process (char source)
 
void process (std::uint8_t source)
 
void process (std::int8_t source)
 
template<typename T , std::size_t N>
void process (const std::array< T, N > &source)
 
template<typename T , typename ... Args>
void process (const std::vector< T, Args... > &source)
 
template<typename T , typename ... Args>
void process (const DynArray< T, Args... > &source)
 
template<typename T , typename ... Args>
void process (const std::basic_string< T, Args... > &source)
 
template<typename K , typename V >
void process (const std::pair< K, V > &source)
 
template<typename K , typename V >
void process (const std::tuple< K, V > &source)
 
template<class TContainer >
void processElements (const TContainer &source)
 
- Protected Member Functions inherited from terse::Archive< TExtender >
void dispatch (Head &&head)
 
void dispatch (Head &&head, Tail &&... tail)
 

Private Types

using BaseArchive = Archive< TExtender >
 

Private Member Functions

void indent ()
 
void preStructOutput ()
 
void postStructOutput ()
 
void pushTransparency ()
 
bool popTransparency ()
 

Private Attributes

CharOutputStreamBuf< TStream > streamBuf
 
std::ostream stream
 
SerializationState state
 

Member Typedef Documentation

◆ BaseArchive

template<class TExtender , class TStream , typename TSize , typename TOffset >
using terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::BaseArchive = Archive<TExtender>
private

◆ OffsetType

template<class TExtender , class TStream , typename TSize , typename TOffset >
using terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::OffsetType = TOffset

◆ SizeType

template<class TExtender , class TStream , typename TSize , typename TOffset >
using terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::SizeType = TSize

Constructor & Destructor Documentation

◆ ExtendableJSONOutputArchive()

template<class TExtender , class TStream , typename TSize , typename TOffset >
terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::ExtendableJSONOutputArchive ( TExtender *  extender,
TStream *  stream_,
std::uint32_t  indentWidth 
)
inline
50 : BaseArchive{extender},
51 streamBuf{stream_},
53 state{indentWidth, 0u, false, false} {
54 }
SerializationState state
Definition: json/OutputArchive.h:288
CharOutputStreamBuf< TStream > streamBuf
Definition: json/OutputArchive.h:286
std::ostream stream
Definition: json/OutputArchive.h:287
Archive< TExtender > BaseArchive
Definition: json/OutputArchive.h:42

Member Function Documentation

◆ indent()

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::indent ( )
inlineprivate

◆ isOk()

template<class TExtender , class TStream , typename TSize , typename TOffset >
bool terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::isOk ( )
inline
56 {
57 return true;
58 }

◆ label()

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::label ( const char *  value)
inline

◆ popTransparency()

template<class TExtender , class TStream , typename TSize , typename TOffset >
bool terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::popTransparency ( )
inlineprivate

◆ postStructOutput()

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::postStructOutput ( )
inlineprivate

◆ preStructOutput()

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::preStructOutput ( )
inlineprivate

◆ process() [1/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( Anchor< OffsetType > &  )
inlineprotected
81 {
82 // Anchor<T> has no meaning in a non-binary format, so it's just silently ignored
83 }

◆ process() [2/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( ArchiveOffset< OffsetType > &  source)
inlineprotected
85 {
86 process(source.value);
87 }
void process(Transparent< T > &&source)
Definition: json/OutputArchive.h:76

References terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process(), and terse::ArchiveOffset< TOffset >::value.

◆ process() [3/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( ArchiveSize< SizeType, OffsetType > &  source)
inlineprotected

◆ process() [4/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( char  source)
inlineprotected
178 {
179 stream << "\"" << source << "\"";
180 }

References terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::stream.

◆ process() [5/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T , typename ... Args>
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const Blob< T, Args... > &  source)
inlineprotected
110 {
111 const auto encodedSize = base64encode(source.size());
112 std::basic_string<char, std::char_traits<char>, typename Blob<T, Args...>::allocator_type> buffer{encodedSize, '\0',
113 source.get_allocator()};
114 base64encode(&buffer[0], source.data(), source.size());
115 // Write base64-encoded data from string temporary buffer
116 process(buffer);
117 }
constexpr std::size_t base64encode(std::size_t size)
Definition: Base64.h:19

References terse::base64encode(), terse::Blob< T, TAllocator >::data(), terse::Blob< T, TAllocator >::get_allocator(), terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process(), and terse::Blob< T, TAllocator >::size().

◆ process() [6/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T , typename ... Args>
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const DynArray< T, Args... > &  source)
inlineprotected
201 {
202 processElements(source);
203 }
void processElements(const TContainer &source)
Definition: json/OutputArchive.h:229

References terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::processElements().

◆ process() [7/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T , std::size_t N>
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const std::array< T, N > &  source)
inlineprotected

◆ process() [8/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T , typename ... Args>
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const std::basic_string< T, Args... > &  source)
inlineprotected
206 {
207 stream << "\"" << source << "\"";
208 }

References terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::stream.

◆ process() [9/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename K , typename V >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const std::pair< K, V > &  source)
inlineprotected
211 {
212 stream << "[";
213 BaseArchive::dispatch(source.first);
214 stream << ", ";
215 BaseArchive::dispatch(source.second);
216 stream << "]";
217 }
void dispatch(Head &&head)
Definition: Archive.h:61

References terse::Archive< TExtender >::dispatch(), and terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::stream.

◆ process() [10/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename K , typename V >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const std::tuple< K, V > &  source)
inlineprotected
220 {
221 stream << "[";
222 BaseArchive::dispatch(std::get<0>(source));
223 stream << ", ";
224 BaseArchive::dispatch(std::get<1>(source));
225 stream << "]";
226 }

References terse::Archive< TExtender >::dispatch(), and terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::stream.

◆ process() [11/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T , typename ... Args>
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const std::vector< T, Args... > &  source)
inlineprotected

◆ process() [12/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T >
std::enable_if< traits::has_save_member< T >::value, void >::type terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const T &  source)
inlineprotected
121 {
122 const bool transparent = popTransparency();
123 if (!transparent) {
125 }
126 const_cast<T&>(source).save(*static_cast<TExtender*>(this));
127 if (!transparent) {
129 }
130 }
void postStructOutput()
Definition: json/OutputArchive.h:259
bool popTransparency()
Definition: json/OutputArchive.h:271
void preStructOutput()
Definition: json/OutputArchive.h:250

References terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::popTransparency(), terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::postStructOutput(), terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::preStructOutput(), and terse::transparent().

◆ process() [13/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T >
std::enable_if< traits::has_serialize_member< T >::value, void >::type terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const T &  source)
inlineprotected

◆ process() [14/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T >
std::enable_if< traits::has_save_function< T >::value, void >::type terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const T &  source)
inlineprotected

◆ process() [15/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T >
std::enable_if< traits::has_serialize_function< T >::value, void >::type terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const T &  source)
inlineprotected

◆ process() [16/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T >
std::enable_if<!traits::has_save_member< T >::value &&!traits::has_serialize_member< T >::value &&!traits::has_save_function< T >::value &&!traits::has_serialize_function< T >::value, void >::type terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( const T &  source)
inlineprotected

◆ process() [17/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( std::int8_t  source)
inlineprotected
186 {
187 stream << static_cast<std::int32_t>(source);
188 }

◆ process() [18/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( std::uint8_t  source)
inlineprotected
182 {
183 stream << static_cast<std::uint32_t>(source);
184 }

◆ process() [19/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<typename T >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( Transparent< T > &&  source)
inlineprotected

◆ process() [20/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( typename ArchiveOffset< OffsetType >::Proxy &&  )
inlineprotected
93 {
94 // ArchiveOffset<T>::Proxy has no meaning in a non-binary format, so it's just silently ignored
95 }

◆ process() [21/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( typename ArchiveOffset< OffsetType >::Proxy &  )
inlineprotected
89 {
90 // ArchiveOffset<T>::Proxy has no meaning in a non-binary format, so it's just silently ignored
91 }

◆ process() [22/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( typename ArchiveSize< SizeType, OffsetType >::Proxy &&  )
inlineprotected
105 {
106 // ArchiveSize<T, U>::Proxy has no meaning in a non-binary format, so it's just silently ignored
107 }

◆ process() [23/23]

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process ( typename ArchiveSize< SizeType, OffsetType >::Proxy &  )
inlineprotected
101 {
102 // ArchiveSize<T, U>::Proxy has no meaning in a non-binary format, so it's just silently ignored
103 }

◆ processElements()

template<class TExtender , class TStream , typename TSize , typename TOffset >
template<class TContainer >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::processElements ( const TContainer &  source)
inlineprotected
229 {
230 stream << "[";
231 if (!source.empty()) {
232 for (auto it = source.begin();;) {
234 ++it;
235 if (it == source.end()) {
236 break;
237 } else {
238 stream << ", ";
239 }
240 }
241 }
242 stream << "]";
243 }

References terse::Archive< TExtender >::dispatch(), and terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::stream.

Referenced by terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::process().

◆ pushTransparency()

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::pushTransparency ( )
inlineprivate

◆ sync()

template<class TExtender , class TStream , typename TSize , typename TOffset >
void terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::sync ( )
inline

Member Data Documentation

◆ state

template<class TExtender , class TStream , typename TSize , typename TOffset >
SerializationState terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::state
private

◆ stream

template<class TExtender , class TStream , typename TSize , typename TOffset >
std::ostream terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::stream
private

◆ streamBuf

template<class TExtender , class TStream , typename TSize , typename TOffset >
CharOutputStreamBuf<TStream> terse::ExtendableJSONOutputArchive< TExtender, TStream, TSize, TOffset >::streamBuf
private

The documentation for this class was generated from the following file: