EHS/include/ehs/GarbageCollector.h

64 lines
1.5 KiB
C
Raw Normal View History

2023-12-17 03:29:08 -08:00
#pragma once
#include "EHS.h"
#include "Vector.h"
#include "BaseObj.h"
2024-01-14 09:38:57 -08:00
#include "ehs/system/Mutex.h"
#include "ehs/system/Thread.h"
2023-12-17 03:29:08 -08:00
2023-12-17 15:56:13 -08:00
namespace ehs
2023-12-17 03:29:08 -08:00
{
2024-01-30 18:06:16 -08:00
typedef bool (*GcLogic)(BaseObj*);
2023-12-17 03:29:08 -08:00
class GarbageCollector
{
private:
2024-01-30 18:06:16 -08:00
static Vector<GcLogic>* logic;
2023-12-17 03:29:08 -08:00
static Vector<BaseObj*> garbage;
static UInt_64 max;
static Thread thread;
static Mutex mutex;
static bool running;
static bool Has(const BaseObj* obj);
public:
static void Start();
static void Stop();
/// Adds an object to the garbage pile to be deleted.
/// @param[in] obj The object to be deleted.
static void Add(BaseObj* obj);
/// Sets the maximum amount of garbage to delete per poll.
/// @param[in] newMax The new maximum.
static void SetMax(const UInt_64 newMax);
/// Gets the maximum amount of garbage to delete per poll.
/// @returns The maximum.
static UInt_64 GetMax();
/// Sets a new amount for memory pre-allocation to save on memory operations.
/// @param[in] newStride The stride to pre-allocate.
static void SetStride(const UInt_64 newStride);
/// The amount of data pre-allocated to save on memory operations.
/// @returns The stride.
static UInt_64 GetStride();
/// Gets the garbage count.
/// @returns Garbage count.
static UInt_64 Size();
/// Used to delete objects over time.
static void Poll();
/// Deletes all of the data at once.
/// @warning Use Poll instead to prevent stutter.
static void Dump();
static bool IsRunning();
};
}