summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2023-01-03 00:15:11 +0100
committerAki <please@ignore.pl>2023-01-03 00:15:11 +0100
commit49571905c06046a9db0e60e063bf48c92fbb73a9 (patch)
tree8e31b3ee7e1adc29622d85b3cb4aee682990e3e9
parente84f3eba125f64b852ae8755df3e1ab78aabeebf (diff)
downloadkurator-49571905c06046a9db0e60e063bf48c92fbb73a9.zip
kurator-49571905c06046a9db0e60e063bf48c92fbb73a9.tar.gz
kurator-49571905c06046a9db0e60e063bf48c92fbb73a9.tar.bz2
Added rather naive interface for repository iteration
-rw-r--r--universe/include/kurator/universe/Repository.h3
-rw-r--r--universe/src/SampleRepository.cpp23
-rw-r--r--universe/src/SampleRepository.h3
3 files changed, 26 insertions, 3 deletions
diff --git a/universe/include/kurator/universe/Repository.h b/universe/include/kurator/universe/Repository.h
index 8d44793..3758421 100644
--- a/universe/include/kurator/universe/Repository.h
+++ b/universe/include/kurator/universe/Repository.h
@@ -1,5 +1,6 @@
#pragma once
+#include <functional>
#include <string>
#include "ShipType.h"
@@ -18,6 +19,8 @@ public:
virtual ~Repository() = default;
virtual ShipType ship_type(const std::string& id) const = 0;
virtual TurretType turret_type(const std::string& id) const = 0;
+ virtual void for_ship_types(std::function<void(const ShipType&)> func) const = 0;
+ virtual void for_turret_types(std::function<void(const TurretType&)> func) const = 0;
};
diff --git a/universe/src/SampleRepository.cpp b/universe/src/SampleRepository.cpp
index 0f29073..a81c2bb 100644
--- a/universe/src/SampleRepository.cpp
+++ b/universe/src/SampleRepository.cpp
@@ -1,8 +1,9 @@
#include "SampleRepository.h"
+#include <functional>
#include <stdexcept>
#include <string>
-#include <unordered_map>
+#include <map>
#include <kurator/universe/NotFound.h>
#include <kurator/universe/ShipType.h>
@@ -15,14 +16,14 @@ namespace universe
{
-static const std::unordered_map<std::string, ShipType> ships {
+static const std::map<std::string, ShipType> ships {
{"Anvil", {"Anvil", 600.0, 218.0}},
{"Eclipse", {"Eclipse", 600.0, 263.0}},
{"Warbringer", {"Warbringer", 600.0, 336.0}},
};
-static const std::unordered_map<std::string, TurretType> turrets {
+static const std::map<std::string, TurretType> turrets {
{"ChargeLaser", {"ChargeLaser", 1, 85.0, 4.5, 0.0, 7000.0, 0.05}},
{"BurstLaser", {"BurstLaser", 3, 21.0, 0.25, 2.75, 3500.0, 0.05}},
{"GaussCannon", {"GaussCannon", 2, 55.0, 0.0, 5.5, 12000.0, 0.2}},
@@ -49,5 +50,21 @@ catch (const std::out_of_range&) {
}
+void
+SampleRepository::for_ship_types(std::function<void(const ShipType&)> func) const
+{
+ for (const auto& [_, type] : ships)
+ func(type);
+}
+
+
+void
+SampleRepository::for_turret_types(std::function<void(const TurretType&)> func) const
+{
+ for (const auto& [_, type] : turrets)
+ func(type);
+}
+
+
} // namespace universe
} // namespace kurator
diff --git a/universe/src/SampleRepository.h b/universe/src/SampleRepository.h
index 1cf4fb4..769af09 100644
--- a/universe/src/SampleRepository.h
+++ b/universe/src/SampleRepository.h
@@ -1,5 +1,6 @@
#pragma once
+#include <functional>
#include <string>
#include <kurator/universe/Repository.h>
@@ -18,6 +19,8 @@ class SampleRepository : public Repository
public:
ShipType ship_type(const std::string& id) const override;
TurretType turret_type(const std::string& id) const override;
+ void for_ship_types(std::function<void(const ShipType&)> func) const;
+ void for_turret_types(std::function<void(const TurretType&)> func) const;
};