#include "system/terrain-type-definition.h"
std::vector<TerrainType> terrains_info;
+
+TerrainList TerrainList::instance{};
+
+TerrainList &TerrainList::get_instance()
+{
+ return instance;
+}
+
+TerrainType &TerrainList::operator[](short terrain_id)
+{
+ return terrains_info.at(terrain_id);
+}
+
+const TerrainType &TerrainList::operator[](short terrain_id) const
+{
+ return terrains_info.at(terrain_id);
+}
+
+std::vector<TerrainType>::iterator TerrainList::begin()
+{
+ return terrains_info.begin();
+}
+
+const std::vector<TerrainType>::const_iterator TerrainList::begin() const
+{
+ return terrains_info.begin();
+}
+
+std::vector<TerrainType>::iterator TerrainList::end()
+{
+ return terrains_info.end();
+}
+
+const std::vector<TerrainType>::const_iterator TerrainList::end() const
+{
+ return terrains_info.end();
+}
};
extern std::vector<TerrainType> terrains_info;
+
+class TerrainList {
+public:
+ TerrainList(const TerrainList &) = delete;
+ TerrainList(TerrainList &&) = delete;
+ TerrainList operator=(const TerrainList &) = delete;
+ TerrainList operator=(TerrainList &&) = delete;
+ TerrainType &operator[](short terrain_id);
+ const TerrainType &operator[](short terrain_id) const;
+
+ static TerrainList &get_instance();
+ std::vector<TerrainType>::iterator begin();
+ const std::vector<TerrainType>::const_iterator begin() const;
+ std::vector<TerrainType>::iterator end();
+ const std::vector<TerrainType>::const_iterator end() const;
+
+private:
+ TerrainList() = default;
+
+ static TerrainList instance;
+};