summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/Boost/src/boost/asio/ip/basic_resolver_iterator.hpp')
-rw-r--r--3rdParty/Boost/src/boost/asio/ip/basic_resolver_iterator.hpp76
1 files changed, 55 insertions, 21 deletions
diff --git a/3rdParty/Boost/src/boost/asio/ip/basic_resolver_iterator.hpp b/3rdParty/Boost/src/boost/asio/ip/basic_resolver_iterator.hpp
index 90644a2..5f4937b 100644
--- a/3rdParty/Boost/src/boost/asio/ip/basic_resolver_iterator.hpp
+++ b/3rdParty/Boost/src/boost/asio/ip/basic_resolver_iterator.hpp
@@ -18,8 +18,7 @@
#include <boost/asio/detail/push_options.hpp>
#include <boost/asio/detail/push_options.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/optional.hpp>
+#include <boost/iterator.hpp>
#include <boost/shared_ptr.hpp>
#include <cstring>
#include <string>
@@ -48,14 +47,18 @@ namespace ip {
*/
template <typename InternetProtocol>
class basic_resolver_iterator
- : public boost::iterator_facade<
- basic_resolver_iterator<InternetProtocol>,
- const basic_resolver_entry<InternetProtocol>,
- boost::forward_traversal_tag>
+#if defined(GENERATING_DOCUMENTATION)
+ : public std::iterator<
+#else // defined(GENERATING_DOCUMENTATION)
+ : public boost::iterator<
+#endif // defined(GENERATING_DOCUMENTATION)
+ std::forward_iterator_tag,
+ const basic_resolver_entry<InternetProtocol> >
{
public:
/// Default constructor creates an end iterator.
basic_resolver_iterator()
+ : index_(0)
{
}
@@ -91,11 +94,6 @@ public:
address_info = address_info->ai_next;
}
- if (iter.values_->size())
- iter.iter_ = iter.values_->begin();
- else
- iter.values_.reset();
-
return iter;
}
@@ -109,21 +107,58 @@ public:
iter.values_->push_back(
basic_resolver_entry<InternetProtocol>(
endpoint, host_name, service_name));
- iter.iter_ = iter.values_->begin();
return iter;
}
-private:
- friend class boost::iterator_core_access;
+ /// Dereference an iterator.
+ const basic_resolver_entry<InternetProtocol>& operator*() const
+ {
+ return dereference();
+ }
+
+ /// Dereference an iterator.
+ const basic_resolver_entry<InternetProtocol>* operator->() const
+ {
+ return &dereference();
+ }
+
+ /// Increment operator (prefix).
+ basic_resolver_iterator& operator++()
+ {
+ increment();
+ return *this;
+ }
+ /// Increment operator (postfix).
+ basic_resolver_iterator operator++(int)
+ {
+ basic_resolver_iterator tmp(*this);
+ ++*this;
+ return tmp;
+ }
+
+ /// Test two iterators for equality.
+ friend bool operator==(const basic_resolver_iterator& a,
+ const basic_resolver_iterator& b)
+ {
+ return a.equal(b);
+ }
+
+ /// Test two iterators for inequality.
+ friend bool operator!=(const basic_resolver_iterator& a,
+ const basic_resolver_iterator& b)
+ {
+ return !a.equal(b);
+ }
+
+private:
void increment()
{
- if (++*iter_ == values_->end())
+ if (++index_ == values_->size())
{
// Reset state to match a default constructed end iterator.
values_.reset();
- typedef typename values_type::const_iterator values_iterator_type;
- iter_.reset();
+ index_ = 0;
}
}
@@ -133,18 +168,17 @@ private:
return true;
if (values_ != other.values_)
return false;
- return *iter_ == *other.iter_;
+ return index_ == other.index_;
}
const basic_resolver_entry<InternetProtocol>& dereference() const
{
- return **iter_;
+ return (*values_)[index_];
}
typedef std::vector<basic_resolver_entry<InternetProtocol> > values_type;
- typedef typename values_type::const_iterator values_iter_type;
boost::shared_ptr<values_type> values_;
- boost::optional<values_iter_type> iter_;
+ std::size_t index_;
};
} // namespace ip