/data/maps/control_center/rooms/

'>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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
#ifndef DATABASE_H_0B0A47D1
#define DATABASE_H_0B0A47D1

#include <string>
#include <stdexcept>
#include <set>
#include <hkutil/database.h>
#include "notion.h"
#include "word.h"
#include "frame.h"
#include "part.h"
#include "form.h"
#include "pronunciation.h"
#include "order.h"

namespace verbly {

  template <typename Object>
  class query;

  class database {
  public:

    // Constructor

    explicit database(std::string path);

    // Information

    int getMajorVersion() const
    {
      return major_;
    }

    int getMinorVersion() const
    {
      return minor_;
    }

    // Queries

    query<notion> notions(
      filter where,
      order sortOrder = {},
      int limit = 1) const;

    query<word> words(
      filter where,
      order sortOrder = {},
      int limit = 1) const;

    query<frame> frames(
      filter where,
      order sortOrder = {},
      int limit = 1) const;

    query<part> parts(
      filter where,
      order sortOrder = {},
      int limit = 1) const;

    query<form> forms(
      filter where,
      order sortOrder = {},
      int limit = 1) const;

    query<pronunciation> pronunciations(
      filter where,
      order sortOrder = {},
      int limit = 1) const;

    std::set<std::string> selrestrs(int partId) const;

    std::set<std::string> synrestrs(int partId) const;

  private:

    mutable hatkirby::database ppdb_;

    int major_;
    int minor_;

  };

  class database_version_mismatch : public std::logic_error {
  public:

    database_version_mismatch(int right, int wrong) :
      std::logic_error(generateMessage(right, wrong)),
      right_(right),
      wrong_(wrong)
    {
    }

    int getRightVersion() const noexcept
    {
      return right_;
    }

    int getWrongVersion() const noexcept
    {
      return wrong_;
    }

  private:

    static std::string generateMessage(int right, int wrong);

    int right_;
    int wrong_;
  };

};

#endif /* end of include guard: DATABASE_H_0B0A47D2 */