]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
setupFullMultiConfs: return smart ptr
authorJustin Viiret <justin.viiret@intel.com>
Tue, 1 Mar 2016 05:35:09 +0000 (16:35 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Fri, 8 Jul 2016 00:49:31 +0000 (10:49 +1000)
src/fdr/fdr_compile.cpp
src/fdr/fdr_compile_internal.h
src/fdr/fdr_confirm_compile.cpp
src/fdr/teddy_compile.cpp

index bd074313b8a46a34cf84ea21dfbe0e43c14f9fb8..885c2c8720fbfff41e7c759c538793605133c4fa 100644 (file)
@@ -145,9 +145,7 @@ aligned_unique_ptr<FDR> FDRCompiler::setupFDR(pair<u8 *, size_t> link) {
     size_t tabSize = eng.getTabSizeBytes();
 
     auto floodControlTmp = setupFDRFloodControl(lits, eng);
-
-    pair<u8 *, size_t> confirmTmp =
-        setupFullMultiConfs(lits, eng, bucketToLits, make_small);
+    auto confirmTmp = setupFullMultiConfs(lits, eng, bucketToLits, make_small);
 
     assert(ISALIGNED_16(tabSize));
     assert(ISALIGNED_16(confirmTmp.second));
@@ -175,9 +173,8 @@ aligned_unique_ptr<FDR> FDRCompiler::setupFDR(pair<u8 *, size_t> link) {
     copy(tab.begin(), tab.end(), ptr);
     ptr += tabSize;
 
-    memcpy(ptr, confirmTmp.first, confirmTmp.second);
+    memcpy(ptr, confirmTmp.first.get(), confirmTmp.second);
     ptr += confirmTmp.second;
-    aligned_free(confirmTmp.first);
 
     fdr->floodOffset = verify_u32(ptr - fdr_base);
     memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second);
index e737662058a61fd280e425a3c62a2b68a9430554..ac6d125711bcba1b97785d727356a94b5a1cfe96 100644 (file)
@@ -57,9 +57,9 @@ class EngineDescription;
 class FDREngineDescription;
 struct hwlmStreamingControl;
 
-std::pair<u8 *, size_t> setupFullMultiConfs(
+std::pair<aligned_unique_ptr<u8>, size_t> setupFullMultiConfs(
     const std::vector<hwlmLiteral> &lits, const EngineDescription &eng,
-    std::map<BucketIndex, std::vector<LiteralIndex> > &bucketToLits,
+    std::map<BucketIndex, std::vector<LiteralIndex>> &bucketToLits,
     bool make_small);
 
 // all suffixes include an implicit max_bucket_width suffix to ensure that
index f65b36b907a8fc1a4b82380fc6c7a968a09e6de6..4a129bc48b7eec77ef6717d1b4324de43d1e9e9c 100644 (file)
@@ -435,10 +435,11 @@ u32 setupMultiConfirms(const vector<hwlmLiteral> &lits,
     return totalConfirmSize;
 }
 
-pair<u8 *, size_t> setupFullMultiConfs(const vector<hwlmLiteral> &lits,
-        const EngineDescription &eng,
-        map<BucketIndex, vector<LiteralIndex> > &bucketToLits,
-        bool make_small) {
+pair<aligned_unique_ptr<u8>, size_t>
+setupFullMultiConfs(const vector<hwlmLiteral> &lits,
+                    const EngineDescription &eng,
+                    map<BucketIndex, vector<LiteralIndex>> &bucketToLits,
+                    bool make_small) {
     BC2CONF bc2Conf;
     u32 totalConfirmSize = setupMultiConfirms(lits, eng, bc2Conf, bucketToLits,
                                               make_small);
@@ -448,24 +449,24 @@ pair<u8 *, size_t> setupFullMultiConfs(const vector<hwlmLiteral> &lits,
     u32 totalConfSwitchSize = primarySwitch * nBuckets * sizeof(u32);
     u32 totalSize = ROUNDUP_16(totalConfSwitchSize + totalConfirmSize);
 
-    u8 *buf = (u8 *)aligned_zmalloc(totalSize);
+    auto buf = aligned_zmalloc_unique<u8>(totalSize);
     assert(buf); // otherwise would have thrown std::bad_alloc
 
-    u32 *confBase = (u32 *)buf;
-    u8 *ptr = buf + totalConfSwitchSize;
+    u32 *confBase = (u32 *)buf.get();
+    u8 *ptr = buf.get() + totalConfSwitchSize;
 
     for (const auto &m : bc2Conf) {
         const BucketIndex &b = m.first.first;
         const u8 &c = m.first.second;
         const pair<aligned_unique_ptr<FDRConfirm>, size_t> &p = m.second;
         // confirm offset is relative to the base of this structure, now
-        u32 confirm_offset = verify_u32(ptr - (u8 *)buf);
+        u32 confirm_offset = verify_u32(ptr - buf.get());
         memcpy(ptr, p.first.get(), p.second);
         ptr += p.second;
         u32 idx = c * nBuckets + b;
         confBase[idx] = confirm_offset;
     }
-    return make_pair(buf, totalSize);
+    return make_pair(move(buf), totalSize);
 }
 
 } // namespace ue2
index 80543bb4fe5c1bf10e55ab0d2342ff5b1d456583..21f5c90132a995f04367414e2e0ccc2280739187 100644 (file)
@@ -315,8 +315,7 @@ aligned_unique_ptr<FDR> TeddyCompiler::build(pair<u8 *, size_t> link) {
     size_t maskLen = eng.numMasks * 16 * 2 * maskWidth;
 
     auto floodControlTmp = setupFDRFloodControl(lits, eng);
-    pair<u8 *, size_t> confirmTmp
-        = setupFullMultiConfs(lits, eng, bucketToLits, make_small);
+    auto confirmTmp = setupFullMultiConfs(lits, eng, bucketToLits, make_small);
 
     size_t size = ROUNDUP_N(sizeof(Teddy) +
                              maskLen +
@@ -334,9 +333,8 @@ aligned_unique_ptr<FDR> TeddyCompiler::build(pair<u8 *, size_t> link) {
     teddy->maxStringLen = verify_u32(maxLen(lits));
 
     u8 *ptr = teddy_base + sizeof(Teddy) + maskLen;
-    memcpy(ptr, confirmTmp.first, confirmTmp.second);
+    memcpy(ptr, confirmTmp.first.get(), confirmTmp.second);
     ptr += confirmTmp.second;
-    aligned_free(confirmTmp.first);
 
     teddy->floodOffset = verify_u32(ptr - teddy_base);
     memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second);