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
Copyright © 2010, Intel Corporation. All rights reserved.