Horizon
pool.hpp
1 #pragma once
2 #include "common/common.hpp"
3 #include "nlohmann/json_fwd.hpp"
4 #include "util/uuid.hpp"
5 #include <fstream>
6 #include <map>
7 #include <set>
8 #include <vector>
9 
10 #include "util/sqlite.hpp"
11 
12 namespace horizon {
13 
18 class Pool {
19 public:
24  Pool(const std::string &base_path, bool read_only = true);
25  const class Unit *get_unit(const UUID &uu);
26  const class Entity *get_entity(const UUID &uu);
27  const class Symbol *get_symbol(const UUID &uu);
28  const class Padstack *get_padstack(const UUID &uu);
29  const class Package *get_package(const UUID &uu);
30  const class Part *get_part(const UUID &uu);
31  std::set<UUID> get_alternate_packages(const UUID &uu);
32 
33  virtual std::string get_filename(ObjectType type, const UUID &uu);
34  const std::string &get_base_path() const;
45  void clear();
46  std::string get_tmp_filename(ObjectType type, const UUID &uu) const;
47  static int get_required_schema_version();
48  virtual ~Pool();
49 
50 protected:
51  std::string base_path;
52  std::string get_flat_filename(ObjectType type, const UUID &uu) const;
53 
54  std::map<UUID, Unit> units;
55  std::map<UUID, Entity> entities;
56  std::map<UUID, Symbol> symbols;
57  std::map<UUID, Padstack> padstacks;
58  std::map<UUID, Package> packages;
59  std::map<UUID, Part> parts;
60 };
61 } // namespace horizon
void clear()
Clears all lazy-loaded objects.
Definition: pool.cpp:22
SQLite::Database db
The database connection.
Definition: pool.hpp:39
Definition: sqlite.hpp:55
A Unit is the template for a Gate inside of an Entity.
Definition: unit.hpp:51
Definition: package.hpp:25
Definition: padstack.hpp:20
Definition: part.hpp:13
Definition: entity.hpp:13
Pool(const std::string &base_path, bool read_only=true)
Constructs a Pool.
Definition: pool.cpp:13
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
Definition: symbol.hpp:70
Stores objects (Unit, Entity, Symbol, Part, etc.) from the pool.
Definition: pool.hpp:18
Definition: block.cpp:7