rose: use program offsets directly in lit tables

This commit is contained in:
Justin Viiret
2017-01-30 09:14:03 +11:00
committed by Matthew Barr
parent ac858cd47c
commit 76f72b6ab4
7 changed files with 76 additions and 69 deletions

View File

@@ -208,8 +208,8 @@ void remapAnchoredReports(RoseBuildImpl &build) {
* raw_dfa with program offsets.
*/
static
void remapIdsToPrograms(raw_dfa &rdfa, const vector<u32> &litPrograms,
const map<u32, u32> &final_to_frag_map) {
void remapIdsToPrograms(raw_dfa &rdfa,
const map<u32, LitFragment> &final_to_frag_map) {
for (dstate &ds : rdfa.states) {
assert(ds.reports_eod.empty()); // Not used in anchored matcher.
if (ds.reports.empty()) {
@@ -219,9 +219,8 @@ void remapIdsToPrograms(raw_dfa &rdfa, const vector<u32> &litPrograms,
flat_set<ReportID> new_reports;
for (auto final_id : ds.reports) {
assert(contains(final_to_frag_map, final_id));
auto frag_id = final_to_frag_map.at(final_id);
assert(frag_id < litPrograms.size());
new_reports.insert(litPrograms.at(frag_id));
auto &frag = final_to_frag_map.at(final_id);
new_reports.insert(frag.lit_program_offset);
}
ds.reports = move(new_reports);
}
@@ -849,8 +848,8 @@ vector<raw_dfa> buildAnchoredDfas(RoseBuildImpl &build) {
aligned_unique_ptr<anchored_matcher_info>
buildAnchoredMatcher(RoseBuildImpl &build, vector<raw_dfa> &dfas,
const vector<u32> &litPrograms,
const map<u32, u32> &final_to_frag_map, size_t *asize) {
const map<u32, LitFragment> &final_to_frag_map,
size_t *asize) {
const CompileContext &cc = build.cc;
if (dfas.empty()) {
@@ -860,7 +859,7 @@ buildAnchoredMatcher(RoseBuildImpl &build, vector<raw_dfa> &dfas,
}
for (auto &rdfa : dfas) {
remapIdsToPrograms(rdfa, litPrograms, final_to_frag_map);
remapIdsToPrograms(rdfa, final_to_frag_map);
}
vector<aligned_unique_ptr<NFA>> nfas;