Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
GenericReader< SourceEncoding, TargetEncoding, StackAllocator > Class Template Reference

SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator. More...

#include </__w/arcaneframework.github.io/arcaneframework.github.io/framework/arccore/src/common/arccore/common/internal/json/rapidjson/reader.h>

Collaboration diagram for GenericReader< SourceEncoding, TargetEncoding, StackAllocator >:

Classes

struct  ClearStackOnExit
class  StackStream
class  NumberStream
class  NumberStream< InputStream, StackCharacter, false, false >
class  NumberStream< InputStream, StackCharacter, true, false >
class  NumberStream< InputStream, StackCharacter, true, true >

Public Types

typedef SourceEncoding::Ch Ch
 SourceEncoding character type.

Public Member Functions

 GenericReader (StackAllocator *stackAllocator=0, size_t stackCapacity=kDefaultStackCapacity)
 Constructor.
template<unsigned parseFlags, typename InputStream, typename Handler>
ParseResult Parse (InputStream &is, Handler &handler)
 Parse JSON text.
template<typename InputStream, typename Handler>
ParseResult Parse (InputStream &is, Handler &handler)
 Parse JSON text (with kParseDefaultFlags).
void IterativeParseInit ()
 Initialize JSON text token-by-token parsing.
template<unsigned parseFlags, typename InputStream, typename Handler>
bool IterativeParseNext (InputStream &is, Handler &handler)
 Parse one token from JSON text.
RAPIDJSON_FORCEINLINE bool IterativeParseComplete () const
 Check if token-by-token parsing JSON text is complete.
bool HasParseError () const
 Whether a parse error has occurred in the last parsing.
ParseErrorCode GetParseErrorCode () const
 Get the ParseErrorCode of last parsing.
size_t GetErrorOffset () const
 Get the position of last parsing error in input, 0 otherwise.

Protected Member Functions

void SetParseError (ParseErrorCode code, size_t offset)

Private Types

enum  IterativeParsingState {
  IterativeParsingFinishState = 0 , IterativeParsingErrorState , IterativeParsingStartState , IterativeParsingObjectInitialState ,
  IterativeParsingMemberKeyState , IterativeParsingMemberValueState , IterativeParsingObjectFinishState , IterativeParsingArrayInitialState ,
  IterativeParsingElementState , IterativeParsingArrayFinishState , IterativeParsingValueState , IterativeParsingElementDelimiterState ,
  IterativeParsingMemberDelimiterState , IterativeParsingKeyValueDelimiterState , cIterativeParsingStateCount
}
enum  Token {
  LeftBracketToken = 0 , RightBracketToken , LeftCurlyBracketToken , RightCurlyBracketToken ,
  CommaToken , ColonToken , StringToken , FalseToken ,
  TrueToken , NullToken , NumberToken , kTokenCount
}

Private Member Functions

 GenericReader (const GenericReader &)
GenericReaderoperator= (const GenericReader &)
void ClearStack ()
template<unsigned parseFlags, typename InputStream>
void SkipWhitespaceAndComments (InputStream &is)
template<unsigned parseFlags, typename InputStream, typename Handler>
void ParseObject (InputStream &is, Handler &handler)
template<unsigned parseFlags, typename InputStream, typename Handler>
void ParseArray (InputStream &is, Handler &handler)
template<unsigned parseFlags, typename InputStream, typename Handler>
void ParseNull (InputStream &is, Handler &handler)
template<unsigned parseFlags, typename InputStream, typename Handler>
void ParseTrue (InputStream &is, Handler &handler)
template<unsigned parseFlags, typename InputStream, typename Handler>
void ParseFalse (InputStream &is, Handler &handler)
template<typename InputStream>
unsigned ParseHex4 (InputStream &is, size_t escapeOffset)
template<unsigned parseFlags, typename InputStream, typename Handler>
void ParseString (InputStream &is, Handler &handler, bool isKey=false)
template<unsigned parseFlags, typename SEncoding, typename TEncoding, typename InputStream, typename OutputStream>
RAPIDJSON_FORCEINLINE void ParseStringToStream (InputStream &is, OutputStream &os)
template<unsigned parseFlags, typename InputStream, typename Handler>
void ParseNumber (InputStream &is, Handler &handler)
template<unsigned parseFlags, typename InputStream, typename Handler>
void ParseValue (InputStream &is, Handler &handler)
RAPIDJSON_FORCEINLINE Token Tokenize (Ch c) const
RAPIDJSON_FORCEINLINE IterativeParsingState Predict (IterativeParsingState state, Token token) const
template<unsigned parseFlags, typename InputStream, typename Handler>
RAPIDJSON_FORCEINLINE IterativeParsingState Transit (IterativeParsingState src, Token token, IterativeParsingState dst, InputStream &is, Handler &handler)
template<typename InputStream>
void HandleError (IterativeParsingState src, InputStream &is)
RAPIDJSON_FORCEINLINE bool IsIterativeParsingDelimiterState (IterativeParsingState s) const
RAPIDJSON_FORCEINLINE bool IsIterativeParsingCompleteState (IterativeParsingState s) const
template<unsigned parseFlags, typename InputStream, typename Handler>
ParseResult IterativeParse (InputStream &is, Handler &handler)

Static Private Member Functions

template<typename InputStream>
static RAPIDJSON_FORCEINLINE bool Consume (InputStream &is, typename InputStream::Ch expect)
template<typename InputStream, typename OutputStream>
static RAPIDJSON_FORCEINLINE void ScanCopyUnescapedString (InputStream &, OutputStream &)

Private Attributes

internal::Stack< StackAllocator > stack_
 A stack for storing decoded string temporarily during non-destructive parsing.
ParseResult parseResult_
IterativeParsingState state_

Static Private Attributes

static const size_t kDefaultStackCapacity = 256
 Default stack capacity in bytes for storing a single decoded string.

Detailed Description

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
class GenericReader< SourceEncoding, TargetEncoding, StackAllocator >

SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator.

GenericReader parses JSON text from a stream, and send events synchronously to an object implementing Handler concept.

It needs to allocate a stack for storing a single decoded string during non-destructive parsing.

For in-situ parsing, the decoded string is directly written to the source text string, no temporary buffer is required.

A GenericReader object can be reused for parsing multiple JSON text.

Template Parameters
SourceEncodingEncoding of the input stream.
TargetEncodingEncoding of the parse output.
StackAllocatorAllocator type for stack.

Definition at line 540 of file reader.h.

Member Typedef Documentation

◆ Ch

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
typedef SourceEncoding::Ch GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::Ch

SourceEncoding character type.

Definition at line 542 of file reader.h.

Member Enumeration Documentation

◆ IterativeParsingState

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
enum GenericReader::IterativeParsingState
private

Definition at line 1771 of file reader.h.

◆ Token

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
enum GenericReader::Token
private

Definition at line 1799 of file reader.h.

Constructor & Destructor Documentation

◆ GenericReader()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::GenericReader ( StackAllocator * stackAllocator = 0,
size_t stackCapacity = kDefaultStackCapacity )
inline

Constructor.

Parameters
stackAllocatorOptional allocator for allocating stack memory. (Only use for non-destructive parsing)
stackCapacitystack capacity in bytes for storing a single decoded string. (Only use for non-destructive parsing)

Definition at line 548 of file reader.h.

Member Function Documentation

◆ ClearStack()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ClearStack ( )
inlineprivate

Definition at line 699 of file reader.h.

◆ Consume()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<typename InputStream>
RAPIDJSON_FORCEINLINE bool GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::Consume ( InputStream & is,
typename InputStream::Ch expect )
inlinestaticprivate

Definition at line 896 of file reader.h.

◆ GetErrorOffset()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
size_t GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::GetErrorOffset ( ) const
inline

Get the position of last parsing error in input, 0 otherwise.

Definition at line 689 of file reader.h.

◆ GetParseErrorCode()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
ParseErrorCode GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::GetParseErrorCode ( ) const
inline

Get the ParseErrorCode of last parsing.

Definition at line 686 of file reader.h.

◆ HandleError()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<typename InputStream>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::HandleError ( IterativeParsingState src,
InputStream & is )
inlineprivate

Definition at line 2164 of file reader.h.

◆ HasParseError()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
bool GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::HasParseError ( ) const
inline

Whether a parse error has occurred in the last parsing.

Definition at line 683 of file reader.h.

◆ IsIterativeParsingCompleteState()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
RAPIDJSON_FORCEINLINE bool GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::IsIterativeParsingCompleteState ( IterativeParsingState s) const
inlineprivate

Definition at line 2188 of file reader.h.

◆ IsIterativeParsingDelimiterState()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
RAPIDJSON_FORCEINLINE bool GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::IsIterativeParsingDelimiterState ( IterativeParsingState s) const
inlineprivate

Definition at line 2184 of file reader.h.

◆ IterativeParse()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
ParseResult GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::IterativeParse ( InputStream & is,
Handler & handler )
inlineprivate

Definition at line 2193 of file reader.h.

◆ IterativeParseComplete()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
RAPIDJSON_FORCEINLINE bool GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::IterativeParseComplete ( ) const
inline

Check if token-by-token parsing JSON text is complete.

Returns
Whether the JSON has been fully decoded.

Definition at line 678 of file reader.h.

◆ IterativeParseInit()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::IterativeParseInit ( )
inline

Initialize JSON text token-by-token parsing.

Definition at line 608 of file reader.h.

◆ IterativeParseNext()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
bool GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::IterativeParseNext ( InputStream & is,
Handler & handler )
inline

Parse one token from JSON text.

Template Parameters
InputStreamType of input stream, implementing Stream concept
HandlerType of handler, implementing Handler concept.
Parameters
isInput stream to be parsed.
handlerThe handler to receive events.
Returns
Whether the parsing is successful.

Definition at line 621 of file reader.h.

◆ Parse() [1/2]

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<typename InputStream, typename Handler>
ParseResult GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::Parse ( InputStream & is,
Handler & handler )
inline

Parse JSON text (with kParseDefaultFlags).

Template Parameters
InputStreamType of input stream, implementing Stream concept
HandlerType of handler, implementing Handler concept.
Parameters
isInput stream to be parsed.
handlerThe handler to receive events.
Returns
Whether the parsing is successful.

Definition at line 601 of file reader.h.

◆ Parse() [2/2]

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
ParseResult GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::Parse ( InputStream & is,
Handler & handler )
inline

Parse JSON text.

Template Parameters
parseFlagsCombination of ParseFlag.
InputStreamType of input stream, implementing Stream concept.
HandlerType of handler, implementing Handler concept.
Parameters
isInput stream to be parsed.
handlerThe handler to receive events.
Returns
Whether the parsing is successful.

Definition at line 560 of file reader.h.

Referenced by GenericReader< UTF8< char >, UTF8< char >, CrtAllocator >::Parse().

Here is the caller graph for this function:

◆ ParseArray()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseArray ( InputStream & is,
Handler & handler )
inlineprivate

Definition at line 809 of file reader.h.

◆ ParseFalse()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseFalse ( InputStream & is,
Handler & handler )
inlineprivate

Definition at line 883 of file reader.h.

◆ ParseHex4()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<typename InputStream>
unsigned GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseHex4 ( InputStream & is,
size_t escapeOffset )
inlineprivate

Definition at line 907 of file reader.h.

◆ ParseNull()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseNull ( InputStream & is,
Handler & handler )
inlineprivate

Definition at line 857 of file reader.h.

◆ ParseNumber()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseNumber ( InputStream & is,
Handler & handler )
inlineprivate

Definition at line 1469 of file reader.h.

◆ ParseObject()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseObject ( InputStream & is,
Handler & handler )
inlineprivate

Definition at line 741 of file reader.h.

◆ ParseString()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseString ( InputStream & is,
Handler & handler,
bool isKey = false )
inlineprivate

Definition at line 960 of file reader.h.

◆ ParseStringToStream()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename SEncoding, typename TEncoding, typename InputStream, typename OutputStream>
RAPIDJSON_FORCEINLINE void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseStringToStream ( InputStream & is,
OutputStream & os )
inlineprivate

Definition at line 992 of file reader.h.

◆ ParseTrue()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseTrue ( InputStream & is,
Handler & handler )
inlineprivate

Definition at line 870 of file reader.h.

◆ ParseValue()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ParseValue ( InputStream & is,
Handler & handler )
inlineprivate

Definition at line 1753 of file reader.h.

◆ Predict()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
RAPIDJSON_FORCEINLINE IterativeParsingState GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::Predict ( IterativeParsingState state,
Token token ) const
inlineprivate

Definition at line 1845 of file reader.h.

◆ ScanCopyUnescapedString()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<typename InputStream, typename OutputStream>
RAPIDJSON_FORCEINLINE void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::ScanCopyUnescapedString ( InputStream & ,
OutputStream &  )
inlinestaticprivate

Definition at line 1072 of file reader.h.

◆ SetParseError()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::SetParseError ( ParseErrorCode code,
size_t offset )
inlineprotected

Definition at line 692 of file reader.h.

◆ SkipWhitespaceAndComments()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream>
void GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::SkipWhitespaceAndComments ( InputStream & is)
inlineprivate

Definition at line 712 of file reader.h.

◆ Tokenize()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
RAPIDJSON_FORCEINLINE Token GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::Tokenize ( Ch c) const
inlineprivate

Definition at line 1818 of file reader.h.

◆ Transit()

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
template<unsigned parseFlags, typename InputStream, typename Handler>
RAPIDJSON_FORCEINLINE IterativeParsingState GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::Transit ( IterativeParsingState src,
Token token,
IterativeParsingState dst,
InputStream & is,
Handler & handler )
inlineprivate

Definition at line 2012 of file reader.h.

Member Data Documentation

◆ kDefaultStackCapacity

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
const size_t GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::kDefaultStackCapacity = 256
staticprivate

Default stack capacity in bytes for storing a single decoded string.

Definition at line 2227 of file reader.h.

◆ parseResult_

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
ParseResult GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::parseResult_
private

Definition at line 2229 of file reader.h.

◆ stack_

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
internal::Stack<StackAllocator> GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::stack_
private

A stack for storing decoded string temporarily during non-destructive parsing.

Definition at line 2228 of file reader.h.

◆ state_

template<typename SourceEncoding, typename TargetEncoding, typename StackAllocator = CrtAllocator>
IterativeParsingState GenericReader< SourceEncoding, TargetEncoding, StackAllocator >::state_
private

Definition at line 2230 of file reader.h.


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