aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/yaml/fyamlcpp/fyamlcpp.h
diff options
context:
space:
mode:
authorinnokentii <innokentii@yandex-team.com>2023-03-02 13:04:09 +0300
committerinnokentii <innokentii@yandex-team.com>2023-03-02 13:04:09 +0300
commit502e6daf19bdde912acdb7fff06f1e69e9ccfddf (patch)
treefc85748caec9a506aae3d7821b42c2c3d5ac1a46 /library/cpp/yaml/fyamlcpp/fyamlcpp.h
parented0c1088f25e4078c42314bc9c0d67ac971a0710 (diff)
downloadydb-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.h37
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