blocked_range3d
[algorithms.blocked_range3d]
再帰的に分割可能な 3 次元の半開区間を表すクラス・テンプレート。
blocked_range3d
は blocked_range2d
の 3 次元拡張です。
namespace oneapi {
namespace tbb {
template<typename PageValue, typename RowValue=PageValue, typename ColValue=RowValue>
class blocked_range3d {
public:
// Types
using page_range_type = blocked_range<PageValue>;
using row_range_type = blocked_range<RowValue>;
using col_range_type = blocked_range<ColValue>;
// Constructors
blocked_range3d(
PageValue page_begin, PageValue page_end,
typename page_range_type::size_type page_grainsize,
RowValue row_begin, RowValue row_end,
typename row_range_type::size_type row_grainsize,
ColValue col_begin, ColValue col_end,
typename col_range_type::size_type col_grainsize );
blocked_range3d( PageValue page_begin, PageValue page_end
RowValue row_begin, RowValue row_end, ColValue col_begin,
ColValue col_end );
blocked_range3d( blocked_range3d& r, split );
blocked_range3d( blocked_range3d& r, proportional_split& proportion );
// Capacity
bool empty() const;
// Access
bool is_divisible() const;
const page_range_type& pages() const;
const row_range_type& rows() const;
const col_range_type& cols() const;
};
} // namespace tbb
} // namespace oneapi
要件:
RowValue、RowValue および ColValue は blocked_range の要件を満たす必要があります。
メンバーのタイプ
using page_range_type = blocked_range<PageValue>;
PageValue のタイプ。
using row_range_type = blocked_range<RowValue>;
RowValue のタイプ。
using col_range_type = blocked_range<ColValue>;
ColValue のタイプ。
メンバー関数
blocked_range3d(PageValue page_begin, PageValue page_end,
typename page_range_type::size_type page_grainsize,
RowValue row_begin, RowValue row_end,
typename row_range_type::size_type row_grainsize,
ColValue col_begin, ColValue col_end,
typename col_range_type::size_type col_grainsize);
効果: 値の 3 次元空間を表わす blocked_range3d
を作成します。空間は、行と列が指定された粒度の半開区間の直積 [page_begin, page_end) x [row_begin, row_end) x [col_begin, col_end)
です。
例: blocked_range3d<int,char,int> r(0, 6, 2, 'a', 'z'+1, 3, 0, 10, 2 );
は、(i, j, k)
形式のすべての値ペアを含む 2 次元の空間を作成します。ここで、i
の範囲は 0 から 6 (粒度 2)、j
の範囲は 'a'
から 'z'
(粒度3) で、k
の範囲は 0 から 9 (粒度 2) です。
blocked_range3d(PageValue page_begin, PageValue page_end,
RowValue row_begin, RowValue row_end,
ColValue col_begin, ColValue col_end);
blocked_range3d(page_begin,page_end,1,row_begin,row_end,1,col_begin,col_end,1)
と同等です。
blocked_range3d( blocked_range3d& range, split );
基本分割コンストラクター。
要件: is_divisible()
は true です。
効果: range
を 2 つのサブ範囲に分割します。新しく作成される blocked_range3d
は、ほぼ元の range
の半分で、range
はその残りになるように更新されます。各 subrange の粒度はオリジナルの range
と同じです。ページ、行、または列単位で分割されます。分割する軸の選択は、分割が繰り返された後でサブ範囲がそれぞれのページ、行および列の粒度の比率に近くなることを目的とします。
blocked_range3d( blocked_range3d& range, proportional_split proportion );
比例分割コンストラクター。
要件: is_divisible()
は true です。
効果: range
を軸の 1 つで指定された proportion
(比率) で 2 つのサブ範囲に分割します。分割する軸の選択は基本分割コンストラクターと同じ方法で行われ、選択した軸は比例分割されます。2 番目の軸と各サブ範囲の粒度は元の範囲と同じです。
bool empty() const;
効果: range が空かどうかを判別します。
戻り値: pages.empty()||rows().empty()||cols().empty()
bool is_divisible() const;
効果: range が subrange に分割できるかどうかを判別します。
戻り値: pages().is_divisible()||rows().is_divisible()||cols().is_divisible()
const page_range_type& pages() const;
戻り値: 値空間のページを含む 範囲。
const row_range_type& rows() const;
戻り値: 値の空間の行を含む 範囲。
const col_range_type& cols() const;
戻り値: 値の空間の列を含む範囲。
参照: