parse.cpp 1.37 KB
Newer Older
1
#include "yaml-cpp/node/parse.h"
Jesse Beder's avatar
Jesse Beder committed
2
3
4
5

#include <fstream>
#include <sstream>

Ian Taylor's avatar
Ian Taylor committed
6
#include "nodebuilder.h"
7
#include "yaml-cpp/node/impl.h"
Ian Taylor's avatar
Ian Taylor committed
8
#include "yaml-cpp/node/node.h"
9
10
#include "yaml-cpp/parser.h"

Jesse Beder's avatar
Jesse Beder committed
11
12
13
14
15
16
17
18
19
20
21
22
23
24
namespace YAML {
Node Load(const std::string& input) {
  std::stringstream stream(input);
  return Load(stream);
}

Node Load(const char* input) {
  std::stringstream stream(input);
  return Load(stream);
}

Node Load(std::istream& input) {
  Parser parser(input);
  NodeBuilder builder;
25
  if (!parser.HandleNextDocument(builder)) {
Jesse Beder's avatar
Jesse Beder committed
26
    return Node();
27
  }
28

Jesse Beder's avatar
Jesse Beder committed
29
30
31
32
33
  return builder.Root();
}

Node LoadFile(const std::string& filename) {
  std::ifstream fin(filename.c_str());
34
  if (!fin) {
Jesse Beder's avatar
Jesse Beder committed
35
    throw BadFile();
36
  }
Jesse Beder's avatar
Jesse Beder committed
37
38
  return Load(fin);
}
39

Jesse Beder's avatar
Jesse Beder committed
40
41
42
43
std::vector<Node> LoadAll(const std::string& input) {
  std::stringstream stream(input);
  return LoadAll(stream);
}
44

Jesse Beder's avatar
Jesse Beder committed
45
46
47
48
49
50
51
52
53
54
55
std::vector<Node> LoadAll(const char* input) {
  std::stringstream stream(input);
  return LoadAll(stream);
}

std::vector<Node> LoadAll(std::istream& input) {
  std::vector<Node> docs;

  Parser parser(input);
  while (1) {
    NodeBuilder builder;
56
    if (!parser.HandleNextDocument(builder)) {
Jesse Beder's avatar
Jesse Beder committed
57
      break;
58
    }
Jesse Beder's avatar
Jesse Beder committed
59
60
61
62
63
64
65
66
    docs.push_back(builder.Root());
  }

  return docs;
}

std::vector<Node> LoadAllFromFile(const std::string& filename) {
  std::ifstream fin(filename.c_str());
67
  if (!fin) {
Jesse Beder's avatar
Jesse Beder committed
68
    throw BadFile();
69
  }
Jesse Beder's avatar
Jesse Beder committed
70
71
  return LoadAll(fin);
}
72
}  // namespace YAML