Files
PorygonLang/src/UserData/UserDataStorage.hpp
Deukhoofd 09e30a234c
Some checks failed
continuous-integration/drone/push Build is failing
Mark mutex in userdata handler as static
Signed-off-by: Deukhoofd <deukhoofd@gmail.com>
2019-06-24 15:51:51 +02:00

51 lines
1.4 KiB
C++

#ifndef PORYGONLANG_USERDATASTORAGE_HPP
#define PORYGONLANG_USERDATASTORAGE_HPP
#include <unordered_map>
#include <mutex>
#include "UserData.hpp"
namespace Porygon::UserData {
class UserDataStorage {
class _internalDataStorage {
public:
std::unordered_map<uint32_t, UserData*> _userData;
static std::mutex _userDataMutex;
~_internalDataStorage(){
for (auto u: _userData){
delete u.second;
}
_userData.clear();
}
};
static _internalDataStorage _internal;
public:
static void RegisterType(uint32_t i, UserData *ud) {
std::lock_guard<std::mutex> guard(_internalDataStorage::_userDataMutex);
UserDataStorage::_internal._userData.insert({i, ud});
}
static void ClearTypes(){
std::lock_guard<std::mutex> guard(_internalDataStorage::_userDataMutex);
for (auto u: _internal._userData){
delete u.second;
}
_internal._userData.clear();
}
static bool HasUserDataType(uint32_t i) {
return UserDataStorage::_internal._userData.find(i) != UserDataStorage::_internal._userData.end();
}
static UserData* GetUserDataType(uint32_t i) {
return UserDataStorage::_internal._userData[i];
}
};
}
#endif //PORYGONLANG_USERDATASTORAGE_HPP