summaryrefslogtreecommitdiff
path: root/src/BitfieldMan.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-08-18 14:21:02 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-08-18 14:21:02 +0000
commitc1f4af537ad4698c756cb7e2d76efaaa8d5f1269 (patch)
treed9601800f000e65640b5daccd027cbd3ca46516b /src/BitfieldMan.cc
parenta4d5134f803eb6548752ffb44c482d77e55822e7 (diff)
2009-08-18 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Avoided unnecessary memory allocation in BitfieldMan::getCompletedLength(). * src/BitfieldMan.cc
Diffstat (limited to 'src/BitfieldMan.cc')
-rw-r--r--src/BitfieldMan.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc
index 57110ef3..70776894 100644
--- a/src/BitfieldMan.cc
+++ b/src/BitfieldMan.cc
@@ -675,8 +675,9 @@ uint64_t BitfieldMan::getFilteredTotalLengthNow() const {
}
uint64_t BitfieldMan::getCompletedLength(bool useFilter) const {
- unsigned char* temp = new unsigned char[bitfieldLength];
+ unsigned char* temp;
if(useFilter) {
+ temp = new unsigned char[bitfieldLength];
for(size_t i = 0; i < bitfieldLength; ++i) {
temp[i] = bitfield[i];
if(filterEnabled) {
@@ -684,7 +685,7 @@ uint64_t BitfieldMan::getCompletedLength(bool useFilter) const {
}
}
} else {
- memcpy(temp, bitfield, bitfieldLength);
+ temp = bitfield;
}
size_t completedBlocks = bitfield::countSetBit(temp, blocks);
uint64_t completedLength = 0;
@@ -697,7 +698,9 @@ uint64_t BitfieldMan::getCompletedLength(bool useFilter) const {
completedLength = ((uint64_t)completedBlocks)*blockLength;
}
}
- delete [] temp;
+ if(useFilter) {
+ delete [] temp;
+ }
return completedLength;
}