NanoTekSpice
DigitalElectronics
Factory.hpp
1 /*
2 ** EPITECH PROJECT, 2019
3 ** OPP_NANOTEKSPICE_2018
4 ** File description:
5 ** Factory class
6 */
7 
8 #ifndef FACTORY_HPP_
9  #define FACTORY_HPP_
10 
11 #include <functional>
12 #include <map>
13 #include <memory>
14 #include "IComponent.hpp"
15 #include "Component.hpp"
16 
17 class Factory {
18  public:
19  Factory();
20  ~Factory();
21 
22  std::unique_ptr<nts::IComponent> createComponent(const nts::Type type,
23  const std::string &value);
24 
25  void linkAllComponents(std::map<std::string, nts::ptrIComponent_t> &components,
26  const std::vector<Component::ComponentSetting> &settings);
27 
28 
29  private:
30  using func_t = std::function<nts::ptrIComponent_t(const std::string&)>;
31  std::map<nts::Type, func_t> _componentsCreator;
32 
33  void linkComponents(std::map<std::string, nts::ptrIComponent_t> &components,
34  const Component::ComponentSetting &setting);
35 
36  std::unique_ptr<nts::IComponent> createCircuit(const std::string &value) const noexcept;
37  std::unique_ptr<nts::IComponent> createInput(const std::string &value) const noexcept;
38  std::unique_ptr<nts::IComponent> createOutput(const std::string &value) const noexcept;
39  std::unique_ptr<nts::IComponent> createTrue(const std::string &value) const noexcept;
40  std::unique_ptr<nts::IComponent> createFalse(const std::string &value) const noexcept;
41  std::unique_ptr<nts::IComponent> createClock(const std::string &value) const noexcept;
42  std::unique_ptr<nts::IComponent> create4001(const std::string &value) const noexcept;
43  std::unique_ptr<nts::IComponent> create4008(const std::string &value) const noexcept;
44  std::unique_ptr<nts::IComponent> create4011(const std::string &value) const noexcept;
45  std::unique_ptr<nts::IComponent> create4013(const std::string &value) const noexcept;
46  std::unique_ptr<nts::IComponent> create4017(const std::string &value) const noexcept;
47  std::unique_ptr<nts::IComponent> create4030(const std::string &value) const noexcept;
48  std::unique_ptr<nts::IComponent> create4040(const std::string &value) const noexcept;
49  std::unique_ptr<nts::IComponent> create4069(const std::string &value) const noexcept;
50  std::unique_ptr<nts::IComponent> create4071(const std::string &value) const noexcept;
51  std::unique_ptr<nts::IComponent> create4081(const std::string &value) const noexcept;
52  std::unique_ptr<nts::IComponent> create4094(const std::string &value) const noexcept;
53  std::unique_ptr<nts::IComponent> create4514(const std::string &value) const noexcept;
54  std::unique_ptr<nts::IComponent> create4801(const std::string &value) const noexcept;
55  std::unique_ptr<nts::IComponent> create2716(const std::string &value) const noexcept;
56 };
57 
58 #endif /* !FACTORY_HPP_ */
Definition: Factory.hpp:17
Definition: Setting.hpp:26