Boost C++ Libraries Boost.Bimap Home Libraries People FAQ More

PrevUpHomeNext

vector_adaptor.hpp

Go to the documentation of this file.
00001 // Boost.Bimap
00002 //
00003 // Copyright (c) 2006-2007 Matias Capeletto
00004 //
00005 // Distributed under the Boost Software License, Version 1.0.
00006 // (See accompanying file LICENSE_1_0.txt or copy at
00007 // http://www.boost.org/LICENSE_1_0.txt)
00008 
00009 /// \file container_adaptor/vector_adaptor.hpp
00010 /// \brief Container adaptor to easily build a std::vector signature compatible container.
00011 
00012 #ifndef BOOST_BIMAP_CONTAINER_ADAPTOR_VECTOR_ADAPTOR_HPP
00013 #define BOOST_BIMAP_CONTAINER_ADAPTOR_VECTOR_ADAPTOR_HPP
00014 
00015 #if defined(_MSC_VER) && (_MSC_VER>=1200)
00016 #pragma once
00017 #endif
00018 
00019 #include <boost/config.hpp>
00020 
00021 #include <boost/bimap/container_adaptor/sequence_container_adaptor.hpp>
00022 #include <boost/mpl/aux_/na.hpp>
00023 #include <boost/mpl/vector.hpp>
00024 
00025 namespace boost {
00026 namespace bimaps {
00027 namespace container_adaptor {
00028 
00029 /// \brief Container adaptor to easily build a std::vector signature compatible container.
00030 
00031 template
00032 <
00033     class Base,
00034 
00035     class Iterator,
00036     class ConstIterator,
00037     class ReverseIterator,
00038     class ConstReverseIterator,
00039 
00040     class IteratorToBaseConverter          = ::boost::mpl::na,
00041     class IteratorFromBaseConverter        = ::boost::mpl::na,
00042     class ReverseIteratorFromBaseConverter = ::boost::mpl::na,
00043     class ValueToBaseConverter             = ::boost::mpl::na,
00044     class ValueFromBaseConverter           = ::boost::mpl::na,
00045 
00046     class FunctorsFromDerivedClasses = mpl::vector<>
00047 >
00048 class vector_adaptor :
00049 
00050     public ::boost::bimaps::container_adaptor::sequence_container_adaptor
00051     <
00052         Base,
00053         Iterator, ConstIterator, ReverseIterator, ConstReverseIterator,
00054         IteratorToBaseConverter, IteratorFromBaseConverter,
00055         ReverseIteratorFromBaseConverter,
00056         ValueToBaseConverter, ValueFromBaseConverter,
00057         FunctorsFromDerivedClasses
00058     >
00059 {
00060 
00061     typedef ::boost::bimaps::container_adaptor::sequence_container_adaptor
00062     <
00063         Base,
00064         Iterator, ConstIterator, ReverseIterator, ConstReverseIterator,
00065         IteratorToBaseConverter, IteratorFromBaseConverter,
00066         ReverseIteratorFromBaseConverter,
00067         ValueToBaseConverter, ValueFromBaseConverter,
00068         FunctorsFromDerivedClasses
00069 
00070     > base_;
00071 
00072     // Access -----------------------------------------------------------------
00073 
00074     public:
00075 
00076     vector_adaptor() {}
00077 
00078     explicit vector_adaptor(Base & c) :
00079         base_(c) {}
00080 
00081     protected:
00082 
00083     typedef vector_adaptor vector_adaptor_;
00084 
00085     // Interface --------------------------------------------------------------
00086 
00087     public:
00088 
00089     BOOST_DEDUCED_TYPENAME base_::size_type capacity() const
00090     {
00091         return this->base().capacity();
00092     }
00093 
00094     void reserve(BOOST_DEDUCED_TYPENAME base_::size_type m)
00095     {
00096         this->base().resize(m);
00097     }
00098 
00099     void resize(BOOST_DEDUCED_TYPENAME base_::size_type n,
00100                 BOOST_DEDUCED_TYPENAME ::boost::call_traits<
00101                     BOOST_DEDUCED_TYPENAME base_::value_type >::param_type x =
00102                         BOOST_DEDUCED_TYPENAME base_::value_type())
00103     {
00104         this->base().resize(n,
00105             this->template functor<BOOST_DEDUCED_TYPENAME base_::value_to_base>()(x)
00106         );
00107     }
00108 
00109     BOOST_DEDUCED_TYPENAME base_::const_reference
00110         operator[](BOOST_DEDUCED_TYPENAME base_::size_type n) const
00111     {
00112         return this->base().operator[](n);
00113     }
00114 
00115     BOOST_DEDUCED_TYPENAME base_::const_reference
00116         at(BOOST_DEDUCED_TYPENAME base_::size_type n) const
00117     {
00118         return this->base().at(n);
00119     }
00120 
00121     BOOST_DEDUCED_TYPENAME base_::reference
00122         operator[](BOOST_DEDUCED_TYPENAME base_::size_type n)
00123     {
00124         return this->base().operator[](n);
00125     }
00126 
00127     BOOST_DEDUCED_TYPENAME base_::reference
00128         at(BOOST_DEDUCED_TYPENAME base_::size_type n)
00129     {
00130         return this->base().at(n);
00131     }
00132 };
00133 
00134 
00135 } // namespace container_adaptor
00136 } // namespace bimaps
00137 } // namespace boost
00138 
00139 
00140 #endif // BOOST_BIMAP_CONTAINER_ADAPTOR_VECTOR_ADAPTOR_HPP
00141 
00142 
Copyright 2006 Matias Capeletto

PrevUpHomeNext