Man Page gslice.3



                       Standard C++ Library
             Copyright 1998, Rogue Wave Software, Inc.



NAME

     gslice

      - A numeric array class used  to  represent  a  generalized
     slice from an array.





SYNOPSIS

     #include <valarray>
     class gslice ;





DESCRIPTION

     gslice_represents a generalized slice from an array. A  gen-
     eralized  slice  contains a starting index, a set of lengths
     and a set of strides. The number of lengths and strides must
     be  equal.  Together  the  lengths and strides allow a slice
     from a multiple dimension array (with the dimension equal to
     the  number  of  strides)  to be represented on a one dimen-
     sional valarray. The gslice maps a set of  n  indices  (ij),
     where n is equal to the number of strides, to a single index
     k.

     When applied to a valarray using the gslice subscript opera-
     tor  (see  valarray)  a  gslice produces a gslice_array. The
     gslice_array class creates a view into the original valarray
     that is tailored to match parameters of the gslice. The ele-
     ments in a gslice_array are references to  the  elements  in
     the original array.





INTERFACE

     class gslice {
     public:
       // constructors
      gslice();
      gslice(size_t, const valarray<size_t>&,
             const valarray<size_t>&);
      gslice (const gslice&);

       // Accessors
      size_t start() const;
      valarray<size_t> size() const;
      valarray<size_t> stride() const;
     };





CONSTRUCTORS

     gslice();


        Default constructor creates a gslice specifying  no  ele-
        ments.



     gslice(size_t start, const valarray<size_t>& length,
           const valarray<size_t>& stride);


        Creates a slice with starting index, length and stride as
        indicated by the arguments.



     gslice(const gslice&)


        Creates a slice with starting index, length and stride as
        indicated by the slice argument.






ACCESSORS

     size_t start();


        Returns the starting index of the gslice.



     valarraysize_t> size();


        Returns a valarray<size_t> containing the lengths of  the
        gslice.



     Valarray<size_t> stride();
        Returns a valarray<size_t> containing the strides of  the
        gslice.






EXAMPLE

     //
     // gslice.cpp
     //
     #include "valarray.h" // Contains a valarray stream inserter
     using namespace std;

     int main(void)
     {
      int ibuf[27] =
        {0,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,9,2,3,4,5,6,7,8,9,10};
      size_t len_buf[3] = {3,3,3};
      size_t stride_buf[3] = {9,3,1};

       // create a valarray of ints
      valarray<int>  vi(ibuf,27);

       // create length and stride valarrays
      valarray<size_t> len(len_buf,3);
      valarray<size_t> stride(stride_buf,3);

       // print out the valarray
      cout << vi << endl;

       // Print out all three dimensions (the entire valarray)
      cout << valarray<int>(vi[gslice(0,len,stride)]) << endl;

       // Print a two dimensional slice out of the middle
      valarray<size_t> len2(2);
      len2[0] = 3;
      len2[1] = 3;
      valarray<size_t> stride2(2);
      stride2[0] = 3;
      stride2[1] = 1;
      cout << valarray<int>(vi[gslice(9,len2,stride2)]) << endl;

       // Print another two dimensional slice out of the middle
       // but orthogonal to one we just did
      stride2[0] = 9;
      stride2[1] = 1;
      cout << valarray<int>(vi[gslice(3,len2,stride2)]) << endl;

       // Print out the last plane in the middle,
       // (orthogonal to both of the previous ones)
      stride2[0] = 3;
      stride2[1] = 9;
      cout << valarray<int>(vi[gslice(1,len2,stride2)]) << endl;

       // Now how about a diagonal slice?
       // upper left front to lower right back
      stride2[0] = 3;
      stride2[1] = 10;
      cout << valarray<int>(vi[gslice(0,len2,stride2)]) << endl;

      return 0;
     }

     Program Output




     [0,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,9,2,3,4,5,6,7,8,9,10]
     [0,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,9,2,3,4,5,6,7,8,9,10]
     [1,2,3,4,5,6,7,8,9]
     [3,4,5,4,5,6,5,6,7]
     [1,2,3,4,5,6,7,8,9]
     [0,2,4,3,5,7,6,8,10]





WARNINGS

     If your compiler does not support namespaces,  then  you  do
     not need the using declaration for std.





SEE ALSO

     valarray,  slice_array,  slice,  gslice_array,   mask_array,
     indirect_array