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;
}
|