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