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

aos1d_container

プリミティブの 1 次元コンテナーの構造体配列 (AoS) メモリーレイアウト用のテンプレート・クラスです。
#include <sdlt/aos1d_container.h>

構文

template<
    typename PrimitiveT, 
    AccessBy AccessByT,
    class AllocatorT = allocator::default_alloc
>
class aos1d_container;

引数

typename PrimitiveT

配列の各要素の型。

access_by AccessByT

メモリーレイアウトへのアクセス方法を制御する列挙型。ベクトル化の問題がない場合は access_by_struct の使用を推奨します。

詳細は、「access_by」を参照してください。

class AllocatorT = allocator::default_alloc

[オプション] 使用されるアロケーターの型。 現在、allocator::default_alloc のみサポートされています。

説明

内部的に構造体配列 (AoS) メモリーレイアウトを保持し、soa1d_container と互換性のあるインターフェイスを提供します。使用するコンテナーの型を変更することで、データレイアウトを簡単に切り替えることができます。アクセサーに関する残りのコードとプロキシーの要素およびメンバーの変更は不要です。

メンバー

説明

typedef size_t size_type;

コンテナーのメソッドのサイズ指定に使用する型。

template <typename OffsetT = no_offset> 
using accessor;

このコンテナーの accessor にエイリアスされたテンプレート。

template <typename OffsetT = no_offset> 
using const_accessor;

このコンテナーの const_accessor にエイリアスされたテンプレート。

メンバーの型

説明

aos1d_container(
    size_type size_d1 = 0u,
    buffer_offset_in_cachelines buffer_offset
        = buffer_offset_in_cachelines(0),
    const allocator_type & an_allocator = allocator_type());

オプションで指定されるアロケーター・インスタンスを使用して、size_d1 要素の初期化されていないコンテナーを構築します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。

aos1d_container (
    size_type size_d1,
    const PrimitiveT &a_value,
    buffer_offset_in_cachelines buffer_offset
        = buffer_offset_in_cachelines(0),
    const allocator_type & an_allocator
        = allocator_type());

オプションで指定されるアロケーター・インスタンスを使用して、size_d1 要素のコンテナーを構築し、各要素を a_value で初期化します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。

template<typename StlAllocatorT>
aos1d_container(
    const std::vector<PrimitiveT, StlAllocatorT> &other,
    buffer_offset_in_cachelines buffer_offset
        = buffer_offset_in_cachelines(0),
    const allocator_type & an_allocator
        = allocator_type());

オプションで指定されるアロケーター・インスタンスを使用して、other の各要素を同じ順序でコピーしてコンテナーを構築します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。

aos1d_container(
    const PrimitiveT *other_array, 
    size_type number_of_elements,
    buffer_offset_in_cachelines buffer_offset
        = buffer_offset_in_cachelines(0),
    const allocator_type & an_allocator
        = allocator_type());

オプションで指定されるアロケーター・インスタンスを使用して、配列 other_array から number_of_elements 要素を同じ順序でコピーしてコンテナーを構築します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。

template< typename IteratorT >
aos1d_container(
    IteratorT a_begin,
    IteratorT an_end,
    buffer_offset_in_cachelines buffer_offset
        = buffer_offset_in_cachelines(0),
    const allocator_type & an_allocator
        = allocator_type());

オプションで指定されるアロケーター・インスタンスを使用して、範囲 [a_begin-an_end) の要素にその範囲の対応する要素から値を同じ順序でコピーしてコンテナーを構築します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。

aos1d_container clone() const;

戻り値: 要素の個別のコピーを含む新しい aos1d_container インスタンス。

void resize(size_type new_size_d1);

new_size_d1 要素を含めるようにコンテナーのサイズを調整します。新しいサイズが現在のコンテナーサイズよりも大きい場合、新しい要素は初期化されません。

accessor<> access();

戻り値: 組込みインデックス offset を含まない accessor。

accessor<int> access(int offset);

戻り値: 組込みインデックス offset に基づく整数ベースの accessor

template<int IndexAlignmentT>
accessor<aligned_offset<IndexAlignmentT> >
    access(aligned_offset<IndexAlignmentT>);

戻り値: 組込みインデックス offset に基づく aligned_offset<IndexAlignmentT> ベースの accessor。

template<int OffsetT>
accessor<fixed_offset<OffsetT> >
    access(fixed_offset<OffsetT>);

戻り値: 組込みインデックス offset に基づく fixed_offset<OffsetT> ベースの accessor

const_accessor<> const_access() const;

戻り値: 組込みインデックス offset を含まない const_accessor。

const_accessor<int> 
    const_access(int offset) const;

戻り値: 組込みインデックス offset に基づく整数ベースの const_accessor。

const_accessor<aligned_offset<IndexAlignmentT>>
    const_access(aligned_offset<IndexAlignmentT> offset) const;

戻り値: 組込みインデックス offset に基づく aligned_offset<IndexAlignmentT> ベースの const_accessor。

template<int OffsetT>
const_accessor<fixed_offset<OffsetT> >
    const_access(fixed_offset<OffsetT>) const;

戻り値: 組込みインデックス offset に基づく fixed_offset<OffsetT> ベースの const_accessor。

STL との互換性

上の表のパフォーマンス重視のインターフェイスに加えて、aos1d_container はパフォーマンスよりも統合を重視した std::vector インターフェイスのサブセットを実装します。インポート/エクスポートのみという制約により、オブジェクトへの参照を返すことはできません。代わりに、iteratorsoperator[] はプロキシー・オブジェクトを返し、その他の "const' メソッドは "value_type const" を返します。さらに、iterators は -> 演算子をサポートしていません。この制約にもかかわらず、iterators は STL アルゴリズムに渡すことができます。また、パフォーマンス上の理由から、resize は新しい要素を初期化しません。次の std::vector インターフェイス・メソッドが実装されます。