idol
A C++ Framework for Optimization
Loading...
Searching...
No Matches
PlotManager.h
1//
2// Created by henri on 22.10.24.
3//
4
5#ifndef IDOL_PLOTMANAGER_H
6#define IDOL_PLOTMANAGER_H
7
8#include <list>
9#include "idol/general/utils/exceptions/Exception.h"
10
11#ifdef IDOL_USE_ROOT
12#include <TApplication.h>
13#include <TCanvas.h>
14#endif
15
16namespace idol::Plots {
17 class Manager;
18}
19
21 class PlotEnv {
22 static PlotEnv* m_instance;
23#ifdef IDOL_USE_ROOT
24 TApplication m_root;
25#endif
26 unsigned int m_n_manager;
27
28 PlotEnv();
29
30 static PlotEnv& get();
31 public:
32 static void declare_plot_manager();
33 static void destroy_plot_manager();
34 };
35
36#ifdef IDOL_USE_ROOT
37 std::list<std::unique_ptr<TObject>> m_objects;
38 std::list<std::unique_ptr<TCanvas>> m_canvas;
39#endif
40public:
41 Manager();
42
43 template<class T, class ...ArgsT> T* create(ArgsT&& ...args) {
44#ifdef IDOL_USE_ROOT
45 auto* obj = new T(std::forward<ArgsT>(args)...);
46
47 if constexpr (std::is_same<T, TCanvas>::value) {
48 m_canvas.emplace_back(obj);
49 } else {
50 m_objects.emplace_back(obj);
51 }
52
53 return obj;
54#else
55 throw idol::Exception("idol was not compiled with ROOT.");
56#endif
57 }
58
59 Manager(const Manager&) = delete;
60 Manager(Manager&&) = delete;
61
62 Manager& operator=(const Manager&) = delete;
63 Manager& operator=(Manager&&) = delete;
64
65 ~Manager();
66};
67
68#endif //IDOL_PLOTMANAGER_H