Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r63605 - in sandbox/SOC/2009/unicode/boost/iterator: . detail
From: loufoque_at_[hidden]
Date: 2010-07-04 12:42:34


Author: mgaunard
Date: 2010-07-04 12:42:33 EDT (Sun, 04 Jul 2010)
New Revision: 63605
URL: http://svn.boost.org/trac/boost/changeset/63605

Log:
removing unused any_iterator
Removed:
   sandbox/SOC/2009/unicode/boost/iterator/any_iterator.hpp
   sandbox/SOC/2009/unicode/boost/iterator/detail/

Deleted: sandbox/SOC/2009/unicode/boost/iterator/any_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/unicode/boost/iterator/any_iterator.hpp 2010-07-04 12:42:33 EDT (Sun, 04 Jul 2010)
+++ (empty file)
@@ -1,422 +0,0 @@
-// (C) Copyright Thomas Becker 2005. Permission to copy, use, modify, sell and
-// distribute this software is granted provided this copyright notice appears
-// in all copies. This software is provided "as is" without express or implied
-// warranty, and with no claim as to its suitability for any purpose.
-
-// Revision History
-// ================
-//
-// 27 Dec 2006 (Thomas Becker) Created
-
-#ifndef ANY_ITERATOR_01102007TMB_HPP
-#define ANY_ITERATOR_01102007TMB_HPP
-
-// Includes
-// ========
-
-#include "detail/any_iterator_abstract_base.hpp"
-#include "detail/any_iterator_wrapper.hpp"
-#include "detail/any_iterator_metafunctions.hpp"
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/utility/enable_if.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/not.hpp>
-#include <boost/static_assert.hpp>
-
-namespace boost
-{
-
- ///////////////////////////////////////////////////////////////////////
- //
- // The any_iterator is modeled after the "type erasure pattern" as set
- // forth in boost::any. The class names correspond as follows:
- //
- // boost::any ==> any_iterator
- // boost::any::placeholder ==> any_iterator_abstract_base
- // boost::any::holder ==> any_iterator_wrapper
- //
- template<
- class Value,
- class CategoryOrTraversal,
- class Reference = Value&,
- class Difference = std::ptrdiff_t
- >
- class any_iterator :
- public boost::iterator_facade<
- any_iterator<
- Value,
- CategoryOrTraversal,
- Reference,
- Difference
- >,
- Value,
- CategoryOrTraversal,
- Reference,
- Difference
- >
- {
-
- // We make every other any_iterator our friend. This is needed only for
- // the conversion from non-const to const, but there should be no harm
- // in being overly friendly here.
- template<
- class OtherValue,
- class OtherCategoryOrTraversal,
- class OtherReference,
- class OtherDifference
- >
- friend class any_iterator;
-
- public:
- typedef typename boost::iterator_category_to_traversal<CategoryOrTraversal>::type Traversal;
-
- private:
-
- struct enabler{}; // a private type avoids misuse
- struct disabler{}; // a private type avoids misuse
-
- // The type-erasing abstract base class, that is, the type that the
- // impl-pointer points to.
- typedef
- detail::any_iterator_abstract_base<
- Value,
- Traversal,
- Reference,
- Difference
- > abstract_base_type;
-
- typedef
- boost::iterator_facade<
- any_iterator<
- Value,
- CategoryOrTraversal,
- Reference,
- Difference
- >,
- Value,
- CategoryOrTraversal,
- Reference,
- Difference
- > super_type;
-
- // The two types that this any_iterator type recognizes as const versions of
- // itself.
- typedef any_iterator<
- typename boost::add_const<Value>::type,
- CategoryOrTraversal,
- typename detail::make_iterator_reference_const<Reference>::type,
- Difference
- > const_type_with_const_value_type;
- //
- typedef any_iterator<
- typename boost::remove_const<Value>::type,
- CategoryOrTraversal,
- typename detail::make_iterator_reference_const<Reference>::type,
- Difference
- > const_type_with_non_const_value_type;
-
- public:
-
- any_iterator() : m_pointer_to_impl(NULL)
- {}
-
- any_iterator(any_iterator const & rhs) : super_type(rhs)
- {
- if( rhs.m_pointer_to_impl )
- {
- m_pointer_to_impl = rhs.m_pointer_to_impl->clone();
- }
- else
- {
- m_pointer_to_impl = NULL;
- }
- }
-
- any_iterator& operator=(any_iterator const & rhs)
- {
- if(this != &rhs)
- {
- any_iterator tmp(rhs);
- swap(tmp);
- }
-
- return *this;
- }
-
- // Constructor from wrapped iterator. The static assert defines the
- // granularity of the type erasure.
- //
- // NOTE 1: If you want to make the constructor non-explicit, then you
- // really must replace the static assert with an enable_if, or else
- // metafunctions such as is_convertible will say the wrong thing.
- // However, if you use enable_if here, you'll descend into the ugly
- // mess described in the last section of my article at
- // http://www.artima.com/cppsource/type_erasure.html.
- //
- // NOTE 2: If you remove the restriction that the wrapped iterator
- // cannot be an any_iterator, you must ensure that the conversions from
- // non-const to const any_iterators still work correctly. If you don't
- // do anything, you will end up with wrapping instead of conversion.
- //
- template<class WrappedIterator>
- explicit any_iterator(
- WrappedIterator const & wrapped_iterator,
- typename boost::disable_if<
- detail::is_any_iterator<WrappedIterator>,
- disabler
- >::type = disabler()
- )
- {
- //////////////////////////////////////////////////////////////////
- //
- // *** Message to Client ***
- //
- // If this static assert fires, you are trying to construct the any_iterator
- // from a concrete iterator that is not suitable for the type erasure that
- // the any_iterator provides.
- //
- BOOST_STATIC_ASSERT((detail::is_iterator_type_erasure_compatible<WrappedIterator, any_iterator>::type::value));
-
- typedef
- detail::any_iterator_wrapper<
- WrappedIterator,
- Value,
- Traversal,
- Reference,
- Difference
- > wrapper_type;
-
- m_pointer_to_impl = wrapper_type::create(wrapped_iterator);
- }
-
- // Assignment from wrapped iterator. The enable_if condition defines
- // the granularity of the type erasure.
- //
- // NOTE: If you remove the restriction that the wrapped iterator
- // cannot be an any_iterator, you must ensure that the conversions from
- // non-const to const any_iterators still work correctly. If you don't
- // do anything, you will end up with wrapping instead of conversion.
- template<class WrappedIterator>
- typename boost::enable_if<
- boost::mpl::and_<
- detail::is_iterator_type_erasure_compatible<WrappedIterator, any_iterator>,
- boost::mpl::not_<detail::is_any_iterator<WrappedIterator> >
- >,
- any_iterator
- >::type &
- operator=(WrappedIterator const & wrapped_iterator)
- {
- any_iterator tmp(wrapped_iterator);
- swap(tmp);
- return *this;
- }
-
- // Conversion from non-const to const any_iterator. There are two versions.
- // This first one applies if the target has const value type.
- operator const_type_with_const_value_type () const
- {
- const_type_with_const_value_type conversion_result;
- if( m_pointer_to_impl )
- {
- conversion_result.m_pointer_to_impl = m_pointer_to_impl->make_const_clone_with_const_value_type();
- }
- return conversion_result;
- }
-
- // Conversion from non-const to const any_iterator. There are two versions.
- // This second one applies if the target has non-const value type.
- operator const_type_with_non_const_value_type () const
- {
- const_type_with_non_const_value_type conversion_result;
- if( m_pointer_to_impl )
- {
- conversion_result.m_pointer_to_impl = m_pointer_to_impl->make_const_clone_with_non_const_value_type();
- }
- return conversion_result;
- }
-
- // Conversion to weaker traversal type
- template<typename TargetTraversal>
- operator any_iterator<
- Value,
- TargetTraversal,
- Reference,
- Difference
- >
- () const
- {
- //////////////////////////////////////////////////////////////////
- //
- // *** Message to Client ***
- //
- // If this static assert fires, you are trying to convert between two
- // any_iterator types that are not suitable for conversion.
- //
- BOOST_STATIC_ASSERT((
- boost::is_base_of<
- typename boost::iterator_category_to_traversal<TargetTraversal>::type,
- typename boost::iterator_category_to_traversal<CategoryOrTraversal>::type
- >::type::value
- ));
-
- any_iterator<
- Value,
- TargetTraversal,
- Reference,
- Difference
- > conversion_result;
-
- if( m_pointer_to_impl )
- {
- typename boost::iterator_category_to_traversal<TargetTraversal>::type* funcSelector = NULL;
- conversion_result.m_pointer_to_impl = make_traversal_converted_version(funcSelector);
- }
- return conversion_result;
- }
-
- ~any_iterator()
- {
- delete m_pointer_to_impl;
- }
-
- private:
-
- friend class boost::iterator_core_access;
-
- Reference dereference() const
- {
- return m_pointer_to_impl->dereference();
- }
-
- bool equal(any_iterator const & rhs) const
- {
- if( m_pointer_to_impl == rhs.m_pointer_to_impl )
- {
- return true;
- }
-
- if( m_pointer_to_impl == NULL || rhs.m_pointer_to_impl == NULL )
- {
- return false;
- }
-
- //////////////////////////////////////////////////////////////////
- //
- // *** Message to Client ***
- //
- // If the next line does not compile, you are trying to compare
- // two iterators for equality whose categories do not allow that
- // comparison.
- return m_pointer_to_impl->equal(*(rhs.m_pointer_to_impl));
- }
-
- void increment()
- {
- m_pointer_to_impl->increment();
- }
-
- void decrement()
- {
- //////////////////////////////////////////////////////////////////
- //
- // *** Message to Client ***
- //
- // If the next line does not compile, you are trying to decrement
- // an iterator whose category does not allow decrementing.
- return m_pointer_to_impl->decrement();
- }
-
- void advance(Difference n)
- {
- //////////////////////////////////////////////////////////////////
- //
- // *** Message to Client ***
- //
- // If the next line does not compile, you are trying to use an
- // operation that is defined only for random access iterators
- // on an iterator that is not random access.
- m_pointer_to_impl->advance(n);
- }
-
- Difference distance_to(any_iterator const & other) const
- {
- //////////////////////////////////////////////////////////////////
- //
- // *** Message to Client ***
- //
- // If the next line does not compile, you are trying to use an
- // operation that is defined only for random access iterators
- // on an iterator that is not random access.
- return m_pointer_to_impl->distance_to(*(other.m_pointer_to_impl));
- }
-
- any_iterator& swap(any_iterator& other)
- {
- // NOTE: iterator_facade doesn't have a swap method, so no call
- // to base class here.
- std::swap(m_pointer_to_impl, other.m_pointer_to_impl);
- return *this;
- }
-
- detail::any_iterator_abstract_base<
- Value,
- boost::incrementable_traversal_tag,
- Reference,
- Difference
- >* make_traversal_converted_version(boost::incrementable_traversal_tag* funcSelector) const
- {
- return m_pointer_to_impl->make_incrementable_version();
- }
-
- detail::any_iterator_abstract_base<
- Value,
- boost::single_pass_traversal_tag,
- Reference,
- Difference
- >* make_traversal_converted_version(boost::single_pass_traversal_tag* funcSelector) const
- {
- return m_pointer_to_impl->make_single_pass_version();
- }
-
- detail::any_iterator_abstract_base<
- Value,
- boost::forward_traversal_tag,
- Reference,
- Difference
- >* make_traversal_converted_version(boost::forward_traversal_tag* funcSelector) const
- {
- return m_pointer_to_impl->make_forward_version();
- }
-
- detail::any_iterator_abstract_base<
- Value,
- boost::bidirectional_traversal_tag,
- Reference,
- Difference
- >* make_traversal_converted_version(boost::bidirectional_traversal_tag* funcSelector) const
- {
- return m_pointer_to_impl->make_bidirectional_version();
- }
-
- abstract_base_type* m_pointer_to_impl;
-
- };
-
- // Metafunction that takes an iterator and returns an any_iterator with the same
- // traits.
- template<class iterator>
- struct make_any_iterator_type
- {
- typedef
- any_iterator<
- typename boost::iterator_value<iterator>::type,
- typename boost::iterator_category<iterator>::type,
- typename boost::iterator_reference<iterator>::type,
- typename boost::iterator_difference<iterator>::type
- > type;
- };
-
-} // end namespace IteratorTypeErasure
-
-#endif // ANY_ITERATOR_01102007TMB_HPP


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk