123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- #ifndef __TBB_blocked_range_H
- #define __TBB_blocked_range_H
- #include "tbb_stddef.h"
- namespace tbb {
- template<typename Value>
- class blocked_range {
- public:
-
-
- typedef Value const_iterator;
-
- typedef std::size_t size_type;
-
-
- blocked_range() : my_end(), my_begin() {}
-
- blocked_range( Value begin_, Value end_, size_type grainsize_=1 ) :
- my_end(end_), my_begin(begin_), my_grainsize(grainsize_)
- {
- __TBB_ASSERT( my_grainsize>0, "grainsize must be positive" );
- }
-
- const_iterator begin() const {return my_begin;}
-
- const_iterator end() const {return my_end;}
-
-
- size_type size() const {
- __TBB_ASSERT( !(end()<begin()), "size() unspecified if end()<begin()" );
- return size_type(my_end-my_begin);
- }
-
- size_type grainsize() const {return my_grainsize;}
-
-
-
-
- bool empty() const {return !(my_begin<my_end);}
-
-
- bool is_divisible() const {return my_grainsize<size();}
-
-
- blocked_range( blocked_range& r, split ) :
- my_end(r.my_end),
- my_begin(do_split(r)),
- my_grainsize(r.my_grainsize)
- {}
- private:
-
- Value my_end;
- Value my_begin;
- size_type my_grainsize;
-
-
- static Value do_split( blocked_range& r ) {
- __TBB_ASSERT( r.is_divisible(), "cannot split blocked_range that is not divisible" );
- Value middle = r.my_begin + (r.my_end-r.my_begin)/2u;
- r.my_end = middle;
- return middle;
- }
- template<typename RowValue, typename ColValue>
- friend class blocked_range2d;
- template<typename RowValue, typename ColValue, typename PageValue>
- friend class blocked_range3d;
- };
- }
- #endif
|