aboutsummaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-09-21 19:52:59 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2016-09-21 19:52:59 +0000
commit20961181a6daa47175c9df8bb223865421d2bfda (patch)
tree1549ef443713cc7c3fd709b765daa07d1b18fb98 /storage
parent9b1e7423918a12812fd58d8096443d6cab811016 (diff)
Replace the barely used SmallVector optimizations with std::vector and explicit reserve.
Diffstat (limited to 'storage')
-rw-r--r--storage/src/vespa/storage/distributor/operations/idealstate/mergelimiter.cpp27
-rw-r--r--storage/src/vespa/storage/distributor/operationtargetresolver.h3
-rw-r--r--storage/src/vespa/storage/distributor/operationtargetresolverimpl.h6
3 files changed, 17 insertions, 19 deletions
diff --git a/storage/src/vespa/storage/distributor/operations/idealstate/mergelimiter.cpp b/storage/src/vespa/storage/distributor/operations/idealstate/mergelimiter.cpp
index 18a2f8c8118..618ba9ba884 100644
--- a/storage/src/vespa/storage/distributor/operations/idealstate/mergelimiter.cpp
+++ b/storage/src/vespa/storage/distributor/operations/idealstate/mergelimiter.cpp
@@ -1,7 +1,6 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/storage/distributor/operations/idealstate/mergelimiter.h>
-#include <vespa/vdslib/container/smallvector.h>
#include <vespa/log/log.h>
@@ -19,7 +18,7 @@ MergeLimiter::MergeLimiter(uint16_t maxNodes)
namespace {
class EqualCopies {
uint32_t _checksum;
- lib::SmallVector<MergeMetaData> _copies;
+ std::vector<MergeMetaData> _copies;
uint32_t _trustedCopies;
public:
@@ -47,14 +46,8 @@ namespace {
}
};
- vespalib::asciistream& operator<<(vespalib::asciistream& out,
- const EqualCopies& e)
- {
- return out << "EqualCopies(" << e.size() << ")";
- }
-
class Statistics {
- lib::SmallVector<EqualCopies> _groups;
+ std::vector<EqualCopies> _groups;
uint32_t _trustedCopies;
public:
@@ -62,6 +55,7 @@ namespace {
Statistics(const MergeLimiter::NodeArray& a)
: _trustedCopies(0)
{
+ _groups.reserve(a.size());
for (uint32_t i=0, n=a.size(); i<n; ++i) {
add(a[i]);
if (a[i].trusted()) {
@@ -87,18 +81,20 @@ namespace {
uint32_t trustedCount() const { return _trustedCopies; }
Statistics extractGroupsWithTrustedCopies() {
- lib::SmallVector<EqualCopies> _remaining;
+ std::vector<EqualCopies> remaining;
Statistics trusted;
+ remaining.reserve(_groups.size());
+ trusted._groups.reserve(_groups.size());
for (uint32_t i=0, n=_groups.size(); i<n; ++i) {
if (_groups[i].hasTrusted()) {
trusted._groups.push_back(_groups[i]);
trusted._trustedCopies += _groups[i].trustedCount();
} else {
- _remaining.push_back(_groups[i]);
+ remaining.push_back(_groups[i]);
_trustedCopies -= _groups[i].trustedCount();
}
}
- swap(_remaining, _groups);
+ swap(remaining, _groups);
return trusted;
}
bool extractNext(MergeMetaData& data, uint32_t& last) {
@@ -112,9 +108,12 @@ namespace {
return true;
}
void removeGroup(uint32_t groupIndex) {
- lib::SmallVector<EqualCopies> remaining;
+ std::vector<EqualCopies> remaining;
+ remaining.reserve(_groups.size()-1);
for (uint32_t i=0, n=_groups.size(); i<n; ++i) {
- if (i != groupIndex) remaining.push_back(_groups[i]);
+ if (i != groupIndex) {
+ remaining.push_back(_groups[i]);
+ }
}
remaining.swap(_groups);
}
diff --git a/storage/src/vespa/storage/distributor/operationtargetresolver.h b/storage/src/vespa/storage/distributor/operationtargetresolver.h
index 87757ec3227..380ce3ae1e6 100644
--- a/storage/src/vespa/storage/distributor/operationtargetresolver.h
+++ b/storage/src/vespa/storage/distributor/operationtargetresolver.h
@@ -7,7 +7,6 @@
#pragma once
#include <vespa/document/bucket/bucketid.h>
-#include <vespa/vdslib/container/smallvector.h>
#include <vespa/vdslib/state/node.h>
#include <vespa/vespalib/util/printable.h>
@@ -42,7 +41,7 @@ public:
}
};
-class OperationTargetList : public lib::SmallVector<OperationTarget> {
+class OperationTargetList : public std::vector<OperationTarget> {
public:
bool hasAnyNewCopies() const {
for (size_t i=0; i<size(); ++i) {
diff --git a/storage/src/vespa/storage/distributor/operationtargetresolverimpl.h b/storage/src/vespa/storage/distributor/operationtargetresolverimpl.h
index 08d79c501e4..36cb02dc213 100644
--- a/storage/src/vespa/storage/distributor/operationtargetresolverimpl.h
+++ b/storage/src/vespa/storage/distributor/operationtargetresolverimpl.h
@@ -27,7 +27,7 @@ struct BucketInstance : public vespalib::AsciiPrintable {
};
class BucketInstanceList : public vespalib::AsciiPrintable {
- lib::SmallVector<BucketInstance> _instances;
+ std::vector<BucketInstance> _instances;
/**
* Resolve and return the least specific bucket in the subtree of (and
@@ -73,8 +73,8 @@ public:
OperationTargetList createTargets();
- void print(vespalib::asciistream& out, const PrintProperties& p) const {
- _instances.print(out, p);
+ void print(vespalib::asciistream& out, const PrintProperties& p) const override {
+ vespalib::print(_instances, out, p);
}
};