/*********************************************************
 * getLines returns a representation of each line from   *
 * the input files as a map<string, vector<string> > to  *
 * be passed to the user defined reduce function.        *
 * ******************************************************/
   void RunReduce::getLines(unorderedMap &keyValues) {
     std::vector<std::string> lines;
     std::vector<std::string>::const_iterator linesIT;
     merger<std::string>(lines, files_);

     for(linesIT = lines.begin();linesIT!=lines.end();linesIT++) {
        std::string key(getKey(*linesIT));
        std::vector<std::string> values;
        parseMapLine(values, *linesIT);

        if(keyValues.find(key) == keyValues.end()) {
           //Not in structure
           strVectorPtr initialValue(new std::vector<std::string>(values));
           keyValues[key] = initialValue;
        }
        else {
           //Contained in structure
           std::vector<std::string>::const_iterator valuesIT = values.begin();
           std::vector<std::string>::const_iterator end = values.end();
           while(valuesIT != end) {
              keyValues[key]->push_back(*valuesIT);
              ++valuesIT;
           }
        }
     }
  }
void MapLoader::loadFromFile()
{

	std::fstream mapFile;

	mapFile.open("data/map.txt");
	if (!mapFile.good()) return;

	std::string stringLine;

	prepareMapVector();
	while (!mapFile.eof()){
		std::getline(mapFile, stringLine);
		if (stringLine != "[---]"){
			parseMapLine(stringLine);
		}
		else{
			_mapsData.push_back(_map);
			prepareMapVector();
		}
	}
	_mapsData.push_back(_map);
	
}
std::vector<std::vector<std::vector<char>>> MapLoader::loadSpecialMaps()
{
	std::vector<std::vector<std::vector<char>>> special_maps;
	std::string stringline;

	prepareMapVector();
	/*
	xxxExxxxxxx
	x.x.x..xx.x
	xx.xx.x...x
	x...x..x..x
	xx....x.x.x
	 xx.......x
	  xExxxxxxx
	*/
	stringline = "xxxExxxxxxx";
	parseMapLine(stringline);
	stringline = "x.x.x..xx.x";
	parseMapLine(stringline);
	stringline = "xx.xx.x...x";
	parseMapLine(stringline);
	stringline = "x...x..x..x";
	parseMapLine(stringline);
	stringline = "xx....x.x.x";
	parseMapLine(stringline);
	stringline = " xx.......x";
	parseMapLine(stringline);
	stringline = "  xExxxxxxx";
	parseMapLine(stringline);

	special_maps.push_back(_map);

	prepareMapVector();
	/*
	xxxxx
	E...xx
	xxx..xxx
	  xx...xx
	   xx...x
	    xxxEx
	*/
	stringline = "xxxxx";
	parseMapLine(stringline);
	stringline = "E...xx";
	parseMapLine(stringline);
	stringline = "xxx..xx";
	parseMapLine(stringline);
	stringline = "  xx..xxx";
	parseMapLine(stringline);
	stringline = "   xx...x";
	parseMapLine(stringline);
	stringline = "    xxxEx";
	parseMapLine(stringline);

	special_maps.push_back(_map);

	prepareMapVector();
	/*
	xxxExxx
	x.....x
	x.....x
	x.....x
	xxxExxx
	*/
	stringline = "xxxExxx";
	parseMapLine(stringline);
	stringline = "x.....x";
	parseMapLine(stringline);
	stringline = "x.....x";
	parseMapLine(stringline);
	stringline = "x.....x";
	parseMapLine(stringline);
	stringline = "xxxExxx";
	parseMapLine(stringline);

	special_maps.push_back(_map);

	prepareMapVector();
	/*
	xxxExxx
	x.....x
	x.....x
	x.....x
	xxxxxxx
	*/
	stringline = "xxxExxx";
	parseMapLine(stringline);
	stringline = "x.....x";
	parseMapLine(stringline);
	stringline = "x.....x";
	parseMapLine(stringline);
	stringline = "x.....x";
	parseMapLine(stringline);
	stringline = "xxxxxxx";
	parseMapLine(stringline);

	special_maps.push_back(_map);
	return special_maps;
}