data: reduced size of generated .coatidb files

* added occurrence table to get rid of duplicate source locations
* reverted storage provider
This commit is contained in:
malte_langkabel
2016-11-04 08:43:10 +01:00
parent 98869e51a5
commit e7c9a1340e
11 changed files with 394 additions and 159 deletions
+30 -12
View File
@@ -90,7 +90,33 @@ void Storage::inject(Storage* injected)
);
injected->forEachSourceLocation(
[&](const StorageSourceLocation& injectedData)
[&](const Id injectedId, const StorageSourceLocation& injectedData)
{
std::unordered_map<Id, Id>::const_iterator it;
it = injectedIdToOwnId.find(injectedData.fileNodeId);
if (it == injectedIdToOwnId.end())
{
return;
}
Id ownFileNodeId = it->second;
Id ownId = addSourceLocation(
ownFileNodeId,
injectedData.startLine,
injectedData.startCol,
injectedData.endLine,
injectedData.endCol,
injectedData.type
);
if (ownId != 0)
{
injectedIdToOwnId[injectedId] = ownId;
}
}
);
injected->forEachOccurrence(
[&](const StorageOccurrence& injectedData)
{
std::unordered_map<Id, Id>::const_iterator it;
it = injectedIdToOwnId.find(injectedData.elementId);
@@ -100,22 +126,14 @@ void Storage::inject(Storage* injected)
}
Id ownElementId = it->second;
it = injectedIdToOwnId.find(injectedData.fileNodeId);
it = injectedIdToOwnId.find(injectedData.sourceLocationId);
if (it == injectedIdToOwnId.end())
{
return;
}
Id ownFileNodeId = it->second;
Id ownSourceLocationId = it->second;
addSourceLocation(
ownElementId,
ownFileNodeId,
injectedData.startLine,
injectedData.startCol,
injectedData.endLine,
injectedData.endCol,
injectedData.type
);
addOccurrence(ownElementId, ownSourceLocationId);
}
);