feat: use unique ptr

This commit is contained in:
k0t9i
2023-01-23 13:32:10 +04:00
parent 7637260d19
commit c01d1c3549
10 changed files with 60 additions and 40 deletions

View File

@@ -2,6 +2,7 @@
#include <map>
#include <functional>
#include <memory>
#include "Domain/Repositories/EntityRepositoryInterface.h"
#include "Domain/DTO/EntityState.h"
@@ -11,40 +12,40 @@ class EntityHandler
{
public:
template<typename T>
const std::map<uint32_t, DTO::EntityState*> GetEntities(const std::map<uint32_t, T> items, std::function<Entities::EntityInterface*(T)> callback)
const std::map<uint32_t, DTO::EntityState*> GetEntities(const std::map<uint32_t, T> items, std::function<std::unique_ptr<Entities::EntityInterface>(T)> callback)
{
RemoveOutdatedStates();
for (const auto& kvp : items)
{
const auto item = kvp.second;
const auto newObject = callback(item);
auto newObject = callback(item);
if (m_Objects.contains(newObject->GetId()))
{
if (!m_Objects[kvp.first]->GetEntity()->IsEqual(newObject)) {
m_Objects[kvp.first]->GetEntity()->Update(newObject);
if (!m_Objects[kvp.first]->IsEntityEqual(newObject.get())) {
m_Objects[kvp.first]->UpdateEntity(newObject.get());
m_Objects[kvp.first]->UpdateState(Enums::EntityStateEnum::updated);
}
else
{
m_Objects[kvp.first]->UpdateState(Enums::EntityStateEnum::none);
}
delete newObject;
//delete newObject;
}
else
{
m_Objects.emplace(
newObject->GetId(),
new DTO::EntityState{ newObject, Enums::EntityStateEnum::created }
new DTO::EntityState{ std::move(newObject), Enums::EntityStateEnum::created }
);
}
}
for (auto& kvp : m_Objects)
{
if (!items.contains(kvp.second->GetEntity()->GetId()))
if (!items.contains(kvp.second->GetId()))
{
m_Objects[kvp.first]->GetEntity()->SaveState();
m_Objects[kvp.first]->SaveEntityState();
kvp.second->UpdateState(Enums::EntityStateEnum::deleted);
}
}