インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
半開区間 (下限と上限) を表すクラスです。#include <sdlt/bounds.h>
template<typename LowerT = int, typename UpperT = int>
struct bounds_t
bounds_t は、半開区間の下限と上限を保持します。下限と上限で異なる表現を使用できるようにテンプレート化されています。fixed<NumberT>、aligned<AlignmentT>、整数値を含む型がサポートされています。bounds_t は、1 つの次元の有効な反復空間をモデル化します。
bounds_t を使用して、次元の範囲全体を反復することも、範囲の一部に反復空間を制限することもできます。n_bounds_t は、複数の bounds_t オブジェクトをまとめて、複数の範囲を制限する多次元サブセクションを構築できます。
クラス・インターフェイスは、C++ の範囲ベースのループと互換性があるため、反復を容易に行うことができます。
テンプレート引数 |
説明 |
---|---|
|
下限の型。 要件: int、fixed<NumberT>、または aligned<AlignmentT> 型。 |
|
上限の型。 要件: int、fixed<NumberT>、または aligned<AlignmentT> 型。 |
メンバーの型 |
説明 |
---|---|
|
下限の型。 |
|
上限の型。 |
|
C++ の範囲ベースのループをサポートするためのイテレーターの型。 |
メンバー |
説明 |
---|---|
|
効果: 下限と上限が初期化されていない bounds_t を構築します。 |
|
要件: (u >= l)。 効果: 半開区間 [l, u) の bounds_t を構築します。 |
|
効果: 上限と下限を a_other の上限と下限の値で初期化した bounds_t を構築します。 |
|
要件: OtherLowerT と OtherUpperT は lower_type と upper_type に変換可能。例えば、int から fixed<8>() への変換は不正です。 効果: 上限と下限を a_other の上限と下限の値で初期化した bounds_t を構築します。 |
|
効果: 包含的な下限のインデックスと排他的な上限のインデックスを設定します。 |
|
効果: 包含的な下限のインデックスを設定します。 |
|
効果: 排他的な上限のインデックスを設定します。 |
|
戻り値: 包含的な下限のインデックス。 |
|
戻り値: 排他的な上限のインデックス。 |
|
戻り値: 包含的な下限のインデックス・イテレーター。注: C++11 の範囲ベースのループには begin() と end() が必要です。 |
|
戻り値: 排他的な上限のインデックス・イテレーター。注: C++11 の範囲ベースのループには begin() と end() が必要です。 |
|
効果: lower() から upper() の範囲の半開区間内の反復空間の幅を特定します。 戻り値: upper() - lower()。 注: 戻り型は、upper() と lower() 間の減算結果の型に依存します。 |
|
効果: a_other の区間全体がこのオブジェクトの境界内かどうかを特定します。 戻り値: (a_other.lower() >= lower() && a_other.upper() <= upper()) |
|
効果: 下限と上限にオフセットを足して、新しい bounds_t インスタンスを作成します。 戻り値: bounds(lower() + offset, upper()+offset)。 注: オフセットの加算により、戻り値 bound_t の lower_type と upper_type が異なることがあります。 |
|
効果: 下限と上限からオフセットを引いて、新しい bounds_t インスタンスを作成します。 戻り値: bounds(lower() - offset, upper()-offset) 注: T の減算により、戻り値の lower_type と upper_type が異なることがあります。 |
|
効果: 同じ型の bounds_t オブジェクトが等しいか比較します。 戻り値: (lower() == a_other.lower() && upper() == a_other.upper())。 |
|
効果: lower_type または upper_type が異なる bounds_t オブジェクトが等しいか比較します。 戻り値: (lower() == a_other.lower() && upper() == a_other.upper())。 |
|
効果: 同じ型の bounds_t オブジェクトが等しいくないか比較します。 戻り値: (lower() != a_other.lower() || upper() != a_other.upper())。 |
|
効果: lower_type または upper_type が異なる bounds_t オブジェクトが等しくないか比較します。 戻り値: (lower() != a_other.lower() || upper() != a_other.upper())。 |
friend 関数 |
説明 |
---|---|
|
効果: bounds_t の下限値と上限値の文字列表現を a_output_stream に追加します。 戻り値: チェーン呼び出しの a_output_stream への参照。 |
範囲ベースのループのサポート
bounds_t は、C++11 の範囲ベースのループを有効にするイテレーターを返す begin() メソッドと end() メソッドを提供します。これらを利用することで、多次元コンテナーの範囲を反復するコードを簡単に、分かりやすく記述できます。
bounds_t を使用しない場合:
auto ca = image_container.const_access();
auto b0 = bounds_d<0>(ca);
auto b1 = bounds_d<1>(ca);
for (auto y = b0.lower(); y < b0.upper(); ++y)
for (auto x = b1.lower(); x < b1.upper(); ++x) {
RGBAs pixel = ca[y][x];
// …
}
bounds_t を使用する場合:
auto ca = image_container.const_access();
for (auto y: bounds_d<0>(ca))
for (auto x: bounds_d<1>(ca)) {
RGBAs pixel = ca[y][x];
// …
}
イテレーターは、オブジェクト値ではなく、範囲内のインデックス値のみを提供します。上記の例のように、アクセサーへのインデックスの使用が想定されます。