#include "form.h" #include #include #include #include "pronunciation.h" namespace verbly { namespace generator { int form::nextId_ = 0; form::form(std::string text, int anagram_set_id) : id_(nextId_++), text_(text), complexity_(std::count(std::begin(text), std::end(text), ' ') + 1), proper_(std::any_of(std::begin(text), std::end(text), ::isupper)), length_(text.length()), anagram_set_id_(anagram_set_id) { } void form::addPronunciation(const pronunciation& p) { pronunciations_.insert(&p); } hatkirby::database& operator<<(hatkirby::database& db, const form& arg) { // Serialize the form first. { std::list fields = { { "form_id", arg.getId() }, { "form", arg.getText() }, { "complexity", arg.getComplexity() }, { "proper", arg.isProper() }, { "length", arg.getLength() }, { "anagram_set_id", arg.getAnagramSetId() }, { "reverse_form_id", arg.getReverseId() } }; if (arg.getFrequency() > 0) { fields.emplace_back("frequency", arg.getFrequency()); } db.insertIntoTable("forms", std::move(fields)); } // Then, serialize the form/pronunciation relationship. for (const pronunciation* p : arg.getPronunciations()) { db.insertIntoTable( "forms_pronunciations", { { "form_id", arg.getId() }, { "pronunciation_id", p->getId() } }); } return db; } }; };