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 <map>
10#include <set>
11#include "ipool.hpp"
12#include "pool_info.hpp"
13
14#include "util/sqlite.hpp"
15
16namespace horizon {
17
22class Pool : public IPool {
23public:
28 Pool(const std::string &base_path, bool read_only = true);
29 const class Unit *get_unit(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
30 const class Entity *get_entity(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
31 const class Symbol *get_symbol(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
32 const class Padstack *get_padstack(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
33 const class Padstack *get_well_known_padstack(const std::string &name, UUID *pool_uuid_out = nullptr) override;
34 const class Package *get_package(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
35 const class Part *get_part(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
36 const class Frame *get_frame(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
37 const class Decal *get_decal(const UUID &uu, UUID *pool_uuid_out = nullptr) override;
38 std::set<UUID> get_alternate_packages(const UUID &uu) override;
39 std::string get_model_filename(const UUID &pkg_uuid, const UUID &model_uuid) override;
40
41 virtual std::string get_filename(ObjectType type, const UUID &uu, UUID *pool_uuid_out = nullptr);
42 std::string get_rel_filename(ObjectType type, const UUID &uu);
43 const std::string &get_base_path() const override;
44 bool check_filename(ObjectType type, const std::string &filename, std::string *error_msg = nullptr) const override;
45 void check_filename_throw(ObjectType type, const std::string &filename) const override;
46
47 SQLite::Database &get_db() override
48 {
49 return db;
50 }
51
52 class PoolParametric *get_parametric() override
53 {
54 return nullptr;
55 }
56
57 const PoolInfo &get_pool_info() const override
58 {
59 return pool_info;
60 }
61
72 void clear() override;
73 std::string get_tmp_filename(ObjectType type, const UUID &uu) const;
74 static int get_required_schema_version();
75 virtual ~Pool();
76 static const UUID tmp_pool_uuid;
77
78 std::map<std::string, UUID> get_actually_included_pools(bool include_self) override;
79
80 UUID get_installation_uuid();
81
82 struct ItemPoolInfo {
83 UUID pool;
84 UUID last;
85 };
86 ItemPoolInfo get_pool_uuids(ObjectType ty, const UUID &uu);
87
88protected:
89 const std::string base_path;
90 const PoolInfo pool_info;
91
92 std::string get_flat_filename(ObjectType type, const UUID &uu) const;
93
94 std::map<UUID, Unit> units;
95 std::map<UUID, Entity> entities;
96 std::map<UUID, Symbol> symbols;
97 std::map<UUID, Padstack> padstacks;
98 std::map<UUID, Package> packages;
99 std::map<UUID, Part> parts;
100 std::map<UUID, Frame> frames;
101 std::map<UUID, Decal> decals;
102 std::map<std::pair<ObjectType, UUID>, UUID> pool_uuid_cache;
103 void get_pool_uuid(ObjectType type, const UUID &uu, UUID *pool_uuid_out);
104};
105} // namespace horizon
Definition: decal.hpp:16
Definition: entity.hpp:13
Definition: frame.hpp:18
Definition: ipool.hpp:14
Definition: package.hpp:29
Definition: padstack.hpp:19
Definition: part.hpp:15
Definition: pool_info.hpp:11
Definition: pool_parametric.hpp:10
Stores objects (Unit, Entity, Symbol, Part, etc.) from the pool.
Definition: pool.hpp:22
SQLite::Database db
The database connection.
Definition: pool.hpp:66
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:72
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:71
Definition: pool.hpp:82