/* * Copyright 2013 (c) Anna Schumaker. */ #ifndef OCARINA_CORE_DATABASE_H #define OCARINA_CORE_DATABASE_H #include #include #include class DatabaseEntry { public: unsigned int id; DatabaseEntry(); virtual ~DatabaseEntry() = 0; virtual const std::string primary_key() const = 0; virtual void write(File &) = 0; virtual void read(File &) = 0; }; template class Database { private: std::vector _db; std::map _keys; unsigned int _size; bool _autosave; File _file; public: typedef typename std::vector::iterator iterator; typedef typename std::vector::const_iterator const_iterator; Database(std::string, bool); ~Database(); void save(); void autosave(); void load(); T *insert(const T &); void remove(unsigned int); unsigned int size(); unsigned int actual_size(); iterator begin(); iterator end(); iterator next(iterator &); T *at(unsigned int); T *find(const std::string &); }; #include "database.hpp" #endif /* OCARINA_CORE_DATABASE_H */