diff options
-rw-r--r-- | src/mongo/db/auth/role_name.cpp | 24 | ||||
-rw-r--r-- | src/mongo/db/auth/role_name.h | 44 |
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 |