]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
fdr: use bytecode_ptr internally
authorJustin Viiret <justin.viiret@intel.com>
Mon, 20 Mar 2017 02:53:40 +0000 (13:53 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 05:19:35 +0000 (15:19 +1000)
src/fdr/fdr_compile.cpp
src/fdr/fdr_compile_internal.h
src/fdr/fdr_confirm_compile.cpp
src/fdr/flood_compile.cpp
src/fdr/teddy_compile.cpp

index dc0cc0f3c01bbdb1b6968cde9a93a6268e3666ff..8346e520ecfeefee872f3b101dacb9543aba1182 100644 (file)
@@ -151,18 +151,18 @@ aligned_unique_ptr<FDR> FDRCompiler::setupFDR() {
     auto confirmTmp = setupFullConfs(lits, eng, bucketToLits, make_small);
 
     assert(ISALIGNED_16(tabSize));
-    assert(ISALIGNED_16(confirmTmp.second));
-    assert(ISALIGNED_16(floodControlTmp.second));
+    assert(ISALIGNED_16(confirmTmp.size()));
+    assert(ISALIGNED_16(floodControlTmp.size()));
     size_t headerSize = ROUNDUP_16(sizeof(FDR));
-    size_t size = ROUNDUP_16(headerSize + tabSize + confirmTmp.second +
-                             floodControlTmp.second);
+    size_t size = ROUNDUP_16(headerSize + tabSize + confirmTmp.size() +
+                             floodControlTmp.size());
 
     DEBUG_PRINTF("sizes base=%zu tabSize=%zu confirm=%zu floodControl=%zu "
                  "total=%zu\n",
-                 headerSize, tabSize, confirmTmp.second, floodControlTmp.second,
+                 headerSize, tabSize, confirmTmp.size(), floodControlTmp.size(),
                  size);
 
-    aligned_unique_ptr<FDR> fdr = aligned_zmalloc_unique<FDR>(size);
+    auto fdr = aligned_zmalloc_unique<FDR>(size);
     assert(fdr); // otherwise would have thrown std::bad_alloc
 
     fdr->size = size;
@@ -171,16 +171,16 @@ aligned_unique_ptr<FDR> FDRCompiler::setupFDR() {
     createInitialState(fdr.get());
 
     u8 *fdr_base = (u8 *)fdr.get();
-    u8 * ptr = fdr_base + ROUNDUP_16(sizeof(FDR));
+    u8 *ptr = fdr_base + ROUNDUP_16(sizeof(FDR));
     copy(tab.begin(), tab.end(), ptr);
     ptr += tabSize;
 
-    memcpy(ptr, confirmTmp.first.get(), confirmTmp.second);
-    ptr += confirmTmp.second;
+    memcpy(ptr, confirmTmp.get(), confirmTmp.size());
+    ptr += confirmTmp.size();
 
     fdr->floodOffset = verify_u32(ptr - fdr_base);
-    memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second);
-    ptr += floodControlTmp.second;
+    memcpy(ptr, floodControlTmp.get(), floodControlTmp.size());
+    ptr += floodControlTmp.size();
 
     /*  we are allowing domains 9 to 15 only */
     assert(eng.bits > 8 && eng.bits < 16);
index 73de4d4268a2d597039268b794644ec4b05907c5..756fe8e70afde7a0da2123279376bbbddc5ac203 100644 (file)
@@ -31,7 +31,7 @@
 
 #include "ue2common.h"
 #include "hwlm/hwlm_literal.h"
-#include "util/alloc.h"
+#include "util/bytecode_ptr.h"
 
 #include <map>
 #include <utility>
@@ -57,20 +57,20 @@ class FDREngineDescription;
 struct hwlmStreamingControl;
 struct Grey;
 
-std::pair<aligned_unique_ptr<u8>, size_t> setupFullConfs(
-    const std::vector<hwlmLiteral> &lits, const EngineDescription &eng,
-    std::map<BucketIndex, std::vector<LiteralIndex>> &bucketToLits,
-    bool make_small);
+bytecode_ptr<u8> setupFullConfs(const std::vector<hwlmLiteral> &lits,
+               const EngineDescription &eng,
+               std::map<BucketIndex, std::vector<LiteralIndex>> &bucketToLits,
+               bool make_small);
 
 // all suffixes include an implicit max_bucket_width suffix to ensure that
 // we always read a full-scale flood "behind" us in terms of what's in our
 // state; if we don't have a flood that's long enough we won't be in the
 // right state yet to allow blindly advancing
-std::pair<aligned_unique_ptr<u8>, size_t>
-setupFDRFloodControl(const std::vector<hwlmLiteral> &lits,
-                     const EngineDescription &eng, const Grey &grey);
+bytecode_ptr<u8> setupFDRFloodControl(const std::vector<hwlmLiteral> &lits,
+                                      const EngineDescription &eng,
+                                      const Grey &grey);
 
-std::pair<aligned_unique_ptr<u8>, size_t>
+bytecode_ptr<u8>
 fdrBuildTableStreaming(const std::vector<hwlmLiteral> &lits,
                        hwlmStreamingControl &stream_control);
 
index e59692617864f6ad65dad27ae699f27e675fafac..367ba693d446ff388910a7af2eacff43086a6bd1 100644 (file)
@@ -342,7 +342,7 @@ getFDRConfirm(const vector<hwlmLiteral> &lits, bool make_small,
     return {move(fdrc), actual_size};
 }
 
-pair<aligned_unique_ptr<u8>, size_t>
+bytecode_ptr<u8>
 setupFullConfs(const vector<hwlmLiteral> &lits,
                const EngineDescription &eng,
                map<BucketIndex, vector<LiteralIndex>> &bucketToLits,
@@ -374,7 +374,7 @@ setupFullConfs(const vector<hwlmLiteral> &lits,
     u32 totalConfSwitchSize = nBuckets * sizeof(u32);
     u32 totalSize = ROUNDUP_16(totalConfSwitchSize + totalConfirmSize);
 
-    auto buf = aligned_zmalloc_unique<u8>(totalSize);
+    auto buf = make_bytecode_ptr<u8>(totalSize, 16);
     assert(buf); // otherwise would have thrown std::bad_alloc
 
     u32 *confBase = (u32 *)buf.get();
@@ -389,7 +389,8 @@ setupFullConfs(const vector<hwlmLiteral> &lits,
         ptr += p.second;
         confBase[idx] = confirm_offset;
     }
-    return {move(buf), totalSize};
+
+    return buf;
 }
 
 } // namespace ue2
index b6d23c9d20f74942f8bf3b22543cbe0aaf5e095b..9b948419e57893431e728e6da5e8d52b9135cdf0 100644 (file)
@@ -91,9 +91,9 @@ void addFlood(vector<FDRFlood> &tmpFlood, u8 c, const hwlmLiteral &lit,
    }
 }
 
-pair<aligned_unique_ptr<u8>, size_t>
-setupFDRFloodControl(const vector<hwlmLiteral> &lits,
-                     const EngineDescription &eng, const Grey &grey) {
+bytecode_ptr<u8> setupFDRFloodControl(const vector<hwlmLiteral> &lits,
+                                      const EngineDescription &eng,
+                                      const Grey &grey) {
     vector<FDRFlood> tmpFlood(N_CHARS);
     u32 default_suffix = eng.getDefaultFloodSuffixLength();
 
@@ -207,7 +207,7 @@ setupFDRFloodControl(const vector<hwlmLiteral> &lits,
     size_t floodStructSize = sizeof(FDRFlood) * nDistinctFloods;
     size_t totalSize = ROUNDUP_16(floodHeaderSize + floodStructSize);
 
-    auto buf = aligned_zmalloc_unique<u8>(totalSize);
+    auto buf = make_bytecode_ptr<u8>(totalSize, 16);
     assert(buf); // otherwise would have thrown std::bad_alloc
 
     u32 *floodHeader = (u32 *)buf.get();
@@ -227,7 +227,7 @@ setupFDRFloodControl(const vector<hwlmLiteral> &lits,
     DEBUG_PRINTF("made a flood structure with %zu + %zu = %zu\n",
                  floodHeaderSize, floodStructSize, totalSize);
 
-    return {move(buf), totalSize};
+    return buf;
 }
 
 } // namespace ue2
index 607024d12739eb78b1c848bde13445049f5895f8..a5856110be814bbd92045e69d066dc15fe08eba4 100644 (file)
@@ -315,11 +315,11 @@ aligned_unique_ptr<FDR> TeddyCompiler::build() {
 
     size_t size = ROUNDUP_N(sizeof(Teddy) +
                             maskLen +
-                            confirmTmp.second +
-                            floodControlTmp.second,
+                            confirmTmp.size() +
+                            floodControlTmp.size(),
                             16 * maskWidth);
 
-    aligned_unique_ptr<FDR> fdr = aligned_zmalloc_unique<FDR>(size);
+    auto fdr = aligned_zmalloc_unique<FDR>(size);
     assert(fdr); // otherwise would have thrown std::bad_alloc
     Teddy *teddy = (Teddy *)fdr.get(); // ugly
     u8 *teddy_base = (u8 *)teddy;
@@ -329,12 +329,12 @@ aligned_unique_ptr<FDR> TeddyCompiler::build() {
     teddy->maxStringLen = verify_u32(maxLen(lits));
 
     u8 *ptr = teddy_base + sizeof(Teddy) + maskLen;
-    memcpy(ptr, confirmTmp.first.get(), confirmTmp.second);
-    ptr += confirmTmp.second;
+    memcpy(ptr, confirmTmp.get(), confirmTmp.size());
+    ptr += confirmTmp.size();
 
     teddy->floodOffset = verify_u32(ptr - teddy_base);
-    memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second);
-    ptr += floodControlTmp.second;
+    memcpy(ptr, floodControlTmp.get(), floodControlTmp.size());
+    ptr += floodControlTmp.size();
 
     u8 *baseMsk = teddy_base + sizeof(Teddy);