}
}
-void prune_overlong(raw_dfa &raw, u32 max_offset) {
+bool prune_overlong(raw_dfa &raw, u32 max_offset) {
DEBUG_PRINTF("pruning to at most %u\n", max_offset);
vector<u32> bob_dist;
u32 max_min_dist_bob = calc_min_dist_from_bob(raw, &bob_dist);
if (max_min_dist_bob <= max_offset) {
- return;
+ return false;
}
vector<vector<dstate_id_t> > in_edges;
/* update specials */
raw.start_floating = new_ids[raw.start_floating];
raw.start_anchored = new_ids[raw.start_anchored];
+
+ return true;
}
set<ReportID> all_reports(const raw_dfa &rdfa) {
namespace ue2 {
u32 remove_leading_dots(raw_dfa &raw);
-void prune_overlong(raw_dfa &raw, u32 max_offset);
+
+/**
+ * Prunes any states which cannot be reached within max_offset from start of
+ * stream. Returns false if no changes are made to the rdfa
+ */
+bool prune_overlong(raw_dfa &raw, u32 max_offset);
+
std::set<ReportID> all_reports(const raw_dfa &rdfa);
bool has_eod_accepts(const raw_dfa &rdfa);
bool has_non_eod_accepts(const raw_dfa &rdfa);
/*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2016, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
}
if (is_slow(rdfa, accel_states, roseQuality)) {
+ DEBUG_PRINTF("is slow\n");
*small_region = cc.grey.smallWriteLargestBufferBad;
if (*small_region <= *start_offset) {
return nullptr;
}
- prune_overlong(rdfa, *small_region - *start_offset);
- if (rdfa.start_anchored == DEAD_STATE) {
- DEBUG_PRINTF("all patterns pruned out\n");
- return nullptr;
- }
+ if (prune_overlong(rdfa, *small_region - *start_offset)) {
+ if (rdfa.start_anchored == DEAD_STATE) {
+ DEBUG_PRINTF("all patterns pruned out\n");
+ return nullptr;
+ }
- nfa = mcclellanCompile(rdfa, cc, &accel_states);
- if (!nfa) {
- DEBUG_PRINTF("mcclellan compile failed for smallwrite NFA\n");
- assert(0); /* we were able to build orig dfa but not the trimmed? */
- return nullptr;
+ nfa = mcclellanCompile(rdfa, cc, &accel_states);
+ if (!nfa) {
+ DEBUG_PRINTF("mcclellan compile failed for smallwrite NFA\n");
+ assert(0); /* able to build orig dfa but not the trimmed? */
+ return nullptr;
+ }
}
} else {
*small_region = cc.grey.smallWriteLargestBuffer;