feat: remove static members from singleton, convert to thread safe
This commit is contained in:
@@ -21,23 +21,21 @@ enzo::nt::OpId enzo::nt::NetworkManager::addOperator(nt::opConstructor ctorFunc)
|
||||
}
|
||||
|
||||
|
||||
enzo::nt::NetworkManager* enzo::nt::NetworkManager::getInstance()
|
||||
enzo::nt::NetworkManager& enzo::nt::NetworkManager::getInstance()
|
||||
{
|
||||
if(instancePtr_==nullptr)
|
||||
{
|
||||
instancePtr_ = new enzo::nt::NetworkManager();
|
||||
}
|
||||
return instancePtr_;
|
||||
static enzo::nt::NetworkManager instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
enzo::nt::GeometryOperator& enzo::nt::NetworkManager::getGeoOperator(nt::OpId opId)
|
||||
{
|
||||
std::cout << "gop size middle getter: " << gopStore_.size() <<"\n"; // <- size 0
|
||||
if(opId>gopStore_.size())
|
||||
auto it = gopStore_.find(opId);
|
||||
if(it == gopStore_.end())
|
||||
{
|
||||
throw std::out_of_range("OpId: " + std::to_string(opId) + " > max opId: " + std::to_string(maxOpId_) + "\n");
|
||||
}
|
||||
return *gopStore_.at(opId);
|
||||
return *it->second;
|
||||
}
|
||||
|
||||
bool enzo::nt::NetworkManager::isValidOp(nt::OpId opId)
|
||||
@@ -64,7 +62,7 @@ void enzo::nt::NetworkManager::setDisplayOp(OpId opId)
|
||||
}
|
||||
std::cout << "gop size middle: " << gopStore_.size() <<"\n"; // <- size: 1
|
||||
enzo::nt::GeometryOperator& displayOp = getGeoOperator(opId);
|
||||
getInstance()->updateDisplay(displayOp.getOutputGeo(0));
|
||||
updateDisplay(displayOp.getOutputGeo(0));
|
||||
std::cout << "gop size after: " << gopStore_.size() <<"\n";
|
||||
}
|
||||
|
||||
@@ -108,8 +106,6 @@ std::optional<enzo::nt::OpId> enzo::nt::NetworkManager::getDisplayOp()
|
||||
void enzo::nt::NetworkManager::_reset()
|
||||
{
|
||||
std::cout << "resetting network manager\n";
|
||||
delete instancePtr_;
|
||||
instancePtr_ = nullptr;
|
||||
|
||||
gopStore_.clear();
|
||||
maxOpId_=0;
|
||||
@@ -117,6 +113,5 @@ void enzo::nt::NetworkManager::_reset()
|
||||
}
|
||||
#endif
|
||||
|
||||
enzo::nt::NetworkManager* enzo::nt::NetworkManager::instancePtr_ = nullptr;
|
||||
std::unordered_map<enzo::nt::OpId, std::unique_ptr<enzo::nt::GeometryOperator>> enzo::nt::NetworkManager::gopStore_;
|
||||
// std::unordered_map<enzo::nt::OpId, std::unique_ptr<enzo::nt::GeometryOperator>> enzo::nt::NetworkManager::gopStore_;
|
||||
|
||||
|
||||
@@ -15,36 +15,39 @@ public:
|
||||
// delete copy constructor
|
||||
NetworkManager(const NetworkManager& obj) = delete;
|
||||
|
||||
static NetworkManager* getInstance();
|
||||
static NetworkManager& getInstance();
|
||||
|
||||
// functions
|
||||
static OpId addOperator(nt::opConstructor ctorFunc);
|
||||
static std::optional<OpId> getDisplayOp();
|
||||
static bool isValidOp(nt::OpId opId);
|
||||
static GeometryOperator& getGeoOperator(nt::OpId opId);
|
||||
static void setDisplayOp(OpId opId);
|
||||
OpId addOperator(nt::opConstructor ctorFunc);
|
||||
std::optional<OpId> getDisplayOp();
|
||||
bool isValidOp(nt::OpId opId);
|
||||
GeometryOperator& getGeoOperator(nt::OpId opId);
|
||||
void setDisplayOp(OpId opId);
|
||||
|
||||
#ifdef UNIT_TEST
|
||||
static void _reset();
|
||||
void _reset();
|
||||
#endif
|
||||
|
||||
private:
|
||||
static NetworkManager* instancePtr_;
|
||||
NetworkManager() {};
|
||||
|
||||
// functions
|
||||
static void cookOp(enzo::nt::OpId opId);
|
||||
static std::vector<enzo::nt::OpId> getDependencyGraph(enzo::nt::OpId opId);
|
||||
void cookOp(enzo::nt::OpId opId);
|
||||
std::vector<enzo::nt::OpId> getDependencyGraph(enzo::nt::OpId opId);
|
||||
|
||||
// variables
|
||||
// store for geometry operators
|
||||
static std::unordered_map<enzo::nt::OpId, std::unique_ptr<enzo::nt::GeometryOperator>> gopStore_;
|
||||
std::unordered_map<enzo::nt::OpId, std::unique_ptr<enzo::nt::GeometryOperator>> gopStore_;
|
||||
// the highest operator id currently stored
|
||||
inline static enzo::nt::OpId maxOpId_=0;
|
||||
enzo::nt::OpId maxOpId_=0;
|
||||
// operator selected for displaying in the viewport
|
||||
inline static std::optional<OpId> displayOp_=std::nullopt;
|
||||
std::optional<OpId> displayOp_=std::nullopt;
|
||||
signals:
|
||||
void updateDisplay(enzo::geo::Geometry& geometry);
|
||||
|
||||
};
|
||||
|
||||
inline enzo::nt::NetworkManager& nm() {
|
||||
return enzo::nt::NetworkManager::getInstance();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user