/
icounter.h
49 lines (40 loc) · 997 Bytes
/
icounter.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#pragma once
#include <cstddef>
#include "imodule.h"
class ICounter
{
public:
/** Destructor */
virtual ~ICounter() {}
/** greebo: Decrements/increments the counter.
*/
virtual void increment() = 0;
virtual void decrement() = 0;
/** greebo: Returns the current count.
*/
virtual std::size_t get() const = 0;
};
// Known counters
enum CounterType
{
counterBrushes,
counterPatches,
counterEntities,
};
const char* const MODULE_COUNTER("Counters");
/** greebo: This abstract class defines the interface to the core application.
* Use this to access methods from the main codebase in radiant/
*/
class ICounterManager :
public RegisterableModule
{
public:
// Returns the Counter object of the given type
virtual ICounter& getCounter(CounterType counter) = 0;
virtual sigc::signal<void()>& signal_countersChanged() = 0;
};
inline ICounterManager& GlobalCounters()
{
static module::InstanceReference<ICounterManager> _reference(MODULE_COUNTER);
return _reference;
}