u32 total_prog_size = byte_length(temp_blocks);
curr_offset += total_prog_size;
- gi.stream_som_loc_count = slot_count;
+ gi.stream_som_loc_count = slot_count;
gi.stream_som_loc_width = somPrecision;
u32 gough_size = ROUNDUP_N(curr_offset, 16);
};
struct raw_som_dfa : public raw_dfa {
- raw_som_dfa(nfa_kind k, bool unordered_som_triggers_in)
- : raw_dfa(k), unordered_som_triggers(unordered_som_triggers_in) {
+ raw_som_dfa(nfa_kind k, bool unordered_som_triggers_in, u32 trigger,
+ u32 stream_som_loc_width_in)
+ : raw_dfa(k), stream_som_loc_width(stream_som_loc_width_in),
+ unordered_som_triggers(unordered_som_triggers_in),
+ trigger_nfa_state(trigger) {
assert(!unordered_som_triggers || is_triggered(kind));
}
}
haig_note_starts(g, &rdfa->new_som_nfa_states);
- rdfa->trigger_nfa_state = NODE_START;
return true;
}
return nullptr;
}
- auto rdfa = ue2::make_unique<raw_som_dfa>(g.kind, unordered_som);
+ auto rdfa = ue2::make_unique<raw_som_dfa>(g.kind, unordered_som, NODE_START,
+ somPrecision);
DEBUG_PRINTF("determinising nfa with %u vertices\n", numStates);
bool rv;
DEBUG_PRINTF("determinised, building impl dfa (a,f) = (%hu,%hu)\n",
rdfa->start_anchored, rdfa->start_floating);
- rdfa->stream_som_loc_width = somPrecision;
assert(rdfa->kind == g.kind);
return rdfa;
typedef Automaton_Haig_Merge::StateSet StateSet;
vector<StateSet> nfa_state_map;
- auto rdfa = ue2::make_unique<raw_som_dfa>(dfas[0]->kind, unordered_som);
+ auto rdfa = ue2::make_unique<raw_som_dfa>(dfas[0]->kind, unordered_som,
+ NODE_START,
+ dfas[0]->stream_som_loc_width);
int rv = determinise(n, rdfa->states, limit, &nfa_state_map);
if (rv) {
}
haig_merge_note_starts(dfas, per_dfa_adj, &rdfa->new_som_nfa_states);
- rdfa->trigger_nfa_state = NODE_START;
DEBUG_PRINTF("merged, building impl dfa (a,f) = (%hu,%hu)\n",
rdfa->start_anchored, rdfa->start_floating);
- rdfa->stream_som_loc_width = dfas[0]->stream_som_loc_width;
return rdfa;
}