summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@10gen.com>2013-10-05 12:34:42 -0400
committerAndy Schwerin <schwerin@10gen.com>2013-10-05 17:39:16 -0400
commit07c18d3c1147bd11ea50902542432a178f4f685f (patch)
treef9444ed6d3887e427097f8106a9e4cbbe67b5fc2 /src/mongo
parent4a075b087bb93598413bd99cc6cba75c313e1bef (diff)
downloadmongo-07c18d3c1147bd11ea50902542432a178f4f685f.tar.gz
SERVER-10670 Templatize the RoleNameIteratorImpl for std containers.
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/db/auth/role_name.cpp24
-rw-r--r--src/mongo/db/auth/role_name.h44
2 files changed, 26 insertions, 42 deletions
diff --git a/src/mongo/db/auth/role_name.cpp b/src/mongo/db/auth/role_name.cpp
index 9438eaec4f8..00415cf7bf3 100644
--- a/src/mongo/db/auth/role_name.cpp
+++ b/src/mongo/db/auth/role_name.cpp
@@ -48,30 +48,6 @@ namespace mongo {
_splitPoint = role.size();
}
- RoleNameVectorIterator::RoleNameVectorIterator(
- const std::vector<RoleName>::const_iterator& begin,
- const std::vector<RoleName>::const_iterator& end) : _begin(begin), _end(end) {}
-
- RoleNameVectorIterator::~RoleNameVectorIterator() {};
-
- bool RoleNameVectorIterator::more() const {
- return _begin != _end;
- }
-
- const RoleName& RoleNameVectorIterator::next() {
- const RoleName& toReturn = get();
- ++_begin;
- return toReturn;
- }
-
- const RoleName& RoleNameVectorIterator::get() const {
- return *_begin;
- }
-
- RoleNameIterator::Impl* RoleNameVectorIterator::doClone() const {
- return new RoleNameVectorIterator(_begin, _end);
- }
-
std::ostream& operator<<(std::ostream& os, const RoleName& name) {
return os << name.getFullName();
}
diff --git a/src/mongo/db/auth/role_name.h b/src/mongo/db/auth/role_name.h
index 93942e14c67..7f7de642c9b 100644
--- a/src/mongo/db/auth/role_name.h
+++ b/src/mongo/db/auth/role_name.h
@@ -149,27 +149,35 @@ MONGO_HASH_NAMESPACE_END
namespace mongo {
- // RoleNameIterator for iterating over a vector of RoleNames.
- class RoleNameVectorIterator : public RoleNameIterator::Impl {
- MONGO_DISALLOW_COPYING(RoleNameVectorIterator);
-
+ template <typename ContainerIterator>
+ class RoleNameContainerIteratorImpl : public RoleNameIterator::Impl {
+ MONGO_DISALLOW_COPYING(RoleNameContainerIteratorImpl);
public:
- RoleNameVectorIterator(const std::vector<RoleName>::const_iterator& begin,
- const std::vector<RoleName>::const_iterator& end);
-
- virtual ~RoleNameVectorIterator();
-
- virtual bool more() const;
-
- virtual const RoleName& next();
-
- virtual const RoleName& get() const;
+ RoleNameContainerIteratorImpl(const ContainerIterator& begin,
+ const ContainerIterator& end) :
+ _curr(begin), _end(end) {}
+ virtual ~RoleNameContainerIteratorImpl() {}
+ virtual bool more() const { return _curr != _end; }
+ virtual const RoleName& next() { return *(_curr++); }
+ virtual const RoleName& get() const { return *_curr; }
+ virtual RoleNameIterator::Impl* doClone() const {
+ return new RoleNameContainerIteratorImpl(_curr, _end);
+ }
private:
- virtual Impl* doClone() const;
-
- std::vector<RoleName>::const_iterator _begin;
- std::vector<RoleName>::const_iterator _end;
+ ContainerIterator _curr;
+ ContainerIterator _end;
};
+ template <typename ContainerIterator>
+ RoleNameIterator makeRoleNameIterator(const ContainerIterator& begin,
+ const ContainerIterator& end) {
+ return RoleNameIterator( new RoleNameContainerIteratorImpl<ContainerIterator>(begin, end));
+ }
+
+ template <typename Container>
+ RoleNameIterator makeRoleNameIteratorForContainer(const Container& container) {
+ return makeRoleNameIterator(container.begin(), container.end());
+ }
+
} // namespace mongo