diff options
author | bnagaev <bnagaev@yandex-team.ru> | 2022-02-10 16:47:04 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:47:04 +0300 |
commit | d6449ba66291ff0c0d352c82e6eb3efb4c8a7e8d (patch) | |
tree | d5dca6d44593f5e52556a1cc7b1ab0386e096ebe /contrib/libs/yaml-cpp/src/scanner.h | |
parent | 1861d4c1402bb2c67a3e6b43b51706081b74508a (diff) | |
download | ydb-d6449ba66291ff0c0d352c82e6eb3efb4c8a7e8d.tar.gz |
Restoring authorship annotation for <bnagaev@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/yaml-cpp/src/scanner.h')
-rw-r--r-- | contrib/libs/yaml-cpp/src/scanner.h | 266 |
1 files changed, 133 insertions, 133 deletions
diff --git a/contrib/libs/yaml-cpp/src/scanner.h b/contrib/libs/yaml-cpp/src/scanner.h index 7bb2ccc71a..62a385b3ea 100644 --- a/contrib/libs/yaml-cpp/src/scanner.h +++ b/contrib/libs/yaml-cpp/src/scanner.h @@ -1,96 +1,96 @@ -#ifndef SCANNER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 -#define SCANNER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 - -#if defined(_MSC_VER) || \ - (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ - (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 -#pragma once -#endif - -#include <cstddef> -#include <ios> -#include <map> -#include <queue> -#include <set> -#include <stack> -#include <string> - -#include "ptr_vector.h" -#include "stream.h" -#include "token.h" -#include "yaml-cpp/mark.h" - -namespace YAML { -class Node; -class RegEx; - +#ifndef SCANNER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 +#define SCANNER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 + +#if defined(_MSC_VER) || \ + (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ + (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 +#pragma once +#endif + +#include <cstddef> +#include <ios> +#include <map> +#include <queue> +#include <set> +#include <stack> +#include <string> + +#include "ptr_vector.h" +#include "stream.h" +#include "token.h" +#include "yaml-cpp/mark.h" + +namespace YAML { +class Node; +class RegEx; + /** * A scanner transforms a stream of characters into a stream of tokens. */ -class Scanner { - public: +class Scanner { + public: explicit Scanner(std::istream &in); - ~Scanner(); - + ~Scanner(); + /** Returns true if there are no more tokens to be read. */ - bool empty(); + bool empty(); /** Removes the next token in the queue. */ - void pop(); + void pop(); /** Returns, but does not remove, the next token in the queue. */ - Token &peek(); + Token &peek(); /** Returns the current mark in the input stream. */ - Mark mark() const; - - private: - struct IndentMarker { - enum INDENT_TYPE { MAP, SEQ, NONE }; - enum STATUS { VALID, INVALID, UNKNOWN }; - IndentMarker(int column_, INDENT_TYPE type_) - : column(column_), type(type_), status(VALID), pStartToken(0) {} - - int column; - INDENT_TYPE type; - STATUS status; - Token *pStartToken; - }; - - enum FLOW_MARKER { FLOW_MAP, FLOW_SEQ }; - - private: - // scanning + Mark mark() const; + + private: + struct IndentMarker { + enum INDENT_TYPE { MAP, SEQ, NONE }; + enum STATUS { VALID, INVALID, UNKNOWN }; + IndentMarker(int column_, INDENT_TYPE type_) + : column(column_), type(type_), status(VALID), pStartToken(0) {} + + int column; + INDENT_TYPE type; + STATUS status; + Token *pStartToken; + }; + + enum FLOW_MARKER { FLOW_MAP, FLOW_SEQ }; + + private: + // scanning /** * Scans until there's a valid token at the front of the queue, or the queue * is empty. The state can be checked by {@link #empty}, and the next token * retrieved by {@link #peek}. */ - void EnsureTokensInQueue(); + void EnsureTokensInQueue(); /** * The main scanning function; this method branches out to scan whatever the * next token should be. */ - void ScanNextToken(); + void ScanNextToken(); /** Eats the input stream until it reaches the next token-like thing. */ - void ScanToNextToken(); + void ScanToNextToken(); /** Sets the initial conditions for starting a stream. */ - void StartStream(); + void StartStream(); /** Closes out the stream, finish up, etc. */ - void EndStream(); - - Token *PushToken(Token::TYPE type); - - bool InFlowContext() const { return !m_flows.empty(); } - bool InBlockContext() const { return m_flows.empty(); } - std::size_t GetFlowLevel() const { return m_flows.size(); } + void EndStream(); - Token::TYPE GetStartTokenFor(IndentMarker::INDENT_TYPE type) const; + Token *PushToken(Token::TYPE type); + + bool InFlowContext() const { return !m_flows.empty(); } + bool InBlockContext() const { return m_flows.empty(); } + std::size_t GetFlowLevel() const { return m_flows.size(); } + + Token::TYPE GetStartTokenFor(IndentMarker::INDENT_TYPE type) const; /** * Pushes an indentation onto the stack, and enqueues the proper token @@ -98,93 +98,93 @@ class Scanner { * * @return the indent marker it generates (if any). */ - IndentMarker *PushIndentTo(int column, IndentMarker::INDENT_TYPE type); + IndentMarker *PushIndentTo(int column, IndentMarker::INDENT_TYPE type); /** * Pops indentations off the stack until it reaches the current indentation * level, and enqueues the proper token each time. Then pops all invalid * indentations off. */ - void PopIndentToHere(); + void PopIndentToHere(); /** * Pops all indentations (except for the base empty one) off the stack, and * enqueues the proper token each time. */ - void PopAllIndents(); + void PopAllIndents(); /** Pops a single indent, pushing the proper token. */ - void PopIndent(); - int GetTopIndent() const; - - // checking input - bool CanInsertPotentialSimpleKey() const; - bool ExistsActiveSimpleKey() const; - void InsertPotentialSimpleKey(); - void InvalidateSimpleKey(); - bool VerifySimpleKey(); - void PopAllSimpleKeys(); - + void PopIndent(); + int GetTopIndent() const; + + // checking input + bool CanInsertPotentialSimpleKey() const; + bool ExistsActiveSimpleKey() const; + void InsertPotentialSimpleKey(); + void InvalidateSimpleKey(); + bool VerifySimpleKey(); + void PopAllSimpleKeys(); + /** * Throws a ParserException with the current token location (if available), * and does not parse any more tokens. */ - void ThrowParserException(const std::string &msg) const; - - bool IsWhitespaceToBeEaten(char ch); + void ThrowParserException(const std::string &msg) const; + + bool IsWhitespaceToBeEaten(char ch); /** * Returns the appropriate regex to check if the next token is a value token. */ - const RegEx &GetValueRegex() const; - - struct SimpleKey { - SimpleKey(const Mark &mark_, std::size_t flowLevel_); - - void Validate(); - void Invalidate(); - - Mark mark; - std::size_t flowLevel; - IndentMarker *pIndent; - Token *pMapStart, *pKey; - }; - - // and the tokens - void ScanDirective(); - void ScanDocStart(); - void ScanDocEnd(); - void ScanBlockSeqStart(); - void ScanBlockMapSTart(); - void ScanBlockEnd(); - void ScanBlockEntry(); - void ScanFlowStart(); - void ScanFlowEnd(); - void ScanFlowEntry(); - void ScanKey(); - void ScanValue(); - void ScanAnchorOrAlias(); - void ScanTag(); - void ScanPlainScalar(); - void ScanQuotedScalar(); - void ScanBlockScalar(); - - private: - // the stream - Stream INPUT; - - // the output (tokens) - std::queue<Token> m_tokens; - - // state info - bool m_startedStream, m_endedStream; - bool m_simpleKeyAllowed; - bool m_canBeJSONFlow; - std::stack<SimpleKey> m_simpleKeys; - std::stack<IndentMarker *> m_indents; - ptr_vector<IndentMarker> m_indentRefs; // for "garbage collection" - std::stack<FLOW_MARKER> m_flows; -}; -} - -#endif // SCANNER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 + const RegEx &GetValueRegex() const; + + struct SimpleKey { + SimpleKey(const Mark &mark_, std::size_t flowLevel_); + + void Validate(); + void Invalidate(); + + Mark mark; + std::size_t flowLevel; + IndentMarker *pIndent; + Token *pMapStart, *pKey; + }; + + // and the tokens + void ScanDirective(); + void ScanDocStart(); + void ScanDocEnd(); + void ScanBlockSeqStart(); + void ScanBlockMapSTart(); + void ScanBlockEnd(); + void ScanBlockEntry(); + void ScanFlowStart(); + void ScanFlowEnd(); + void ScanFlowEntry(); + void ScanKey(); + void ScanValue(); + void ScanAnchorOrAlias(); + void ScanTag(); + void ScanPlainScalar(); + void ScanQuotedScalar(); + void ScanBlockScalar(); + + private: + // the stream + Stream INPUT; + + // the output (tokens) + std::queue<Token> m_tokens; + + // state info + bool m_startedStream, m_endedStream; + bool m_simpleKeyAllowed; + bool m_canBeJSONFlow; + std::stack<SimpleKey> m_simpleKeys; + std::stack<IndentMarker *> m_indents; + ptr_vector<IndentMarker> m_indentRefs; // for "garbage collection" + std::stack<FLOW_MARKER> m_flows; +}; +} + +#endif // SCANNER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 |