Horizon
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 
12 namespace horizon {
13 enum class RulesCheckCacheID { NONE, BOARD_IMAGE, NET_PINS };
14 
16 public:
17  virtual ~RulesCheckCacheBase()
18  {
19  }
20 };
21 
23 public:
25  const CanvasPatch &get_canvas() const;
26 
27 private:
28  CanvasPatch canvas;
29 };
30 
32 public:
34  struct NetPin {
35  UUID comp;
36  const class Gate &gate;
37  const class Pin &pin;
38  UUID sheet;
39  UUIDVec instance_path;
40  Coordi location;
41  };
42  struct NetInfo {
43  std::string name;
44  bool is_nc = false;
45  std::vector<NetPin> pins;
46  };
47  using NetPins = std::map<UUID, NetInfo>;
48  const NetPins &get_net_pins() const;
49 
50 private:
51  NetPins net_pins;
52 };
53 
55 public:
56  RulesCheckCache(class IDocument &c);
57  RulesCheckCacheBase &get_cache(RulesCheckCacheID id);
58  void clear();
59 
60 private:
61  std::map<RulesCheckCacheID, std::unique_ptr<RulesCheckCacheBase>> cache;
62  class IDocument &core;
63  std::mutex mutex;
64 };
65 } // namespace horizon
Definition: canvas_patch.hpp:6
Definition: gate.hpp:10
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:31
Definition: cache.hpp:54
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16