8#ifndef INCLUDED_BALJSN_JSONTOKENIZER
9#define INCLUDED_BALJSN_JSONTOKENIZER
272#include <bdlscm_version.h>
295#include <bsl_deque.h>
296#include <bsl_iomanip.h>
298#include <bsl_ostream.h>
299#include <bsl_stack.h>
300#include <bsl_streambuf.h>
301#include <bsl_string.h>
302#include <bsl_string_view.h>
344 template <
class TYPE>
381 typedef bdlb::Variant <ElementName, ElementValue>
TokenValue;
395 typedef bdljsn::JsonArray ::ConstIterator ElementItr;
398 typedef bdlb::Variant <ElementItr, MemberItr> Position;
409 TokenList d_tokenList;
414 ContextStack d_contextStack;
421 static const Token s_BEGIN;
422 static const Token s_START_OBJECT;
423 static const Token s_END_OBJECT;
424 static const Token s_START_ARRAY;
425 static const Token s_END_ARRAY;
426 static const Token s_ERROR;
432 void printTokens()
const;
458 static bsl::ostream&
print(bsl::ostream& stream,
461 int spacesPerLevel = 4);
576: d_tokenizer_p(tokenizer)
610: d_tokenList (
bslma::AllocatorUtil::adapt(allocator))
611, d_contextStack(
bslma::AllocatorUtil::adapt(allocator))
619: d_tokenList (
bslma::AllocatorUtil::adapt(allocator))
620, d_contextStack(
bslma::AllocatorUtil::adapt(allocator))
627 context.d_json_p = json;
628 context.d_state = json->
isArray() ? e_JSON_START :
631 d_contextStack.
push(context);
632 d_tokenList.
push_back(JsonTokenizer::s_BEGIN);
638int JsonTokenizer::getNextToken()
640 if (d_contextStack.
empty()) {
643 Context& context = d_contextStack.
top();
645 context.d_json_p->visit<
void>(d_visitor);
656 return d_tokenList.
front().d_tokenType;
686 return bslma::AATypeUtil::getAllocatorFromSubobject<allocator_type>(
695 JsonTokenizer::TokenType value)
697 return JsonTokenizer::print(stream, value, 0, -1);
Definition baljsn_jsontokenizer.h:320
void operator()(const bdljsn::JsonObject &object) const
~JsonTokenizer_Visitor()
Destroy this JsonTokenizer_Visitor object.
Definition baljsn_jsontokenizer.h:582
JsonTokenizer_Visitor(JsonTokenizer *tokenizer)
Definition baljsn_jsontokenizer.h:575
void operator()(const bdljsn::JsonArray &array) const
Definition baljsn_jsontokenizer.h:357
TokenType
Definition baljsn_jsontokenizer.h:363
@ e_END_OBJECT
Definition baljsn_jsontokenizer.h:367
@ e_START_ARRAY
Definition baljsn_jsontokenizer.h:368
@ e_END_ARRAY
Definition baljsn_jsontokenizer.h:369
@ e_ERROR
Definition baljsn_jsontokenizer.h:371
@ e_BEGIN
Definition baljsn_jsontokenizer.h:364
@ e_START_OBJECT
Definition baljsn_jsontokenizer.h:366
@ e_ELEMENT_NAME
Definition baljsn_jsontokenizer.h:365
@ e_ELEMENT_VALUE
Definition baljsn_jsontokenizer.h:370
static const char * toAscii(TokenType value)
~JsonTokenizer()
Destroy this object.
JsonTokenizer()
Definition baljsn_jsontokenizer.h:601
allocator_type get_allocator() const
Definition baljsn_jsontokenizer.h:684
int reset(const bdljsn::Json *json)
bsl::allocator allocator_type
Definition baljsn_jsontokenizer.h:374
friend class JsonTokenizer_Visitor
Definition baljsn_jsontokenizer.h:435
TokenType tokenType() const
Return the type of the current token.
Definition baljsn_jsontokenizer.h:652
int value(bsl::string_view *data) const
Definition baljsn_jsontokenizer.h:660
static bsl::ostream & print(bsl::ostream &stream, TokenType value, int level=0, int spacesPerLevel=4)
Definition bdljsn_json.h:551
Definition bdljsn_json.h:1080
Container::const_iterator ConstIterator
Definition bdljsn_json.h:1092
Definition bdljsn_json.h:1461
bool isObject() const
Definition bdljsn_json.h:5082
bool isArray() const
Definition bdljsn_json.h:5058
reference front()
Definition bslstl_deque.h:2154
bool empty() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_deque.h:2287
Definition bslma_bslallocator.h:588
Definition bslstl_stringview.h:471
Definition bslstl_deque.h:814
void push_back(const VALUE_TYPE &value)
Definition bslstl_deque.h:3719
Definition bslstl_stack.h:412
bool empty() const
Definition bslstl_stack.h:1084
void push(const value_type &value)
Push the specified value onto the top of this stack.
Definition bslstl_stack.h:1032
void swap(stack &other) BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(bsl reference top()
Definition bslstl_stack.h:655
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_ASSERT_OPT_UNREACHABLE(X)
Definition bsls_assert.h:2065
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition baljsn_convertfromjsonoptions.h:112
bsl::ostream & operator<<(bsl::ostream &stream, const DatumDecoderOptions &rhs)
Definition baljsn_encoder_testtypes.h:76