#pragma once
#include "olcPixelGameEngine.h"

//A class that has an initialization lock so that when the lock is activated, any further gets that are missing items in it will report themselves for easier debugging detection.
template<typename T,typename O>
class safemap{
	std::map<T,O>map;
	bool initialized=false;
public:
	O&operator[](T key){
		if(initialized&&map.count(key)==0){
			std::cout<<"WARNING! Trying to get non-existent key "<<key<<"!"<<std::endl;
			throw;
		}
		return map[key];
	}
	size_t count(T key){
		return map.count(key);
	}
	void SetInitialized(){
		initialized=true;
	}
	size_t size(){
		return map.size();
	}
	//Clears the entire map and unlocks the map so items can be added to it again.
	void Reset(){
		initialized=false;
		map.clear();
	}
	auto begin()const{
		return map.begin();
	}
	auto end()const{
		return map.end();
	}
};