void merge_alias_lists(t_translation::ter_list& first, const t_translation::ter_list& second) { // Insert second vector into first when the terrain _ref^base is encountered bool revert = (first.front() == t_translation::MINUS ? true : false); t_translation::ter_list::iterator i; for(i = first.begin(); i != first.end(); ++i) { if(*i == t_translation::PLUS) { revert = false; continue; } else if(*i == t_translation::MINUS) { revert = true; continue; } if(*i == t_translation::BASE) { t_translation::ter_list::iterator insert_it = first.erase(i); //if we are in reverse mode, insert PLUS before and MINUS after the base list //so calculation of base aliases will work normal if(revert) { // insert_it = first.insert(insert_it, t_translation::PLUS); // insert_it++; insert_it = first.insert(insert_it, t_translation::MINUS); } else { //else insert PLUS after the base aliases to restore previous "reverse state" insert_it = first.insert(insert_it, t_translation::PLUS); } first.insert(insert_it, second.begin(), second.end()); break; } } }