Horizon
Loading...
Searching...
No Matches
cache.hpp
1#pragma once
2#include "canvas/canvas_patch.hpp"
3#include "common/common.hpp"
4#include "pool/entity.hpp"
5#include "util/uuid.hpp"
6#include "util/uuid_vec.hpp"
7#include <vector>
8#include <map>
9#include <memory>
10#include <mutex>
11
12namespace horizon {
13enum class RulesCheckCacheID { NONE, BOARD_IMAGE, NET_PINS };
14
16public:
17 virtual ~RulesCheckCacheBase()
18 {
19 }
20};
21
23public:
24 static const RulesCheckCacheID id = RulesCheckCacheID::BOARD_IMAGE;
26 const CanvasPatch &get_canvas() const;
27
28private:
29 CanvasPatch canvas;
30};
31
33public:
34 static const RulesCheckCacheID id = RulesCheckCacheID::NET_PINS;
35
37 struct NetPin {
38 UUID comp;
39 const class Gate &gate;
40 const class Pin &pin;
41 UUID sheet;
42 UUIDVec instance_path;
43 Coordi location;
44 };
45 struct NetInfo {
46 std::string name;
47 bool is_nc = false;
48 std::vector<NetPin> pins;
49 };
50 using NetPins = std::map<UUID, NetInfo>;
51 const NetPins &get_net_pins() const;
52
53private:
54 NetPins net_pins;
55};
56
58public:
59 RulesCheckCache(class IDocument &c);
60 void clear();
61 template <typename T> const T &get_cache()
62 {
63 return dynamic_cast<const T &>(get_cache(T::id));
64 }
65
66private:
67 const RulesCheckCacheBase &get_cache(RulesCheckCacheID id);
68 std::map<RulesCheckCacheID, std::unique_ptr<RulesCheckCacheBase>> cache;
69 class IDocument &core;
70 std::mutex mutex;
71};
72} // namespace horizon
Definition canvas_patch.hpp:7
Definition gate.hpp:9
Definition idocument.hpp:5
A Pin represents a logical pin of a Unit.
Definition unit.hpp:16
Definition cache.hpp:15
Definition cache.hpp:22
Definition cache.hpp:32
Definition cache.hpp:57
This class encapsulates a UUID and allows it to be uses as a value type.
Definition uuid.hpp:16