#include "mapper_context.h"
using namespace gpd;
using namespace std;
void MapperContext::clear() {
nextId = 1;
next_level = level_storage.begin();
levels.clear();
}
MapperContext::Item &MapperContext::push_level(Kind kind) {
// implemented this way to reuse memory as much as possible
if (next_level == level_storage.end()) {
nextId++;
level_storage.push_back(Item(kind, nextId, &nextId));
return level_storage.back();
}
next_level->kind = kind;
next_level->id = nextId++;
return *(next_level++);
}
void MapperContext::fill_context(const ExternalItem * const **items, int *size) {
levels.clear();
for (LevelStorage::iterator it = level_storage.begin(); it != next_level; ++it) {
levels.push_back(&*it);
}
*items = &levels[0];
*size = levels.size();
}