range_iterator.hpp

Go to the documentation of this file.
00001 /****
00002 ***** Copyright 2010 Intel Corporation All Rights Reserved.
00003 *****
00004 ***** The source code, information and material contained herein are owned by Intel Corporation or its suppliers  *****
00005 ***** or licensors, and title to such Material remains with Intel Corporation or its suppliers or licensors.      *****
00006 ***** The Material contains proprietary information of Intel or its suppliers and licensors. The Material is      *****
00007 ***** protected by worldwide copyright laws and treaty provisions. No part of the Material may be used, copied,   *****
00008 ***** reproduced, modified, published, uploaded, posted, transmitted, distributed or disclosed in any way without *****
00009 ***** Intel's prior express written permission.
00010 *****
00011 ***** No license under any patent, copyright or other intellectual property rights in the material is granted to  *****
00012 ***** or conferred upon you, either expressly, by implication, inducement, estoppel or otherwise. Any license     *****
00013 ***** under such intellectual property rights must be express and approved by Intel in writing.
00014 ****/
00015 
00016 /**** Copyright Ends ****/
00017 
00018 #ifndef ARBB_CPP_RANGE_ITERATOR_HPP
00019 #define ARBB_CPP_RANGE_ITERATOR_HPP
00020 
00021 #include "type_traits.hpp"
00022 #include "detail/range.hpp"
00023 #include "detail/range_element.hpp"
00024 #include "detail/range_iterator.hpp"
00025 #include "range.hpp"
00026 
00027 namespace ARBB_CPP_NS {
00028 
00031 
00038 template <typename T>
00039 class range_iterator: public std::iterator<std::random_access_iterator_tag, T,
00040   typename uncaptured<isize>::type, typename uncaptured<usize>::type, detail::range_element<T> >
00041 {
00042 public:
00044   range_iterator();
00045 
00047   range_iterator(const range_iterator& other);
00048 
00050   template <typename U>
00051   range_iterator(const range_iterator<U>& other);
00052 
00054   range_iterator& operator=(const range_iterator& other);
00055 
00058   typename range_iterator<T>::pointer operator->();
00059 
00062   const typename range_iterator<T>::pointer operator->() const;
00063 
00065   typename range_iterator<T>::reference operator*();
00066 
00068   const typename range_iterator<T>::reference operator*() const;
00069 
00072   typename range_iterator<T>::reference operator[](typename range_iterator<T>::difference_type i);
00073 
00076   const typename range_iterator<T>::reference operator[](typename range_iterator<T>::difference_type i) const;
00077 
00080   const range_iterator& operator++();
00081 
00084   const range_iterator& operator--();
00085 
00088   range_iterator operator++(int);
00089 
00092   range_iterator operator--(int);
00093 
00095   range_iterator& operator+=(typename range_iterator<T>::difference_type offset);
00096 
00099   range_iterator& operator-=(typename range_iterator<T>::difference_type offset);
00100 
00104   typename range_iterator<T>::difference_type difference(range_iterator other) const;
00105 
00107   
00108   range_iterator(typename detail::range<T>::iterator detail_range_iterator);
00109 
00111 
00112 private:
00113   detail::range_iterator<T> m_detail_range_iterator;
00114 };
00115 
00122 template <typename T>
00123 class const_range_iterator: public std::iterator<std::random_access_iterator_tag, T,
00124   typename uncaptured<isize>::type, typename uncaptured<usize>::type, detail::range_element<T> >
00125 {
00126 public:
00128   const_range_iterator();
00129 
00131   const_range_iterator(const const_range_iterator& other);
00132 
00134   template <typename U>
00135   const_range_iterator(const const_range_iterator<U>& other);
00136 
00138   const_range_iterator& operator=(const const_range_iterator& other);
00139 
00142   const typename const_range_iterator<T>::pointer operator->() const;
00143 
00145   const typename const_range_iterator<T>::reference operator*() const;
00146 
00149   const typename const_range_iterator<T>::reference operator[](typename const_range_iterator<T>::difference_type i) const;
00150 
00153   const const_range_iterator& operator++();
00154 
00157   const const_range_iterator& operator--();
00158 
00161   const_range_iterator operator++(int);
00162 
00165   const_range_iterator operator--(int);
00166 
00168   const_range_iterator& operator+=(typename const_range_iterator<T>::difference_type offset);
00169 
00172   const_range_iterator& operator-=(typename const_range_iterator<T>::difference_type offset);
00173 
00177   typename const_range_iterator<T>::difference_type difference(const_range_iterator other) const;
00178 
00180   
00181   const_range_iterator(typename detail::range<T>::iterator detail_range_iterator);
00182 
00184 
00185 private:
00186   detail::range_iterator<T> m_detail_range_iterator;
00187 };
00188 
00190 
00191 } // namespace ARBB_CPP_NS
00192 
00193 #endif // ARBB_CPP_RANGE_ITERATOR_HPP

Submit feedback on this help topic

Copyright © 2010, Intel Corporation. All rights reserved.