#ifndef MRT_COPY_COLLECTOR_H
#define MRT_COPY_COLLECTOR_H
#include "Allocator/RegionSpace.h"
#include "Common/StateWord.h"
#include "TracingCollector.h"
namespace MapleRuntime {
class CopyCollector : public TracingCollector {
public:
explicit CopyCollector(Allocator& allocator, CollectorResources& resources) : TracingCollector(allocator, resources)
{
collectorType = CollectorType::COPY_COLLECTOR;
}
~CopyCollector() override = default;
MRT_EXPORT void RunGarbageCollection(uint64_t gcIndex, GCReason reason) override;
void CopyObject(const BaseObject& fromObj, BaseObject& toObj, size_t size) const;
void PostGarbageCollection(uint64_t gcIndex) override;
protected:
virtual BaseObject* ForwardObjectExclusive(BaseObject* obj) = 0;
virtual void ForwardFromSpace();
virtual void RefineFromSpace();
virtual void DoGarbageCollection() = 0;
private:
};
}
#endif