Edit: /usr/include/oneapi/tbb/blocked_range.h (6453B)
/*
Copyright (c) 2005-2021 Intel Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef __TBB_blocked_range_H
#define __TBB_blocked_range_H
#include
#include "detail/_range_common.h"
#include "detail/_namespace_injection.h"
#include "version.h"
namespace tbb {
namespace detail {
namespace d1 {
/** \page range_req Requirements on range concept
Class \c R implementing the concept of range must define:
- \code R::R( const R& ); \endcode Copy constructor
- \code R::~R(); \endcode Destructor
- \code bool R::is_divisible() const; \endcode True if range can be partitioned into two subranges
- \code bool R::empty() const; \endcode True if range is empty
- \code R::R( R& r, split ); \endcode Split range \c r into two subranges.
**/
//! A range over which to iterate.
/** @ingroup algorithms */
template
__TBB_requires(blocked_range_value)
class blocked_range {
public:
//! Type of a value
/** Called a const_iterator for sake of algorithms that need to treat a blocked_range
as an STL container. */
using const_iterator = Value;
//! Type for size of a range
using size_type = std::size_t;
//! Construct range over half-open interval [begin,end), with the given grainsize.
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" );
}
//! Beginning of range.
const_iterator begin() const { return my_begin; }
//! One past last value in range.
const_iterator end() const { return my_end; }
//! Size of the range
/** Unspecified if end()
__TBB_requires(blocked_range_value &&
blocked_range_value)
friend class blocked_range2d;
template
__TBB_requires(blocked_range_value &&
blocked_range_value &&
blocked_range_value)
friend class blocked_range3d;
template
__TBB_requires(blocked_range_value)
friend class blocked_rangeNd_impl;
};
} // namespace d1
} // namespace detail
inline namespace v1 {
using detail::d1::blocked_range;
// Split types
using detail::split;
using detail::proportional_split;
} // namespace v1
} // namespace tbb
#endif /* __TBB_blocked_range_H */