インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

bounds_t

半開区間 (下限と上限) を表すクラスです。#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++ の範囲ベースのループと互換性があるため、反復を容易に行うことができます。

テンプレート引数

説明

typename LowerT = int

下限の型。

要件: int、fixed<NumberT>、または aligned<AlignmentT> 型。

typename UpperT = int

上限の型。

要件: int、fixed<NumberT>、または aligned<AlignmentT> 型。

メンバーの型

説明

typedef LowerT lower_type

下限の型。

typedef UpperT upper_type

上限の型。

typedef implementation-defined iterator

C++ の範囲ベースのループをサポートするためのイテレーターの型。

メンバー

説明

bounds_t()

効果: 下限と上限が初期化されていない bounds_t を構築します。

bounds_t(lower_type l, upper_type u)

要件: (u >= l)。

効果: 半開区間 [l, u) の bounds_t を構築します。

bounds_t(const bounds_t & a_other)

効果: 上限と下限を a_other の上限と下限の値で初期化した bounds_t を構築します。

template<typename OtherLowerT, 
         typename OtherUpperT>
bounds_t(const bounds_t<OtherLowerT,
                 OtherUpperT> & a_other)

要件: OtherLowerT と OtherUpperT は lower_type と upper_type に変換可能。例えば、int から fixed<8>() への変換は不正です。

効果: 上限と下限を a_other の上限と下限の値で初期化した bounds_t を構築します。

void set(lower_type l, upper_type u)

効果: 包含的な下限のインデックスと排他的な上限のインデックスを設定します。

void set_lower(lower_type a_lower)

効果: 包含的な下限のインデックスを設定します。

void set_upper(upper_type a_upper)

効果: 排他的な上限のインデックスを設定します。

lower_type lower() const

戻り値: 包含的な下限のインデックス。

upper_type upper() const

戻り値: 排他的な上限のインデックス。

iterator begin() const

戻り値: 包含的な下限のインデックス・イテレーター。注: C++11 の範囲ベースのループには begin() と end() が必要です。

iterator end() const

戻り値: 排他的な上限のインデックス・イテレーター。注: C++11 の範囲ベースのループには begin() と end() が必要です。

auto width() const

効果: lower() から upper() の範囲の半開区間内の反復空間の幅を特定します。

戻り値: upper() - lower()。

注: 戻り型は、upper() と lower() 間の減算結果の型に依存します。

template<typename OtherLowerT, 
         typename OtherUpperT> 
bool contains(const bounds_t<OtherLowerT,
                OtherUpperT> &a_other) const

効果: a_other の区間全体がこのオブジェクトの境界内かどうかを特定します。

戻り値: (a_other.lower() >= lower() &&

a_other.upper() <= upper())

template<typename T> 
auto operator + (const T &offset) const

効果: 下限と上限にオフセットを足して、新しい bounds_t インスタンスを作成します。

戻り値: bounds(lower() + offset, upper()+offset)。

注: オフセットの加算により、戻り値 bound_t の lower_type と upper_type が異なることがあります。

template<typename T> 
auto operator - (const T & offset) const

効果: 下限と上限からオフセットを引いて、新しい bounds_t インスタンスを作成します。

戻り値: bounds(lower() - offset, upper()-offset)

注: T の減算により、戻り値の lower_type と upper_type が異なることがあります。

bool operator == (const bounds_t &a_other) const

効果: 同じ型の bounds_t オブジェクトが等しいか比較します。

戻り値: (lower() == a_other.lower() && upper() == a_other.upper())。

template<typename OtherLowerT, 
         typename OtherUpperT>
bool operator == (
 const bounds_t<OtherLowerT, 
                OtherUpperT> &a_other) const

効果: lower_type または upper_type が異なる bounds_t オブジェクトが等しいか比較します。

戻り値: (lower() == a_other.lower() && upper() == a_other.upper())。

bool operator != (const bounds_t &) const

効果: 同じ型の bounds_t オブジェクトが等しいくないか比較します。

戻り値: (lower() != a_other.lower() || upper() != a_other.upper())。

template<typename OtherLowerT, 
         typename OtherUpperT>
bool operator != (
 const bounds_t<OtherLowerT, 
                OtherUpperT> &a_other) const

効果: lower_type または upper_type が異なる bounds_t オブジェクトが等しくないか比較します。

戻り値: (lower() != a_other.lower() || upper() != a_other.upper())。

friend 関数

説明

std::ostream& operator << (std::ostream& a_output_stream, const bounds_t &a_bounds)

効果: 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];
            // …
    }

イテレーターは、オブジェクト値ではなく、範囲内のインデックス値のみを提供します。上記の例のように、アクセサーへのインデックスの使用が想定されます。