#pragma once
#include <mutex>
#include <stack>
#include "processor/result/factorized_table.h"
namespace lbug {
namespace processor {
class LBUG_API FactorizedTablePool {
public:
explicit FactorizedTablePool(std::shared_ptr<FactorizedTable> globalTable)
: globalTable{std::move(globalTable)} {}
DELETE_COPY_AND_MOVE(FactorizedTablePool);
FactorizedTable* claimLocalTable(storage::MemoryManager* mm);
void returnLocalTable(FactorizedTable* table);
void mergeLocalTables();
std::shared_ptr<FactorizedTable> getGlobalTable() const { return globalTable; }
private:
std::mutex mtx;
std::shared_ptr<FactorizedTable> globalTable;
std::stack<FactorizedTable*> availableLocalTables;
std::vector<std::shared_ptr<FactorizedTable>> localTables;
};
} }