-
Notifications
You must be signed in to change notification settings - Fork 0
/
jsonparser.h
49 lines (44 loc) · 1.55 KB
/
jsonparser.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#ifndef JSONPARSER_H
#define JSONPARSER_H
#include <memory>
#include <vector>
#include <string>
class jsonParser
{
private:
struct Element{
public:
enum Type{
STRING,
NUMBER,
OBJECT,
ARRAY,
EL_TRUE,
EL_FALSE,
EL_NULL,
};
private:
Type type;
//void *value;
std::unique_ptr<void, void(*)(void*)> value;
public:
Element(Type type, std::unique_ptr<void, void(*)(void*)> value) : type(type), value(move(value)) {this->type = type;}
};
struct Object_field{
private:
std::string key;
std::unique_ptr<Element> element;
public:
Object_field(std::string key, std::unique_ptr<Element> element) : key(key), element(move(element)) {}
};
public:
static bool checkCorrect(std::vector <std::string> &dataVector, std::string &error);
private:
//статик по методам - метод может быть вызван от реализации класса и от копии (jsonParser:: нейм функшен)
//статик методы внутри себя могут вызывать только статик методы
static std::unique_ptr<std::string> scanNumber(std::stringstream& input);
static std::unique_ptr<std::vector<std::unique_ptr<Object_field>>> scanObj(std::stringstream& input);
static std::unique_ptr<Element> scanEl(std::stringstream &input);
static std::unique_ptr<std::string> scanStr(std::stringstream& input);
};
#endif // JSONPARSER_H