#ifndef LEMMA_H_0A180D30 #define LEMMA_H_0A180D30 #include #include #include #include #include "field.h" #include "form.h" #include "enums.h" #include "filter.h" struct sqlite3_stmt; namespace verbly { class database; class lemma { public: // Default constructor lemma() = default; // Construct from database lemma(const database& db, sqlite3_stmt* row); // Accessors operator bool() const { return valid_; } int getId() const { if (!valid_) { throw std::domain_error("Bad access to uninitialized lemma"); } return id_; } const form& getBaseForm() const; bool hasInflection(inflection category) const; const std::vector
& getInflections(inflection category) const; // Type info static const object objectType; static const std::list select; // Query fields static const field id; operator filter() const { if (!valid_) { throw std::domain_error("Bad access to uninitialized lemma"); } return (id == id_); } // Relationships to other objects static const field word; static field form(inflection category); private: void initializeForm(inflection category) const; bool valid_ = false; int id_; mutable std::map> forms_; const database* db_; static const field inflectionCategory; }; }; #endif /* end of include guard: LEMMA_H_0A180D30 */