1 #pragma once 2 3 #include "util.h" 4 #include "position.h" 5 6 class Level; 7 8 template <class T> 9 class PositionMap { 10 public: 11 PositionMap(const T& defaultVal = T()); 12 13 const T& get(Position) const; 14 T& getOrInit(Position); 15 T& getOrFail(Position); 16 void set(Position, const T&); 17 void limitToModel(const WModel); 18 19 template <class Archive> 20 void serialize(Archive& ar, const unsigned int version); 21 22 private: 23 Table<T>& getTable(Position); 24 map<LevelId, Table<T>> SERIAL(tables); 25 map<LevelId, map<Vec2, T>> SERIAL(outliers); 26 T SERIAL(defaultVal); 27 }; 28 29