Use correct type for anchored matcher build

This commit is contained in:
Justin Viiret 2016-01-14 09:53:15 +11:00 committed by Matthew Barr
parent e63fcec3c7
commit d7c8ffc7fd
3 changed files with 18 additions and 17 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, Intel Corporation * Copyright (c) 2015-2016, Intel Corporation
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -217,13 +217,12 @@ void populate_holder(const simple_anchored_info &sai, const set<u32> &exit_ids,
h[v].reports.insert(exit_ids.begin(), exit_ids.end()); h[v].reports.insert(exit_ids.begin(), exit_ids.end());
} }
u32 anchoredStateSize(const void *atable) { u32 anchoredStateSize(const anchored_matcher_info *atable) {
if (!atable) { if (!atable) {
return 0; return 0;
} }
const struct anchored_matcher_info *curr const struct anchored_matcher_info *curr = atable;
= (const anchored_matcher_info *)atable;
// Walk the list until we find the last element; total state size will be // Walk the list until we find the last element; total state size will be
// that engine's state offset plus its state requirement. // that engine's state offset plus its state requirement.
@ -812,21 +811,21 @@ size_t buildNfas(vector<unique_ptr<raw_dfa>> &anchored_dfas,
return total_size; return total_size;
} }
aligned_unique_ptr<void> buildAnchoredAutomataMatcher(RoseBuildImpl &tbi, aligned_unique_ptr<anchored_matcher_info>
size_t *asize) { buildAnchoredAutomataMatcher(RoseBuildImpl &build, size_t *asize) {
const CompileContext &cc = tbi.cc; const CompileContext &cc = build.cc;
remapAnchoredReports(tbi); remapAnchoredReports(build);
if (tbi.anchored_nfas.empty() && tbi.anchored_simple.empty()) { if (build.anchored_nfas.empty() && build.anchored_simple.empty()) {
DEBUG_PRINTF("empty\n"); DEBUG_PRINTF("empty\n");
*asize = 0; *asize = 0;
return nullptr; return nullptr;
} }
vector<unique_ptr<raw_dfa>> anchored_dfas; vector<unique_ptr<raw_dfa>> anchored_dfas;
getAnchoredDfas(tbi, &anchored_dfas); getAnchoredDfas(build, &anchored_dfas);
mergeAnchoredDfas(anchored_dfas, tbi); mergeAnchoredDfas(anchored_dfas, build);
vector<aligned_unique_ptr<NFA>> nfas; vector<aligned_unique_ptr<NFA>> nfas;
vector<u32> start_offset; // start offset for each dfa (dots removed) vector<u32> start_offset; // start offset for each dfa (dots removed)
@ -837,7 +836,7 @@ aligned_unique_ptr<void> buildAnchoredAutomataMatcher(RoseBuildImpl &tbi,
} }
*asize = total_size; *asize = total_size;
aligned_unique_ptr<void> atable = aligned_zmalloc_unique<void>(total_size); auto atable = aligned_zmalloc_unique<anchored_matcher_info>(total_size);
char *curr = (char *)atable.get(); char *curr = (char *)atable.get();
u32 state_offset = 0; u32 state_offset = 0;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, Intel Corporation * Copyright (c) 2015-2016, Intel Corporation
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -38,6 +38,7 @@
#include <vector> #include <vector>
#include <set> #include <set>
struct anchored_matcher_info;
struct RoseEngine; struct RoseEngine;
namespace ue2 { namespace ue2 {
@ -46,9 +47,10 @@ class NGHolder;
class RoseBuildImpl; class RoseBuildImpl;
struct Grey; struct Grey;
aligned_unique_ptr<void> buildAnchoredAutomataMatcher(RoseBuildImpl &tbi, aligned_unique_ptr<anchored_matcher_info>
size_t *asize); buildAnchoredAutomataMatcher(RoseBuildImpl &build, size_t *asize);
u32 anchoredStateSize(const void *atable);
u32 anchoredStateSize(const anchored_matcher_info *atable);
bool anchoredIsMulti(const RoseEngine &engine); bool anchoredIsMulti(const RoseEngine &engine);
#define ANCHORED_FAIL 0 #define ANCHORED_FAIL 0

View File

@ -4028,7 +4028,7 @@ aligned_unique_ptr<RoseEngine> RoseBuildImpl::buildFinalEngine(u32 minWidth) {
size_t floatingStreamStateRequired = 0; size_t floatingStreamStateRequired = 0;
size_t historyRequired = calcHistoryRequired(); // Updated by HWLM. size_t historyRequired = calcHistoryRequired(); // Updated by HWLM.
aligned_unique_ptr<void> atable = aligned_unique_ptr<anchored_matcher_info> atable =
buildAnchoredAutomataMatcher(*this, &asize); buildAnchoredAutomataMatcher(*this, &asize);
aligned_unique_ptr<HWLM> ftable = buildFloatingMatcher( aligned_unique_ptr<HWLM> ftable = buildFloatingMatcher(
*this, &fsize, &historyRequired, &floatingStreamStateRequired); *this, &fsize, &historyRequired, &floatingStreamStateRequired);