summary refs log tree commit diff stats
path: root/generator/frame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'generator/frame.cpp')
-rw-r--r--generator/frame.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/generator/frame.cpp b/generator/frame.cpp new file mode 100644 index 0000000..9f0653f --- /dev/null +++ b/generator/frame.cpp
@@ -0,0 +1,83 @@
1#include "frame.h"
2#include "database.h"
3#include "field.h"
4
5namespace verbly {
6 namespace generator {
7
8 int frame::nextId_ = 0;
9
10 frame::frame() : id_(nextId_++)
11 {
12 }
13
14 void frame::push_back(part fp)
15 {
16 parts_.push_back(std::move(fp));
17 }
18
19 database& operator<<(database& db, const frame& arg)
20 {
21 std::list<field> fields;
22 fields.emplace_back("frame_id", arg.getId());
23
24 nlohmann::json jsonParts;
25 for (const part& p : arg)
26 {
27 nlohmann::json jsonPart;
28 jsonPart["type"] = static_cast<int>(p.getType());
29
30 switch (p.getType())
31 {
32 case part::type::noun_phrase:
33 {
34 jsonPart["role"] = p.getNounRole();
35 jsonPart["selrestrs"] = p.getNounSelrestrs().toJson();
36 jsonPart["synrestrs"] = p.getNounSynrestrs();
37
38 break;
39 }
40
41 case part::type::preposition:
42 {
43 jsonPart["choices"] = p.getPrepositionChoices();
44 jsonPart["literal"] = p.isPrepositionLiteral();
45
46 break;
47 }
48
49 case part::type::literal:
50 {
51 jsonPart["value"] = p.getLiteralValue();
52
53 break;
54 }
55
56 case part::type::verb:
57 case part::type::adjective:
58 case part::type::adverb:
59 {
60 break;
61 }
62
63 case part::type::invalid:
64 {
65 // Invalid parts should not be serialized.
66 assert(false);
67
68 break;
69 }
70 }
71
72 jsonParts.emplace_back(std::move(jsonPart));
73 }
74
75 fields.emplace_back("data", jsonParts.dump());
76
77 db.insertIntoTable("frames", std::move(fields));
78
79 return db;
80 }
81
82 };
83};