From 9953a026f8d9d5e6511103dd68873b108a7cedd4 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Tue, 1 Mar 2016 16:29:50 +1100 Subject: [PATCH] setupFDRFloodControl: return smart ptr --- src/fdr/fdr_compile.cpp | 5 ++--- src/fdr/fdr_compile_internal.h | 3 ++- src/fdr/flood_compile.cpp | 14 ++++++++------ src/fdr/teddy_compile.cpp | 5 ++--- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/fdr/fdr_compile.cpp b/src/fdr/fdr_compile.cpp index 0c4ef35d..bd074313 100644 --- a/src/fdr/fdr_compile.cpp +++ b/src/fdr/fdr_compile.cpp @@ -144,7 +144,7 @@ void FDRCompiler::createInitialState(FDR *fdr) { aligned_unique_ptr FDRCompiler::setupFDR(pair link) { size_t tabSize = eng.getTabSizeBytes(); - pair floodControlTmp = setupFDRFloodControl(lits, eng); + auto floodControlTmp = setupFDRFloodControl(lits, eng); pair confirmTmp = setupFullMultiConfs(lits, eng, bucketToLits, make_small); @@ -180,9 +180,8 @@ aligned_unique_ptr FDRCompiler::setupFDR(pair link) { aligned_free(confirmTmp.first); fdr->floodOffset = verify_u32(ptr - fdr_base); - memcpy(ptr, floodControlTmp.first, floodControlTmp.second); + memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second); ptr += floodControlTmp.second; - aligned_free(floodControlTmp.first); /* we are allowing domains 9 to 15 only */ assert(eng.bits > 8 && eng.bits < 16); diff --git a/src/fdr/fdr_compile_internal.h b/src/fdr/fdr_compile_internal.h index 4b89d329..e7376620 100644 --- a/src/fdr/fdr_compile_internal.h +++ b/src/fdr/fdr_compile_internal.h @@ -31,6 +31,7 @@ #include "ue2common.h" #include "hwlm/hwlm_literal.h" +#include "util/alloc.h" #include #include @@ -65,7 +66,7 @@ std::pair setupFullMultiConfs( // 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 +std::pair, size_t> setupFDRFloodControl(const std::vector &lits, const EngineDescription &eng); diff --git a/src/fdr/flood_compile.cpp b/src/fdr/flood_compile.cpp index 2c131788..f7a3e083 100644 --- a/src/fdr/flood_compile.cpp +++ b/src/fdr/flood_compile.cpp @@ -90,8 +90,9 @@ void addFlood(vector &tmpFlood, u8 c, const hwlmLiteral &lit, } } -pair setupFDRFloodControl(const vector &lits, - const EngineDescription &eng) { +pair, size_t> +setupFDRFloodControl(const vector &lits, + const EngineDescription &eng) { vector tmpFlood(N_CHARS); u32 default_suffix = eng.getDefaultFloodSuffixLength(); @@ -195,11 +196,12 @@ pair setupFDRFloodControl(const vector &lits, size_t floodHeaderSize = sizeof(u32) * N_CHARS; size_t floodStructSize = sizeof(FDRFlood) * nDistinctFloods; size_t totalSize = ROUNDUP_16(floodHeaderSize + floodStructSize); - u8 *buf = (u8 *)aligned_zmalloc(totalSize); + + auto buf = aligned_zmalloc_unique(totalSize); assert(buf); // otherwise would have thrown std::bad_alloc - u32 *floodHeader = (u32 *)buf; - FDRFlood *layoutFlood = (FDRFlood * )(buf + floodHeaderSize); + u32 *floodHeader = (u32 *)buf.get(); + FDRFlood *layoutFlood = (FDRFlood *)(buf.get() + floodHeaderSize); u32 currentFloodIndex = 0; for (const auto &m : flood2chars) { @@ -215,7 +217,7 @@ pair setupFDRFloodControl(const vector &lits, DEBUG_PRINTF("made a flood structure with %zu + %zu = %zu\n", floodHeaderSize, floodStructSize, totalSize); - return make_pair((u8 *)buf, totalSize); + return make_pair(move(buf), totalSize); } } // namespace ue2 diff --git a/src/fdr/teddy_compile.cpp b/src/fdr/teddy_compile.cpp index c1e46d85..80543bb4 100644 --- a/src/fdr/teddy_compile.cpp +++ b/src/fdr/teddy_compile.cpp @@ -314,7 +314,7 @@ aligned_unique_ptr TeddyCompiler::build(pair link) { size_t maskLen = eng.numMasks * 16 * 2 * maskWidth; - pair floodControlTmp = setupFDRFloodControl(lits, eng); + auto floodControlTmp = setupFDRFloodControl(lits, eng); pair confirmTmp = setupFullMultiConfs(lits, eng, bucketToLits, make_small); @@ -339,9 +339,8 @@ aligned_unique_ptr TeddyCompiler::build(pair link) { aligned_free(confirmTmp.first); teddy->floodOffset = verify_u32(ptr - teddy_base); - memcpy(ptr, floodControlTmp.first, floodControlTmp.second); + memcpy(ptr, floodControlTmp.first.get(), floodControlTmp.second); ptr += floodControlTmp.second; - aligned_free(floodControlTmp.first); if (link.first) { teddy->link = verify_u32(ptr - teddy_base);