From 6e6294defb5baa8614c804407f40472c2451e445 Mon Sep 17 00:00:00 2001 From: Dave Flowers Date: Tue, 15 Aug 2017 15:48:27 -0500 Subject: [PATCH] mecat2cns/mecat_correction.cpp fix --- src/mecat2cns/mecat_correction.cpp | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/mecat2cns/mecat_correction.cpp b/src/mecat2cns/mecat_correction.cpp index ca56e89..0fc3942 100644 --- a/src/mecat2cns/mecat_correction.cpp +++ b/src/mecat2cns/mecat_correction.cpp @@ -160,33 +160,30 @@ output_cns_result(std::vector& cns_results, std::string& cns_seq) { const size_t MaxSeqSize = 60000; - const size_t BlkSize = 50000; const size_t OvlpSize = 10000; + // BlkSize must be >= OvlpSize + const size_t BlkSize = MaxSeqSize - OvlpSize - 1000; - size_t size = cns_seq.size(); + const size_t size = cns_seq.size(); if (size <= MaxSeqSize) { cr.range[0] = beg; cr.range[1] = end; cr.seq = cns_seq; cns_results.push_back(cr); } else { + const size_t cutoff = size - OvlpSize - 1000; size_t L = 0, R; - size_t left = size; - while (left) { - R = std::min(L + BlkSize, size); - size_t blksize = R - L; - left -= blksize; - if (left <= OvlpSize + 1000) { + do { + R = L + BlkSize; + if (R >= cutoff) { R = size; - blksize += left; - left = 0; } cr.range[0] = L + beg; - cr.range[1] = R + beg; - cr.seq = cns_seq.substr(L, blksize); + cr.range[1] = R < size && R + beg < static_cast(end) ? R + beg : end; + cr.seq = cns_seq.substr(L, R - L); cns_results.push_back(cr); L = R - OvlpSize; - } + } while (R < size); } }