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 "package.hpp"
7 #include "package/pad.hpp"
8 #include "decal.hpp"
9 #include <fstream>
10 #include <map>
11 #include <set>
12 #include <vector>
13 #include "ipool.hpp"
14 #include "pool_info.hpp"
15 
16 #include "util/sqlite.hpp"
17 
18 namespace horizon {
19 
24 class Pool : public IPool {
25 public:
30  Pool(const std::string &base_path, bool read_only = true);
31  const class Unit *get_unit(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
32  const class Entity *get_entity(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
33  const class Symbol *get_symbol(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
34  const class Padstack *get_padstack(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
35  const class Padstack *get_well_known_padstack(const std::string &name, UUID *pool_uuid_out = nullptr) override;
36  const class Package *get_package(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
37  const class Part *get_part(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
38  const class Frame *get_frame(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
39  const class Decal *get_decal(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
40  std::set<UUID> get_alternate_packages(const UUID &uu) override;
41  std::string get_model_filename(const UUID &pkg_uuid, const UUID &model_uuid) override;
42 
43  virtual std::string get_filename(ObjectType type, const UUID &uu, UUID *pool_uuid_out = nullptr);
44  std::string get_rel_filename(ObjectType type, const UUID &uu);
45  const std::string &get_base_path() const override;
46  bool check_filename(ObjectType type, const std::string &filename, std::string *error_msg = nullptr) const;
47 
48  SQLite::Database &get_db() override
49  {
50  return db;
51  }
52 
53  class PoolParametric *get_parametric() override
54  {
55  return nullptr;
56  }
57 
58  const PoolInfo &get_pool_info() const override
59  {
60  return pool_info;
61  }
62 
73  void clear() override;
74  std::string get_tmp_filename(ObjectType type, const UUID &uu) const;
75  static int get_required_schema_version();
76  virtual ~Pool();
77  static const UUID tmp_pool_uuid;
78 
79  std::map<std::string, UUID> get_actually_included_pools(bool include_self) override;
80 
81 protected:
82  const std::string base_path;
83  const PoolInfo pool_info;
84 
85  std::string get_flat_filename(ObjectType type, const UUID &uu) const;
86 
87  std::map<UUID, Unit> units;
88  std::map<UUID, Entity> entities;
89  std::map<UUID, Symbol> symbols;
90  std::map<UUID, Padstack> padstacks;
91  std::map<UUID, Package> packages;
92  std::map<UUID, Part> parts;
93  std::map<UUID, Frame> frames;
94  std::map<UUID, Decal> decals;
95  std::map<std::pair<ObjectType, UUID>, UUID> pool_uuid_cache;
96  void get_pool_uuid(ObjectType type, const UUID &uu, UUID *pool_uuid_out);
97 };
98 } // namespace horizon
Definition: decal.hpp:16
Definition: entity.hpp:14
Definition: frame.hpp:21
Definition: ipool.hpp:14
Definition: package.hpp:29
Definition: padstack.hpp:21
Definition: part.hpp:14
Definition: pool_info.hpp:10
Definition: pool_parametric.hpp:10
Stores objects (Unit, Entity, Symbol, Part, etc.) from the pool.
Definition: pool.hpp:24
SQLite::Database db
The database connection.
Definition: pool.hpp:67
void clear() override
Clears all lazy-loaded objects.
Definition: pool.cpp:28
Pool(const std::string &base_path, bool read_only=true)
Constructs a Pool.
Definition: pool.cpp:17
Definition: sqlite.hpp:72
Definition: symbol.hpp:71
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
A Unit is the template for a Gate inside of an Entity.
Definition: unit.hpp:60