Example #1
0
void access(Array& A, const mutable_array_tag&) {
  assign(A);
  access(A,const_array_tag());

  const Array& CA = A;
  access(CA,const_array_tag());
}
Example #2
0
int run_configuration(const StorageOrder3& so3,
                      const StorageOrder4& so4,
                      const Modifier& modifier) {
  // multi_array
  {
    typedef boost::multi_array<int,3> array;
    typename array::extent_gen extents;
    {
      array A(extents[2][3][4],so3);
      modifier.modify(A);
      access(A,mutable_array_tag());
    }
  }
  // multi_array_ref
  {
    typedef boost::multi_array_ref<int,3> array_ref;
    typename array_ref::extent_gen extents;
    {
      int local[24];
      array_ref A(local,extents[2][3][4],so3);
      modifier.modify(A);
      access(A,mutable_array_tag());
    }
  }
  // const_multi_array_ref
  {
    typedef boost::multi_array_ref<int,3> array_ref;
    typedef boost::const_multi_array_ref<int,3> const_array_ref;
    typename array_ref::extent_gen extents;
    {
      int local[24];
      array_ref A(local,extents[2][3][4],so3);
      modifier.modify(A);
      assign(A);

      const_array_ref B = A;
      access(B,const_array_tag());
    }
  }
  // sub_array
  {
    typedef boost::multi_array<int,4> array;
    typename array::extent_gen extents;
    {
      array A(extents[2][2][3][4],so4);
      modifier.modify(A);
      typename array::template subarray<3>::type B = A[1];
      access(B,mutable_array_tag());
    }
  }
  // const_sub_array
  {
    typedef boost::multi_array<int,4> array;
    typename array::extent_gen extents;
    {
      array A(extents[2][2][3][4],so4);
      modifier.modify(A);
      typename array::template subarray<3>::type B = A[1];
      assign(B);

      typename array::template const_subarray<3>::type C = B;
      access(C,const_array_tag());
    }
  }
  // array_view
  {
    typedef boost::multi_array<int,3> array;
    typedef typename array::index_range range;
    typename array::index_gen indices;
    typename array::extent_gen extents;
    {
      typedef typename array::index index;

      array A(extents[4][5][6],so3);
      modifier.modify(A);
      const index idx0 = A.index_bases()[0];
      const index idx1 = A.index_bases()[1];
      const index idx2 = A.index_bases()[2];

      typename array::template array_view<3>::type B =A[
        indices[range(idx0+1,idx0+3)]
               [range(idx1+1,idx1+4)]
               [range(idx2+1,idx2+5)]
      ];
      access(B,mutable_array_tag());
    }
  }
  // const_array_view
  {
    typedef boost::multi_array<int,3> array;
    typedef typename array::index_range range;
    typename array::index_gen indices;
    typename array::extent_gen extents;
    {
      typedef typename array::index index;

      array A(extents[4][5][6],so3);
      modifier.modify(A);
      const index idx0 = A.index_bases()[0];
      const index idx1 = A.index_bases()[1];
      const index idx2 = A.index_bases()[2];

      typename array::template array_view<3>::type B =A[
        indices[range(idx0+1,idx0+3)]
               [range(idx1+1,idx1+4)]
               [range(idx2+1,idx2+5)]
      ];
      assign(B);

      typename array::template const_array_view<3>::type C = B;
      access(C,const_array_tag());
    }
  }
  return boost::exit_success;
}