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:
24  static const RulesCheckCacheID id = RulesCheckCacheID::BOARD_IMAGE;
26  const CanvasPatch &get_canvas() const;
27 
28 private:
29  CanvasPatch canvas;
30 };
31 
33 public:
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 
53 private:
54  NetPins net_pins;
55 };
56 
58 public:
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 
66 private:
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: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:32
Definition: cache.hpp:57
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
defer< id, T > id
Definition: meta.hpp:585