Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/container/static_vector.hpp @ 101:c530137014c0
Update Boost headers (1.58.0)
author | Chris Cannam |
---|---|
date | Mon, 07 Sep 2015 11:12:49 +0100 |
parents | 2665513ce2d3 |
children |
line wrap: on
line diff
--- a/DEPENDENCIES/generic/include/boost/container/static_vector.hpp Fri Sep 04 12:01:02 2015 +0100 +++ b/DEPENDENCIES/generic/include/boost/container/static_vector.hpp Mon Sep 07 11:12:49 2015 +0100 @@ -2,6 +2,7 @@ // // Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland. // Copyright (c) 2011-2013 Andrew Hundt. +// Copyright (c) 2013-2014 Ion Gaztanaga // // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -10,17 +11,28 @@ #ifndef BOOST_CONTAINER_STATIC_VECTOR_HPP #define BOOST_CONTAINER_STATIC_VECTOR_HPP -#if defined(_MSC_VER) +#ifndef BOOST_CONFIG_HPP +# include <boost/config.hpp> +#endif + +#if defined(BOOST_HAS_PRAGMA_ONCE) # pragma once #endif #include <boost/container/detail/config_begin.hpp> +#include <boost/container/detail/workaround.hpp> +#include <boost/container/detail/type_traits.hpp> +#include <boost/container/vector.hpp> -#include <boost/container/vector.hpp> -#include <boost/aligned_storage.hpp> +#include <cstddef> +#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) +#include <initializer_list> +#endif namespace boost { namespace container { +#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED + namespace container_detail { template<class T, std::size_t N> @@ -29,78 +41,77 @@ public: typedef T value_type; - static_storage_allocator() BOOST_CONTAINER_NOEXCEPT + static_storage_allocator() BOOST_NOEXCEPT_OR_NOTHROW {} - static_storage_allocator(const static_storage_allocator &) BOOST_CONTAINER_NOEXCEPT + static_storage_allocator(const static_storage_allocator &) BOOST_NOEXCEPT_OR_NOTHROW {} - static_storage_allocator & operator=(const static_storage_allocator &) BOOST_CONTAINER_NOEXCEPT + static_storage_allocator & operator=(const static_storage_allocator &) BOOST_NOEXCEPT_OR_NOTHROW {} - T* internal_storage() const BOOST_CONTAINER_NOEXCEPT + T* internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW { return const_cast<T*>(static_cast<const T*>(static_cast<const void*>(&storage))); } - T* internal_storage() BOOST_CONTAINER_NOEXCEPT + T* internal_storage() BOOST_NOEXCEPT_OR_NOTHROW { return static_cast<T*>(static_cast<void*>(&storage)); } static const std::size_t internal_capacity = N; typedef boost::container::container_detail::version_type<static_storage_allocator, 0> version; - friend bool operator==(const static_storage_allocator &, const static_storage_allocator &) BOOST_CONTAINER_NOEXCEPT + friend bool operator==(const static_storage_allocator &, const static_storage_allocator &) BOOST_NOEXCEPT_OR_NOTHROW { return false; } - friend bool operator!=(const static_storage_allocator &, const static_storage_allocator &) BOOST_CONTAINER_NOEXCEPT + friend bool operator!=(const static_storage_allocator &, const static_storage_allocator &) BOOST_NOEXCEPT_OR_NOTHROW { return true; } private: - typename boost::aligned_storage - <sizeof(T)*N, boost::alignment_of<T>::value>::type storage; + typename aligned_storage<sizeof(T)*N, alignment_of<T>::value>::type storage; }; } //namespace container_detail { -/** - * @defgroup static_vector_non_member static_vector non-member functions - */ +#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED -/** - * @brief A variable-size array container with fixed capacity. - * - * static_vector is a sequence container like boost::container::vector with contiguous storage that can - * change in size, along with the static allocation, low overhead, and fixed capacity of boost::array. - * - * A static_vector is a sequence that supports random access to elements, constant time insertion and - * removal of elements at the end, and linear time insertion and removal of elements at the beginning or - * in the middle. The number of elements in a static_vector may vary dynamically up to a fixed capacity - * because elements are stored within the object itself similarly to an array. However, objects are - * initialized as they are inserted into static_vector unlike C arrays or std::array which must construct - * all elements on instantiation. The behavior of static_vector enables the use of statically allocated - * elements in cases with complex object lifetime requirements that would otherwise not be trivially - * possible. - * - * @par Error Handling - * Insertion beyond the capacity result in throwing std::bad_alloc() if exceptions are enabled or - * calling throw_bad_alloc() if not enabled. - * - * std::out_of_range is thrown if out of bound access is performed in `at()` if exceptions are - * enabled, throw_out_of_range() if not enabled. - * - * @tparam Value The type of element that will be stored. - * @tparam Capacity The maximum number of elements static_vector can store, fixed at compile time. - */ +//! +//!@brief A variable-size array container with fixed capacity. +//! +//!static_vector is a sequence container like boost::container::vector with contiguous storage that can +//!change in size, along with the static allocation, low overhead, and fixed capacity of boost::array. +//! +//!A static_vector is a sequence that supports random access to elements, constant time insertion and +//!removal of elements at the end, and linear time insertion and removal of elements at the beginning or +//!in the middle. The number of elements in a static_vector may vary dynamically up to a fixed capacity +//!because elements are stored within the object itself similarly to an array. However, objects are +//!initialized as they are inserted into static_vector unlike C arrays or std::array which must construct +//!all elements on instantiation. The behavior of static_vector enables the use of statically allocated +//!elements in cases with complex object lifetime requirements that would otherwise not be trivially +//!possible. +//! +//!@par Error Handling +//! Insertion beyond the capacity result in throwing std::bad_alloc() if exceptions are enabled or +//! calling throw_bad_alloc() if not enabled. +//! +//! std::out_of_range is thrown if out of bound access is performed in <code>at()</code> if exceptions are +//! enabled, throw_out_of_range() if not enabled. +//! +//!@tparam Value The type of element that will be stored. +//!@tparam Capacity The maximum number of elements static_vector can store, fixed at compile time. template <typename Value, std::size_t Capacity> class static_vector : public vector<Value, container_detail::static_storage_allocator<Value, Capacity> > { - typedef vector<Value, container_detail::static_storage_allocator<Value, Capacity> > base_t; + #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED + typedef vector<Value, container_detail::static_storage_allocator<Value, Capacity> > base_t; - BOOST_COPYABLE_AND_MOVABLE(static_vector) + BOOST_COPYABLE_AND_MOVABLE(static_vector) template<class U, std::size_t OtherCapacity> friend class static_vector; + #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED + public: //! @brief The type of elements stored in the container. typedef typename base_t::value_type value_type; @@ -132,7 +143,7 @@ //! //! @par Complexity //! Constant O(1). - static_vector() BOOST_CONTAINER_NOEXCEPT + static_vector() BOOST_NOEXCEPT_OR_NOTHROW : base_t() {} @@ -143,7 +154,7 @@ //! @param count The number of values which will be contained in the container. //! //! @par Throws - //! If Value's default constructor throws. + //! If Value's value initialization throws. //! //! @par Complexity //! Linear O(N). @@ -153,12 +164,12 @@ //! @pre <tt>count <= capacity()</tt> //! - //! @brief Constructs a static_vector containing count value initialized values. + //! @brief Constructs a static_vector containing count default initialized values. //! //! @param count The number of values which will be contained in the container. //! //! @par Throws - //! If Value's default constructor throws. + //! If Value's default initialization throws. //! //! @par Complexity //! Linear O(N). @@ -204,6 +215,24 @@ : base_t(first, last) {} +#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) + //! @pre + //! @li <tt>distance(il.begin(), il.end()) <= capacity()</tt> + //! + //! @brief Constructs a static_vector containing copy of a range <tt>[il.begin(), il.end())</tt>. + //! + //! @param il std::initializer_list with values to initialize vector. + //! + //! @par Throws + //! If Value's constructor taking a dereferenced std::initializer_list throws. + //! + //! @par Complexity + //! Linear O(N). + static_vector(std::initializer_list<value_type> il) + : base_t(il) + {} +#endif + //! @brief Constructs a copy of other static_vector. //! //! @param other The static_vector which content will be copied to this one. @@ -229,7 +258,40 @@ //! @par Complexity //! Linear O(N). template <std::size_t C> - static_vector(static_vector<value_type, C> const& other) : base_t(other) {} + static_vector(static_vector<value_type, C> const& other) + : base_t(other) + {} + + //! @brief Move constructor. Moves Values stored in the other static_vector to this one. + //! + //! @param other The static_vector which content will be moved to this one. + //! + //! @par Throws + //! @li If \c has_nothrow_move<Value>::value is \c true and Value's move constructor throws. + //! @li If \c has_nothrow_move<Value>::value is \c false and Value's copy constructor throws. + //! + //! @par Complexity + //! Linear O(N). + static_vector(BOOST_RV_REF(static_vector) other) + : base_t(BOOST_MOVE_BASE(base_t, other)) + {} + + //! @pre <tt>other.size() <= capacity()</tt> + //! + //! @brief Move constructor. Moves Values stored in the other static_vector to this one. + //! + //! @param other The static_vector which content will be moved to this one. + //! + //! @par Throws + //! @li If \c has_nothrow_move<Value>::value is \c true and Value's move constructor throws. + //! @li If \c has_nothrow_move<Value>::value is \c false and Value's copy constructor throws. + //! + //! @par Complexity + //! Linear O(N). + template <std::size_t C> + static_vector(BOOST_RV_REF_BEG static_vector<value_type, C> BOOST_RV_REF_END other) + : base_t(BOOST_MOVE_BASE(typename static_vector<value_type BOOST_MOVE_I C>::base_t, other)) + {} //! @brief Copy assigns Values stored in the other static_vector to this one. //! @@ -242,10 +304,23 @@ //! Linear O(N). static_vector & operator=(BOOST_COPY_ASSIGN_REF(static_vector) other) { - base_t::operator=(static_cast<base_t const&>(other)); - return *this; + return static_cast<static_vector&>(base_t::operator=(static_cast<base_t const&>(other))); } +#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) + //! @brief Copy assigns Values stored in std::initializer_list to *this. + //! + //! @param il The std::initializer_list which content will be copied to this one. + //! + //! @par Throws + //! If Value's copy constructor or copy assignment throws. + //! + //! @par Complexity + //! Linear O(N). + static_vector & operator=(std::initializer_list<value_type> il) + { return static_cast<static_vector&>(base_t::operator=(il)); } +#endif + //! @pre <tt>other.size() <= capacity()</tt> //! //! @brief Copy assigns Values stored in the other static_vector to this one. @@ -258,62 +333,25 @@ //! @par Complexity //! Linear O(N). template <std::size_t C> -// TEMPORARY WORKAROUND -#if defined(BOOST_NO_RVALUE_REFERENCES) - static_vector & operator=(::boost::rv< static_vector<value_type, C> > const& other) -#else static_vector & operator=(static_vector<value_type, C> const& other) -#endif { - base_t::operator=(static_cast<static_vector<value_type, C> const&>(other)); - return *this; + return static_cast<static_vector&>(base_t::operator= + (static_cast<typename static_vector<value_type, C>::base_t const&>(other))); } - //! @brief Move constructor. Moves Values stored in the other static_vector to this one. - //! - //! @param other The static_vector which content will be moved to this one. - //! - //! @par Throws - //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor throws. - //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor throws. - //! - //! @par Complexity - //! Linear O(N). - static_vector(BOOST_RV_REF(static_vector) other) - : base_t(boost::move(static_cast<base_t&>(other))) - {} - - //! @pre <tt>other.size() <= capacity()</tt> - //! - //! @brief Move constructor. Moves Values stored in the other static_vector to this one. - //! - //! @param other The static_vector which content will be moved to this one. - //! - //! @par Throws - //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor throws. - //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor throws. - //! - //! @par Complexity - //! Linear O(N). - template <std::size_t C> - static_vector(BOOST_RV_REF_BEG static_vector<value_type, C> BOOST_RV_REF_END other) - : base_t(boost::move(static_cast<typename static_vector<value_type, C>::base_t&>(other))) - {} - //! @brief Move assignment. Moves Values stored in the other static_vector to this one. //! //! @param other The static_vector which content will be moved to this one. //! //! @par Throws - //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws. - //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws. + //! @li If \c has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws. + //! @li If \c has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws. //! //! @par Complexity //! Linear O(N). static_vector & operator=(BOOST_RV_REF(static_vector) other) { - base_t::operator=(boost::move(static_cast<base_t&>(other))); - return *this; + return static_cast<static_vector&>(base_t::operator=(BOOST_MOVE_BASE(base_t, other))); } //! @pre <tt>other.size() <= capacity()</tt> @@ -323,16 +361,16 @@ //! @param other The static_vector which content will be moved to this one. //! //! @par Throws - //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws. - //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws. + //! @li If \c has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws. + //! @li If \c has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws. //! //! @par Complexity //! Linear O(N). template <std::size_t C> static_vector & operator=(BOOST_RV_REF_BEG static_vector<value_type, C> BOOST_RV_REF_END other) { - base_t::operator=(boost::move(static_cast<typename static_vector<value_type, C>::base_t&>(other))); - return *this; + return static_cast<static_vector&>(base_t::operator= + (BOOST_MOVE_BASE(typename static_vector<value_type BOOST_MOVE_I C>::base_t, other))); } #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -351,8 +389,8 @@ //! @param other The static_vector which content will be swapped with this one's content. //! //! @par Throws - //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws, - //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws, + //! @li If \c has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws, + //! @li If \c has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws, //! //! @par Complexity //! Linear O(N). @@ -365,8 +403,8 @@ //! @param other The static_vector which content will be swapped with this one's content. //! //! @par Throws - //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws, - //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws, + //! @li If \c has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws, + //! @li If \c has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws, //! //! @par Complexity //! Linear O(N). @@ -381,7 +419,7 @@ //! @param count The number of elements which will be stored in the container. //! //! @par Throws - //! If Value's default constructor throws. + //! If Value's value initialization throws. //! //! @par Complexity //! Linear O(N). @@ -395,7 +433,7 @@ //! @param count The number of elements which will be stored in the container. //! //! @par Throws - //! If Value's default constructor throws. + //! If Value's default initialization throws. //! //! @par Complexity //! Linear O(N). @@ -430,7 +468,7 @@ //! //! @par Complexity //! Linear O(N). - void reserve(size_type count) BOOST_CONTAINER_NOEXCEPT; + void reserve(size_type count) BOOST_NOEXCEPT_OR_NOTHROW; //! @pre <tt>size() < capacity()</tt> //! @@ -470,13 +508,13 @@ void pop_back(); //! @pre - //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>. + //! @li \c p must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>. //! @li <tt>size() < capacity()</tt> //! - //! @brief Inserts a copy of element at position. + //! @brief Inserts a copy of element at p. //! - //! @param position The position at which the new value will be inserted. - //! @param value The value used to copy construct the new element. + //! @param p The position at which the new value will be inserted. + //! @param value The value used to copy construct the new element. //! //! @par Throws //! @li If Value's copy constructor or copy assignment throws @@ -484,33 +522,33 @@ //! //! @par Complexity //! Constant or linear. - iterator insert(iterator position, value_type const& value); + iterator insert(const_iterator p, value_type const& value); //! @pre - //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>. + //! @li \c p must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>. //! @li <tt>size() < capacity()</tt> //! - //! @brief Inserts a move-constructed element at position. + //! @brief Inserts a move-constructed element at p. //! - //! @param position The position at which the new value will be inserted. - //! @param value The value used to move construct the new element. + //! @param p The position at which the new value will be inserted. + //! @param value The value used to move construct the new element. //! //! @par Throws //! If Value's move constructor or move assignment throws. //! //! @par Complexity //! Constant or linear. - iterator insert(iterator position, BOOST_RV_REF(value_type) value); + iterator insert(const_iterator p, BOOST_RV_REF(value_type) value); //! @pre - //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>. + //! @li \c p must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>. //! @li <tt>size() + count <= capacity()</tt> //! - //! @brief Inserts a count copies of value at position. + //! @brief Inserts a count copies of value at p. //! - //! @param position The position at which new elements will be inserted. - //! @param count The number of new elements which will be inserted. - //! @param value The value used to copy construct new elements. + //! @param p The position at which new elements will be inserted. + //! @param count The number of new elements which will be inserted. + //! @param value The value used to copy construct new elements. //! //! @par Throws //! @li If Value's copy constructor or copy assignment throws. @@ -518,18 +556,18 @@ //! //! @par Complexity //! Linear O(N). - iterator insert(iterator position, size_type count, value_type const& value); + iterator insert(const_iterator p, size_type count, value_type const& value); //! @pre - //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>. + //! @li \c p must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>. //! @li <tt>distance(first, last) <= capacity()</tt> //! @li \c Iterator must meet the \c ForwardTraversalIterator concept. //! - //! @brief Inserts a copy of a range <tt>[first, last)</tt> at position. + //! @brief Inserts a copy of a range <tt>[first, last)</tt> at p. //! - //! @param position The position at which new elements will be inserted. - //! @param first The iterator to the first element of a range used to construct new elements. - //! @param last The iterator to the one after the last element of a range used to construct new elements. + //! @param p The position at which new elements will be inserted. + //! @param first The iterator to the first element of a range used to construct new elements. + //! @param last The iterator to the one after the last element of a range used to construct new elements. //! //! @par Throws //! @li If Value's constructor and assignment taking a dereferenced \c Iterator. @@ -538,20 +576,38 @@ //! @par Complexity //! Linear O(N). template <typename Iterator> - iterator insert(iterator position, Iterator first, Iterator last); + iterator insert(const_iterator p, Iterator first, Iterator last); - //! @pre \c position must be a valid iterator of \c *this in range <tt>[begin(), end())</tt> +#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) + //! @pre + //! @li \c p must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>. + //! @li <tt>distance(il.begin(), il.end()) <= capacity()</tt> //! - //! @brief Erases Value from position. + //! @brief Inserts a copy of a range <tt>[il.begin(), il.end())</tt> at p. //! - //! @param position The position of the element which will be erased from the container. + //! @param p The position at which new elements will be inserted. + //! @param il The std::initializer_list which contains elements that will be inserted. + //! + //! @par Throws + //! @li If Value's constructor and assignment taking a dereferenced std::initializer_list iterator. + //! + //! @par Complexity + //! Linear O(N). + iterator insert(const_iterator p, std::initializer_list<value_type> il); +#endif + + //! @pre \c p must be a valid iterator of \c *this in range <tt>[begin(), end())</tt> + //! + //! @brief Erases Value from p. + //! + //! @param p The position of the element which will be erased from the container. //! //! @par Throws //! If Value's move assignment throws. //! //! @par Complexity //! Linear O(N). - iterator erase(iterator position); + iterator erase(const_iterator p); //! @pre //! @li \c first and \c last must define a valid range @@ -567,7 +623,7 @@ //! //! @par Complexity //! Linear O(N). - iterator erase(iterator first, iterator last); + iterator erase(const_iterator first, const_iterator last); //! @pre <tt>distance(first, last) <= capacity()</tt> //! @@ -584,6 +640,21 @@ template <typename Iterator> void assign(Iterator first, Iterator last); +#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) + //! @pre <tt>distance(il.begin(), il.end()) <= capacity()</tt> + //! + //! @brief Assigns a range <tt>[il.begin(), il.end())</tt> of Values to this container. + //! + //! @param first std::initializer_list with values used to construct new content of this container. + //! + //! @par Throws + //! If Value's copy constructor or copy assignment throws, + //! + //! @par Complexity + //! Linear O(N). + void assign(std::initializer_list<value_type> il); +#endif + //! @pre <tt>count <= capacity()</tt> //! //! @brief Assigns a count copies of value to this container. @@ -614,14 +685,14 @@ void emplace_back(Args &&...args); //! @pre - //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt> + //! @li \c p must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt> //! @li <tt>size() < capacity()</tt> //! //! @brief Inserts a Value constructed with - //! \c std::forward<Args>(args)... before position + //! \c std::forward<Args>(args)... before p //! - //! @param position The position at which new elements will be inserted. - //! @param args The arguments of the constructor of the new element. + //! @param p The position at which new elements will be inserted. + //! @param args The arguments of the constructor of the new element. //! //! @par Throws //! If in-place constructor throws or if Value's move constructor or move assignment throws. @@ -629,7 +700,7 @@ //! @par Complexity //! Constant or linear. template<class ...Args> - iterator emplace(iterator position, Args &&...args); + iterator emplace(const_iterator p, Args &&...args); //! @brief Removes all elements from the container. //! @@ -638,7 +709,7 @@ //! //! @par Complexity //! Constant O(1). - void clear() BOOST_CONTAINER_NOEXCEPT; + void clear() BOOST_NOEXCEPT_OR_NOTHROW; //! @pre <tt>i < size()</tt> //! @@ -704,6 +775,66 @@ //! Constant O(1). const_reference operator[](size_type i) const; + //! @pre <tt>i =< size()</tt> + //! + //! @brief Returns a iterator to the i-th element. + //! + //! @param i The element's index. + //! + //! @return a iterator to the i-th element. + //! + //! @par Throws + //! Nothing by default. + //! + //! @par Complexity + //! Constant O(1). + iterator nth(size_type i); + + //! @pre <tt>i =< size()</tt> + //! + //! @brief Returns a const_iterator to the i-th element. + //! + //! @param i The element's index. + //! + //! @return a const_iterator to the i-th element. + //! + //! @par Throws + //! Nothing by default. + //! + //! @par Complexity + //! Constant O(1). + const_iterator nth(size_type i) const; + + //! @pre <tt>begin() <= p <= end()</tt> + //! + //! @brief Returns the index of the element pointed by p. + //! + //! @param i The element's index. + //! + //! @return The index of the element pointed by p. + //! + //! @par Throws + //! Nothing by default. + //! + //! @par Complexity + //! Constant O(1). + size_type index_of(iterator p); + + //! @pre <tt>begin() <= p <= end()</tt> + //! + //! @brief Returns the index of the element pointed by p. + //! + //! @param i The index of the element pointed by p. + //! + //! @return a const_iterator to the i-th element. + //! + //! @par Throws + //! Nothing by default. + //! + //! @par Complexity + //! Constant O(1). + size_type index_of(const_iterator p) const; + //! @pre \c !empty() //! //! @brief Returns reference to the first element. @@ -768,7 +899,7 @@ //! //! @par Complexity //! Constant O(1). - Value * data() BOOST_CONTAINER_NOEXCEPT; + Value * data() BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Const pointer such that <tt>[data(), data() + size())</tt> is a valid range. //! For a non-empty vector <tt>data() == &front()</tt>. @@ -778,7 +909,7 @@ //! //! @par Complexity //! Constant O(1). - const Value * data() const BOOST_CONTAINER_NOEXCEPT; + const Value * data() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns iterator to the first element. //! @@ -789,7 +920,7 @@ //! //! @par Complexity //! Constant O(1). - iterator begin() BOOST_CONTAINER_NOEXCEPT; + iterator begin() BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns const iterator to the first element. //! @@ -800,7 +931,7 @@ //! //! @par Complexity //! Constant O(1). - const_iterator begin() const BOOST_CONTAINER_NOEXCEPT; + const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns const iterator to the first element. //! @@ -811,7 +942,7 @@ //! //! @par Complexity //! Constant O(1). - const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT; + const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns iterator to the one after the last element. //! @@ -822,7 +953,7 @@ //! //! @par Complexity //! Constant O(1). - iterator end() BOOST_CONTAINER_NOEXCEPT; + iterator end() BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns const iterator to the one after the last element. //! @@ -833,7 +964,7 @@ //! //! @par Complexity //! Constant O(1). - const_iterator end() const BOOST_CONTAINER_NOEXCEPT; + const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns const iterator to the one after the last element. //! @@ -844,7 +975,7 @@ //! //! @par Complexity //! Constant O(1). - const_iterator cend() const BOOST_CONTAINER_NOEXCEPT; + const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns reverse iterator to the first element of the reversed container. //! @@ -856,7 +987,7 @@ //! //! @par Complexity //! Constant O(1). - reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT; + reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns const reverse iterator to the first element of the reversed container. //! @@ -868,7 +999,7 @@ //! //! @par Complexity //! Constant O(1). - const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT; + const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns const reverse iterator to the first element of the reversed container. //! @@ -880,7 +1011,7 @@ //! //! @par Complexity //! Constant O(1). - const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT; + const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns reverse iterator to the one after the last element of the reversed container. //! @@ -892,7 +1023,7 @@ //! //! @par Complexity //! Constant O(1). - reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT; + reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns const reverse iterator to the one after the last element of the reversed container. //! @@ -904,7 +1035,7 @@ //! //! @par Complexity //! Constant O(1). - const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT; + const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns const reverse iterator to the one after the last element of the reversed container. //! @@ -916,7 +1047,7 @@ //! //! @par Complexity //! Constant O(1). - const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT; + const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns container's capacity. //! @@ -927,7 +1058,7 @@ //! //! @par Complexity //! Constant O(1). - static size_type capacity() BOOST_CONTAINER_NOEXCEPT; + static size_type capacity() BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns container's capacity. //! @@ -938,7 +1069,7 @@ //! //! @par Complexity //! Constant O(1). - static size_type max_size() BOOST_CONTAINER_NOEXCEPT; + static size_type max_size() BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Returns the number of stored elements. //! @@ -949,7 +1080,7 @@ //! //! @par Complexity //! Constant O(1). - size_type size() const BOOST_CONTAINER_NOEXCEPT; + size_type size() const BOOST_NOEXCEPT_OR_NOTHROW; //! @brief Queries if the container contains elements. //! @@ -961,7 +1092,7 @@ //! //! @par Complexity //! Constant O(1). - bool empty() const BOOST_CONTAINER_NOEXCEPT; + bool empty() const BOOST_NOEXCEPT_OR_NOTHROW; #else friend void swap(static_vector &x, static_vector &y)