From 67dd012c0f49898f1734c46d3bb264f59d056a8e Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 17 Jan 2022 22:55:09 +0800 Subject: ... --- src/ui/mapper/Mapper.cpp | 8 ++++++++ src/ui/mapper/MapperRegistry.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/ui/mapper/Mapper.cpp create mode 100644 src/ui/mapper/MapperRegistry.cpp (limited to 'src/ui/mapper') diff --git a/src/ui/mapper/Mapper.cpp b/src/ui/mapper/Mapper.cpp new file mode 100644 index 00000000..93a83d8a --- /dev/null +++ b/src/ui/mapper/Mapper.cpp @@ -0,0 +1,8 @@ +#include "cru/ui/mapper/Mapper.hpp" + +#include + +namespace cru::ui::mapper { +MapperBase::MapperBase(std::type_index type_index) + : type_index_(std::move(type_index)) {} +} // namespace cru::ui::mapper diff --git a/src/ui/mapper/MapperRegistry.cpp b/src/ui/mapper/MapperRegistry.cpp new file mode 100644 index 00000000..e445a7d0 --- /dev/null +++ b/src/ui/mapper/MapperRegistry.cpp @@ -0,0 +1,29 @@ +#include "cru/ui/mapper/MapperRegistry.hpp" + +namespace cru::ui::mapper { +MapperRegistry::MapperRegistry() {} + +MapperRegistry::~MapperRegistry() { + for (auto mapper : mapper_list_) { + delete mapper; + } +} + +void MapperRegistry::RegisterMapper(MapperBase *mapper) { + if (std::find(mapper_list_.cbegin(), mapper_list_.cend(), mapper) != + mapper_list_.cend()) { + throw Exception(u"This mapper is already registered."); + } + + mapper_list_.push_back(mapper); +} + +void MapperRegistry::UnregisterMapper(MapperBase *mapper) { + auto it = std::find(mapper_list_.begin(), mapper_list_.end(), mapper); + if (it == mapper_list_.end()) { + throw Exception(u"This mapper is not registered."); + } + + mapper_list_.erase(it); +} +} // namespace cru::ui::mapper -- cgit v1.2.3