Scroom 0.14-48-ga0fee447
Loading...
Searching...
No Matches
utilities.hh
Go to the documentation of this file.
1/*
2 * Scroom - Generic viewer for 2D data
3 * Copyright (C) 2009-2026 Kees-Jan Dijkzeul
4 *
5 * SPDX-License-Identifier: LGPL-2.1
6 */
7
8#pragma once
9
10#include <set>
11
12#include <boost/thread.hpp>
13
14#include <scroom/logger.hh>
15
16namespace Scroom::Utils
17{
33 class Base : public std::enable_shared_from_this<Base>
34 {
35 public:
36 Base() = default;
37 Base(const Base&) = delete;
38 Base(Base&&) = delete;
39 Base& operator=(const Base&) = delete;
40 Base& operator=(Base&&) = delete;
41 virtual ~Base() = default;
42
47 template <typename R>
48 std::shared_ptr<R> shared_from_this()
49 {
50 return std::dynamic_pointer_cast<R, Base>(std::enable_shared_from_this<Base>::shared_from_this());
51 }
52
57 template <typename R>
58 std::shared_ptr<R const> shared_from_this() const
59 {
60 return std::dynamic_pointer_cast<R const, Base const>(std::enable_shared_from_this<Base>::shared_from_this());
61 }
62 };
63
64 template <typename F>
66 {
67 public:
68 explicit on_scope_exit(F f_)
69 : f(std::move(f_))
70 {
71 }
72 on_scope_exit(const on_scope_exit&) = delete;
76
78
79 private:
80 F f;
81 };
82
83 template <typename F>
84 std::shared_ptr<void> on_destruction(F f)
85 {
86 return std::make_shared<on_scope_exit<F>>(std::move(f));
87 }
88
89 template <typename F>
91 {
92 public:
93 explicit optional_cleanup(F f_)
94 : f(std::move(f_))
95 {
96 }
101
103 {
104 if(cleanup)
105 {
106 f();
107 }
108 }
109
110 void cancel() { cleanup = false; }
111
112 private:
113 bool cleanup{true};
114 F f;
115 };
116
117 template <typename K, typename V>
118 using WeakKeyMap = std::map<K, V, std::owner_less<K>>;
119
120 template <typename K>
121 using WeakKeySet = std::set<K, std::owner_less<K>>;
122
123 inline std::shared_ptr<unsigned char> shared_malloc(size_t size) { return {static_cast<unsigned char*>(malloc(size)), free}; }
124
126
127 void dumpCounts();
128
130
131 class Count
132 {
133 public:
134 using Ptr = std::shared_ptr<Count>;
135
136 public:
137 const std::string name;
138 boost::mutex mut;
139 long count{0};
140
141 public:
142 static Ptr create(const std::string& name);
143 void ping() { /* dumpCounts(); */ }
144 void inc()
145 {
146 boost::unique_lock<boost::mutex> const lock(mut);
147 ++count;
148 ping();
149 }
150 void dec()
151 {
152 boost::unique_lock<boost::mutex> const lock(mut);
153 --count;
154 ping();
155 }
156
157 private:
158 explicit Count(std::string name);
159 };
160
162
164 {
165 public:
166 private:
167 std::list<Count::Ptr> counts;
168 boost::mutex mut;
170
171 private:
172 Counter();
173
174 public:
175 static Counter* instance();
176 void registerCount(const Count::Ptr& count);
177 void unregisterCount(const Count::Ptr& count);
178 void dump();
179 std::list<Count::Ptr> getCounts();
180 };
181
183
184 template <class C>
186 {
187 private:
189
190 public:
192 {
193 static Count::Ptr const instance = Count::create(typeid(C).name());
194 return instance;
195 }
196
199 {
200 data->inc();
201 }
202
203 Counted(const Counted& /*unused*/)
205 {
206 data->inc();
207 }
208
209 Counted(Counted&& /*unused*/)
211 {
212 data->inc();
213 }
214
215 Counted& operator=(const Counted&) = default;
216 Counted& operator=(Counted&&) = default;
217
218 virtual ~Counted() { data->dec(); }
219 };
220} // namespace Scroom::Utils
Definition logger.hh:49
Definition utilities.hh:34
Base(const Base &)=delete
Base & operator=(const Base &)=delete
Base & operator=(Base &&)=delete
std::shared_ptr< R > shared_from_this()
Definition utilities.hh:48
virtual ~Base()=default
Base(Base &&)=delete
std::shared_ptr< R const > shared_from_this() const
Definition utilities.hh:58
Definition utilities.hh:132
void ping()
Definition utilities.hh:143
void dec()
Definition utilities.hh:150
static Ptr create(const std::string &name)
Definition counter.cc:40
const std::string name
Definition utilities.hh:137
long count
Definition utilities.hh:139
void inc()
Definition utilities.hh:144
boost::mutex mut
Definition utilities.hh:138
std::shared_ptr< Count > Ptr
Definition utilities.hh:134
Definition utilities.hh:186
Counted & operator=(const Counted &)=default
Counted(Counted &&)
Definition utilities.hh:209
virtual ~Counted()
Definition utilities.hh:218
static Count::Ptr count_instance()
Definition utilities.hh:191
Counted & operator=(Counted &&)=default
Counted(const Counted &)
Definition utilities.hh:203
Counted()
Definition utilities.hh:197
Count::Ptr data
Definition utilities.hh:188
Definition utilities.hh:164
static Counter * instance()
Definition counter.cc:49
Counter()
Definition counter.cc:55
void unregisterCount(const Count::Ptr &count)
Definition counter.cc:63
std::list< Count::Ptr > counts
Definition utilities.hh:167
Scroom::Logger logger
Definition utilities.hh:169
boost::mutex mut
Definition utilities.hh:168
std::list< Count::Ptr > getCounts()
Definition counter.cc:82
void dump()
Definition counter.cc:69
void registerCount(const Count::Ptr &count)
Definition counter.cc:57
Definition utilities.hh:66
F f
Definition utilities.hh:80
on_scope_exit(on_scope_exit &&)=delete
on_scope_exit & operator=(on_scope_exit &&)=delete
on_scope_exit(F f_)
Definition utilities.hh:68
on_scope_exit & operator=(const on_scope_exit &)=delete
on_scope_exit(const on_scope_exit &)=delete
~on_scope_exit()
Definition utilities.hh:77
Definition utilities.hh:91
F f
Definition utilities.hh:114
bool cleanup
Definition utilities.hh:113
optional_cleanup & operator=(const optional_cleanup &)=delete
optional_cleanup(const optional_cleanup &)=delete
~optional_cleanup()
Definition utilities.hh:102
optional_cleanup(optional_cleanup &&)=delete
void cancel()
Definition utilities.hh:110
optional_cleanup(F f_)
Definition utilities.hh:93
optional_cleanup & operator=(optional_cleanup &&)=delete
f
Definition gtkhelper-tests.cc:43
Definition tweak-view.hh:22
void dumpCounts()
Definition counter.cc:24
std::set< K, std::owner_less< K > > WeakKeySet
Definition utilities.hh:121
std::map< K, V, std::owner_less< K > > WeakKeyMap
Definition utilities.hh:118
std::shared_ptr< void > on_destruction(F f)
Definition utilities.hh:84
std::shared_ptr< unsigned char > shared_malloc(size_t size)
Definition utilities.hh:123
STL namespace.
const size_t count
Definition pageprovider-tests.cc:21