diff options
author | innokentii <innokentii@yandex-team.com> | 2023-03-02 13:04:09 +0300 |
---|---|---|
committer | innokentii <innokentii@yandex-team.com> | 2023-03-02 13:04:09 +0300 |
commit | 502e6daf19bdde912acdb7fff06f1e69e9ccfddf (patch) | |
tree | fc85748caec9a506aae3d7821b42c2c3d5ac1a46 /library/cpp/yaml/fyamlcpp/fyamlcpp.h | |
parent | ed0c1088f25e4078c42314bc9c0d67ac971a0710 (diff) | |
download | ydb-502e6daf19bdde912acdb7fff06f1e69e9ccfddf.tar.gz |
Add multidoc support to fyamlcpp
add multidoc support to libfyaml
Diffstat (limited to 'library/cpp/yaml/fyamlcpp/fyamlcpp.h')
-rw-r--r-- | library/cpp/yaml/fyamlcpp/fyamlcpp.h | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/library/cpp/yaml/fyamlcpp/fyamlcpp.h b/library/cpp/yaml/fyamlcpp/fyamlcpp.h index 7437b74ef7f..5b645a557c0 100644 --- a/library/cpp/yaml/fyamlcpp/fyamlcpp.h +++ b/library/cpp/yaml/fyamlcpp/fyamlcpp.h @@ -8,6 +8,7 @@ #include <memory> #include <optional> +struct fy_parser; struct fy_node; struct fy_document; struct fy_diag; @@ -67,6 +68,8 @@ class TSequenceIterator; class TReverseSequenceIterator; class TSequence; class TJsonEmitter; +class TParser; +struct TMark; class TDocumentIterator { friend class TDocument; @@ -88,6 +91,7 @@ class TNodeRef { friend class TSequence; friend class TSequenceIterator; friend class TReverseSequenceIterator; + friend class TJsonEmitter; TNodeRef(fy_node* node) : Node_(node) @@ -112,6 +116,8 @@ public: TNode Copy() const; + TNode Copy(const TDocument& to) const; + bool IsAlias() const; TNodeRef ResolveAlias() const; @@ -500,7 +506,9 @@ private: class TDocument { friend class TNode; + friend class TNodeRef; friend class TJsonEmitter; + friend class TParser; TDocument(fy_document* doc = nullptr, fy_diag* diag = nullptr); @@ -550,7 +558,6 @@ public: return it; } - TDocumentNodeIterator end() { return TDocumentNodeIterator(TNodeRef(nullptr)); } @@ -559,6 +566,10 @@ public: std::unique_ptr<char, void(*)(char*)> EmitToCharArray() const; + TMark BeginMark() const; + + TMark EndMark() const; + private: std::unique_ptr<fy_document, void(*)(fy_document*)> Document_; std::unique_ptr<fy_diag, void(*)(fy_diag*)> Diag_; @@ -578,16 +589,30 @@ private: class TJsonEmitter { public: - TJsonEmitter(const TDocument& doc) : Document_(doc) {} + TJsonEmitter(TDocument& doc) : Node_(doc.Root()) {} + TJsonEmitter(const TNodeRef& node) : Node_(node) {} std::unique_ptr<char, void(*)(char*)> EmitToCharArray() const; private: - const TDocument& Document_; + const TNodeRef Node_; +}; + +class TParser { + TParser(fy_parser* doc, fy_diag* diag); +public: + static TParser Create(const char* cstr); + + std::optional<TDocument> NextDocument(); +private: + std::unique_ptr<fy_parser, void(*)(fy_parser*)> Parser_; + std::unique_ptr<fy_diag, void(*)(fy_diag*)> Diag_; +}; - fy_document* Document() const { - return Document_.Document_.get(); - } +struct TMark { + size_t InputPos; + int Line; + int Column; }; } // namesapce NFyaml |