diff --git a/doc/shared_container_iterator.html b/doc/shared_container_iterator.html deleted file mode 100644 index 56ae221..0000000 --- a/doc/shared_container_iterator.html +++ /dev/null @@ -1,333 +0,0 @@ - - -
- - - --The purpose of the shared container iterator is to attach the lifetime -of a container to the lifetime of its iterators. In other words, -the container will be deleted after the last iterator is destroyed. -The shared container iterator is typically used to implement functions -that return iterators over a -range of objects that will only be needed for the lifetime of -the iterators. By returning a pair of shared iterators from a -function, the callee can ensure that the underlying container's -lifetime will be properly managed. -
-The shared container iterator augments an iterator into a shared -container with a reference counted pointer to the container. -Assuming no other references exist to the container, it will be -destroyed when the last shared container iterator is destroyed. -In all other ways, the shared container iterator -behaves the same as its base iterator. - - -
-namespace boost { - template <typename Container> - class shared_container_iterator_generator; - - template <typename Container> - typename shared_container_iterator_generator<Container>::type - make_shared_container_iterator(typename Container::iterator base, - boost::shared_ptr<Container> const& container); - - std::pair< - typename shared_container_iterator_generator<Container>::type, - typename shared_container_iterator_generator<Container>::type - > - make_shared_container_range(boost::shared_ptr<Container> const& container); - - -} -- -
-template <typename Container> -class shared_container_iterator_generator -{ -public: - typedef iterator_adaptor<...> type; -}; -- -
-The following example illustrates how to use the -shared_counter_iterator_generator to create an iterator that -regulates the lifetime of a reference counted std::vector. -Though the original shared_ptr to the vector ceases to exist, the -shared_counter_iterators extend the lifetime of the container. -
-shared_iterator_example1.cpp: -
-#include "shared_container_iterator.hpp" -#include "boost/shared_ptr.hpp" -#include <algorithm> -#include <iostream> -#include <vector> - -typedef shared_container_iterator_generator< std::vector<int> >::type iterator; - - -void set_range(iterator& i, iterator& end) { - - boost::shared_ptr< std::vector<int> > ints(new std::vector<int>()); - - ints->push_back(0); - ints->push_back(1); - ints->push_back(2); - ints->push_back(3); - ints->push_back(4); - ints->push_back(5); - - i = iterator(ints->begin(),ints); - end = iterator(ints->end(),ints); -} - - -int main() { - - iterator i,end; - - set_range(i,end); - - std::copy(i,end,std::ostream_iterator<int>(std::cout,",")); - std::cout.put('\n'); - - return 0; -} -- -The output from this part is: -
-0,1,2,3,4,5, -- -
Parameter | Description | -
---|---|
Container | -The type of the container that we wish to iterate over. It must be -a model of the -Container -concept. - | -
-shared_container_iterator_generator::type(Container::iterator const& it, - boost::shared_ptr<Container> const& container) -- -
-
- - -
-template <typename Container> -typename shared_container_iterator_generator<AdaptableUnaryFunction,BaseIterator>::type -make_shared_container_iterator(Container::iterator base, - boost::shared_ptr<Container> const& container) -- -This function provides an alternative to using the shared container -iterator type generator to create the iterator type before -construction. Using the object generator, a shared container iterator -can be created and passed to a function without explicitly specifying -its type. - -
-shared_iterator_example2.cpp: - -
-#include "shared_container_iterator.hpp" -#include "boost/shared_ptr.hpp" -#include <algorithm> -#include <iterator> -#include <iostream> -#include <vector> - - -template <typename Iterator> -void print_range_nl (Iterator begin, Iterator end) { - typedef typename std::iterator_traits<Iterator>::value_type val; - std::copy(begin,end,std::ostream_iterator<val>(std::cout,",")); - std::cout.put('\n'); -} - - -int main() { - - typedef boost::shared_ptr< std::vector<int> > ints_t; - { - ints_t ints(new std::vector<int>()); - - ints->push_back(0); - ints->push_back(1); - ints->push_back(2); - ints->push_back(3); - ints->push_back(4); - ints->push_back(5); - - print_range_nl(make_shared_container_iterator(ints->begin(),ints), - make_shared_container_iterator(ints->end(),ints)); - } - - - - return 0; -} -- -Observe that the shared_container_iterator type is never -explicitly named. The output from this example is the same as the previous. - -
-template <typename Container> -std::pair< - typename shared_container_iterator_generator<Container>::type, - typename shared_container_iterator_generator<Container>::type -> -make_shared_container_range(boost::shared_ptr<Container> const& container); -- -Class shared_container_iterator is meant primarily to return -via iterators a range of values that we can guarantee will be alive as -long as the iterators are. This is a convenience -function to do just that. This function is equivalent to - -
-std::make_pair(make_shared_container_iterator(container->begin(),container), - make_shared_container_iterator(container->end(),container)); -- -
-shared_iterator_example3.cpp: - -
-#include "shared_container_iterator.hpp" -#include "boost/shared_ptr.hpp" -#include "boost/tuple/tuple.hpp" // for boost::tie -#include <algorithm> // for std::copy -#include <iostream> -#include <vector> - - -typedef shared_container_iterator_generator< std::vector<int> >::type - function_iterator; - -std::pair<function_iterator,function_iterator> -return_range() { - boost::shared_ptr< std::vector<int> > range(new std::vector<int>()); - range->push_back(0); - range->push_back(1); - range->push_back(2); - range->push_back(3); - range->push_back(4); - range->push_back(5); - return make_shared_container_range(range); -} - - -int main() { - - - function_iterator i,end; - - boost::tie(i,end) = return_range(); - - std::copy(i,end,std::ostream_iterator<int>(std::cout,",")); - std::cout.put('\n'); - - return 0; -} -- -Though the range object only lives for the duration of the -return_range call, the reference counted -std::vector will live until i and end -are both destroyed. The output from this example is the same as -the previous two. - - -
© Copyright Ronald Garcia 2002. Permission to copy, use, -modify, sell and distribute this document is granted provided this copyright -notice appears in all copies. This document is provided "as is" -without express or implied warranty, and with no claim as to its suitability for -any purpose.
- - - - diff --git a/example/shared_iterator_example1.cpp b/example/shared_iterator_example1.cpp deleted file mode 100644 index 1aee968..0000000 --- a/example/shared_iterator_example1.cpp +++ /dev/null @@ -1,41 +0,0 @@ -// (C) Copyright Ronald Garcia 2002. 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. - -#include "boost/shared_container_iterator.hpp" -#include "boost/shared_ptr.hpp" -#include