diff options
Diffstat (limited to 'lib/part.cpp')
| -rw-r--r-- | lib/part.cpp | 41 |
1 files changed, 20 insertions, 21 deletions
| diff --git a/lib/part.cpp b/lib/part.cpp index cbd951b..341d4bb 100644 --- a/lib/part.cpp +++ b/lib/part.cpp | |||
| @@ -1,14 +1,14 @@ | |||
| 1 | #include "part.h" | 1 | #include "part.h" |
| 2 | #include <stdexcept> | 2 | #include <stdexcept> |
| 3 | #include <sqlite3.h> | 3 | #include <sqlite3.h> |
| 4 | #include "selrestr.h" | ||
| 5 | #include "database.h" | 4 | #include "database.h" |
| 5 | #include "util.h" | ||
| 6 | 6 | ||
| 7 | namespace verbly { | 7 | namespace verbly { |
| 8 | 8 | ||
| 9 | const object part::objectType = object::part; | 9 | const object part::objectType = object::part; |
| 10 | 10 | ||
| 11 | const std::list<std::string> part::select = {"part_id", "frame_id", "part_index", "type", "role", "selrestrs", "prepositions", "preposition_literality", "literal_value"}; | 11 | const std::list<std::string> part::select = {"part_id", "frame_id", "part_index", "type", "role", "prepositions", "preposition_literality", "literal_value"}; |
| 12 | 12 | ||
| 13 | const field part::index = field::integerField(object::part, "part_index"); | 13 | const field part::index = field::integerField(object::part, "part_index"); |
| 14 | const field part::type = field::integerField(object::part, "type"); | 14 | const field part::type = field::integerField(object::part, "type"); |
| @@ -17,17 +17,21 @@ namespace verbly { | |||
| 17 | 17 | ||
| 18 | const field part::frames = field::joinField(object::part, "frame_id", object::frame); | 18 | const field part::frames = field::joinField(object::part, "frame_id", object::frame); |
| 19 | 19 | ||
| 20 | const field part::selrestr_field::selrestrJoin = field::joinField(object::part, "part_id", "selrestrs"); | ||
| 21 | const field part::selrestr_field::selrestrField = field::stringField("selrestrs", "selrestr"); | ||
| 22 | |||
| 20 | const field part::synrestr_field::synrestrJoin = field::joinField(object::part, "part_id", "synrestrs"); | 23 | const field part::synrestr_field::synrestrJoin = field::joinField(object::part, "part_id", "synrestrs"); |
| 21 | const field part::synrestr_field::synrestrField = field::stringField("synrestrs", "synrestr"); | 24 | const field part::synrestr_field::synrestrField = field::stringField("synrestrs", "synrestr"); |
| 22 | 25 | ||
| 26 | const part::selrestr_field part::selrestrs = {}; | ||
| 23 | const part::synrestr_field part::synrestrs = {}; | 27 | const part::synrestr_field part::synrestrs = {}; |
| 24 | 28 | ||
| 25 | part part::createNounPhrase(std::string role, selrestr selrestrs, std::set<std::string> synrestrs) | 29 | part part::createNounPhrase(std::string role, std::set<std::string> selrestrs, std::set<std::string> synrestrs) |
| 26 | { | 30 | { |
| 27 | part p(part_type::noun_phrase); | 31 | part p(part_type::noun_phrase); |
| 28 | 32 | ||
| 29 | new(&p.noun_phrase_.role) std::string(std::move(role)); | 33 | new(&p.noun_phrase_.role) std::string(std::move(role)); |
| 30 | new(&p.noun_phrase_.selrestrs) selrestr(std::move(selrestrs)); | 34 | new(&p.noun_phrase_.selrestrs) std::set<std::string>(std::move(selrestrs)); |
| 31 | new(&p.noun_phrase_.synrestrs) std::set<std::string>(std::move(synrestrs)); | 35 | new(&p.noun_phrase_.synrestrs) std::set<std::string>(std::move(synrestrs)); |
| 32 | 36 | ||
| 33 | return p; | 37 | return p; |
| @@ -78,7 +82,7 @@ namespace verbly { | |||
| 78 | case part_type::noun_phrase: | 82 | case part_type::noun_phrase: |
| 79 | { | 83 | { |
| 80 | new(&noun_phrase_.role) std::string(reinterpret_cast<const char*>(sqlite3_column_blob(row, 4))); | 84 | new(&noun_phrase_.role) std::string(reinterpret_cast<const char*>(sqlite3_column_blob(row, 4))); |
| 81 | new(&noun_phrase_.selrestrs) selrestr(nlohmann::json::parse(reinterpret_cast<const char*>(sqlite3_column_blob(row, 5)))); | 85 | new(&noun_phrase_.selrestrs) std::set<std::string>(db.selrestrs(id)); |
| 82 | new(&noun_phrase_.synrestrs) std::set<std::string>(db.synrestrs(id)); | 86 | new(&noun_phrase_.synrestrs) std::set<std::string>(db.synrestrs(id)); |
| 83 | 87 | ||
| 84 | break; | 88 | break; |
| @@ -86,22 +90,17 @@ namespace verbly { | |||
| 86 | 90 | ||
| 87 | case part_type::preposition: | 91 | case part_type::preposition: |
| 88 | { | 92 | { |
| 89 | new(&preposition_.choices) std::vector<std::string>(); | 93 | std::string serializedChoices(reinterpret_cast<const char*>(sqlite3_column_blob(row, 5))); |
| 90 | preposition_.literal = (sqlite3_column_int(row, 7) == 1); | 94 | new(&preposition_.choices) std::vector<std::string>(split<std::vector<std::string>>(serializedChoices, ",")); |
| 91 | 95 | ||
| 92 | std::string choicesJsonStr(reinterpret_cast<const char*>(sqlite3_column_blob(row, 6))); | 96 | preposition_.literal = (sqlite3_column_int(row, 6) == 1); |
| 93 | nlohmann::json choicesJson = nlohmann::json::parse(std::move(choicesJsonStr)); | ||
| 94 | for (const nlohmann::json& choiceJson : choicesJson) | ||
| 95 | { | ||
| 96 | preposition_.choices.push_back(choiceJson.get<std::string>()); | ||
| 97 | } | ||
| 98 | 97 | ||
| 99 | break; | 98 | break; |
| 100 | } | 99 | } |
| 101 | 100 | ||
| 102 | case part_type::literal: | 101 | case part_type::literal: |
| 103 | { | 102 | { |
| 104 | new(&literal_) std::string(reinterpret_cast<const char*>(sqlite3_column_blob(row, 8))); | 103 | new(&literal_) std::string(reinterpret_cast<const char*>(sqlite3_column_blob(row, 7))); |
| 105 | 104 | ||
| 106 | break; | 105 | break; |
| 107 | } | 106 | } |
| @@ -125,7 +124,7 @@ namespace verbly { | |||
| 125 | case part_type::noun_phrase: | 124 | case part_type::noun_phrase: |
| 126 | { | 125 | { |
| 127 | new(&noun_phrase_.role) std::string(other.noun_phrase_.role); | 126 | new(&noun_phrase_.role) std::string(other.noun_phrase_.role); |
| 128 | new(&noun_phrase_.selrestrs) selrestr(other.noun_phrase_.selrestrs); | 127 | new(&noun_phrase_.selrestrs) std::set<std::string>(other.noun_phrase_.selrestrs); |
| 129 | new(&noun_phrase_.synrestrs) std::set<std::string>(other.noun_phrase_.synrestrs); | 128 | new(&noun_phrase_.synrestrs) std::set<std::string>(other.noun_phrase_.synrestrs); |
| 130 | 129 | ||
| 131 | break; | 130 | break; |
| @@ -174,7 +173,7 @@ namespace verbly { | |||
| 174 | 173 | ||
| 175 | type tempType = first.type_; | 174 | type tempType = first.type_; |
| 176 | std::string tempRole; | 175 | std::string tempRole; |
| 177 | selrestr tempSelrestrs; | 176 | std::set<std::string> tempSelrestrs; |
| 178 | std::set<std::string> tempSynrestrs; | 177 | std::set<std::string> tempSynrestrs; |
| 179 | std::vector<std::string> tempChoices; | 178 | std::vector<std::string> tempChoices; |
| 180 | bool tempPrepLiteral; | 179 | bool tempPrepLiteral; |
| @@ -224,7 +223,7 @@ namespace verbly { | |||
| 224 | case type::noun_phrase: | 223 | case type::noun_phrase: |
| 225 | { | 224 | { |
| 226 | new(&first.noun_phrase_.role) std::string(std::move(second.noun_phrase_.role)); | 225 | new(&first.noun_phrase_.role) std::string(std::move(second.noun_phrase_.role)); |
| 227 | new(&first.noun_phrase_.selrestrs) selrestr(std::move(second.noun_phrase_.selrestrs)); | 226 | new(&first.noun_phrase_.selrestrs) std::set<std::string>(std::move(second.noun_phrase_.selrestrs)); |
| 228 | new(&first.noun_phrase_.synrestrs) std::set<std::string>(std::move(second.noun_phrase_.synrestrs)); | 227 | new(&first.noun_phrase_.synrestrs) std::set<std::string>(std::move(second.noun_phrase_.synrestrs)); |
| 229 | 228 | ||
| 230 | break; | 229 | break; |
| @@ -263,7 +262,7 @@ namespace verbly { | |||
| 263 | case type::noun_phrase: | 262 | case type::noun_phrase: |
| 264 | { | 263 | { |
| 265 | new(&second.noun_phrase_.role) std::string(std::move(tempRole)); | 264 | new(&second.noun_phrase_.role) std::string(std::move(tempRole)); |
| 266 | new(&second.noun_phrase_.selrestrs) selrestr(std::move(tempSelrestrs)); | 265 | new(&second.noun_phrase_.selrestrs) std::set<std::string>(std::move(tempSelrestrs)); |
| 267 | new(&second.noun_phrase_.synrestrs) std::set<std::string>(std::move(tempSynrestrs)); | 266 | new(&second.noun_phrase_.synrestrs) std::set<std::string>(std::move(tempSynrestrs)); |
| 268 | 267 | ||
| 269 | break; | 268 | break; |
| @@ -304,7 +303,7 @@ namespace verbly { | |||
| 304 | using set_type = std::set<std::string>; | 303 | using set_type = std::set<std::string>; |
| 305 | 304 | ||
| 306 | noun_phrase_.role.~string_type(); | 305 | noun_phrase_.role.~string_type(); |
| 307 | noun_phrase_.selrestrs.~selrestr(); | 306 | noun_phrase_.selrestrs.~set_type(); |
| 308 | noun_phrase_.synrestrs.~set_type(); | 307 | noun_phrase_.synrestrs.~set_type(); |
| 309 | 308 | ||
| 310 | break; | 309 | break; |
| @@ -348,7 +347,7 @@ namespace verbly { | |||
| 348 | } | 347 | } |
| 349 | } | 348 | } |
| 350 | 349 | ||
| 351 | selrestr part::getNounSelrestrs() const | 350 | std::set<std::string> part::getNounSelrestrs() const |
| 352 | { | 351 | { |
| 353 | if (type_ == part_type::noun_phrase) | 352 | if (type_ == part_type::noun_phrase) |
| 354 | { | 353 | { |
