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