template<typename PcVec, typename SlotVec, typename MarkVec>
struct real::detail::basic_thread_list< PcVec, SlotVec, MarkVec >
One priority-ordered list of NFA threads (leftmost-greedy semantics).
mark is generation-stamped so clearing the list between positions is O(1).
- Template Parameters
-
| PcVec | Container of program counters. |
| SlotVec | Flattened capture slots (pcs.size() * slot_count). |
| MarkVec | Per-pc generation marks for O(1) dedup. |
template<typename PcVec , typename SlotVec , typename MarkVec >
Clears the list in O(1) by bumping the generation.
noinline, and it buys codegen rather than cycles: this runs twice per search, so outlining it is free, while mark.assign inlined here is a per-element construct_at loop whose mere presence charges the class-scan routes on gcc/x86 – routes that never build a thread list at all. Measured alone the outlining is a REGRESSION; it pays only together with the SBO mark table, whose codegen it is repairing. The two belong together or not at all.
- Parameters
-
| [in] | code_size | Number of instructions (sizes the mark table once). |