Man Page gslice_array.3



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



NAME

     gslice_array

      - A numeric array class used to represent a BLAS-like slice
     from a valarray.





SYNOPSIS

     #include <valarray>
     template <class T>
     class gslice_array ;





DESCRIPTION

     gslice_array<T> creates  a  gslice  view  into  a  valarray.
     gslice_arrays  are only produced by applying the gslice sub-
     script  operator  to  a  valarray.   The   elements   in   a
     gslice_array  are  references  to  selected  elements in the
     valarray (so changing an element in the gslice_array  really
     changes  the  corresponding  element  in  the  valarray).  A
     gslice_array does not itself hold any distinct elements. The
     template  cannot be instantiated directly since all its con-
     structors are private. However, you can copy a  gslice_array
     to  a valarray using either the valarray copy constructor or
     the assignment operator. Reference  semantics  are  lost  at
     that point.





INTERFACE

     template <class T> class gslice_array {
     public:

       // types
      typedef T value_type;

       // destructor
       ~gslice_array();

       // public assignment
      void operator= (const valarray<T>& array) const;
       // computed assignment
      void operator*= (const valarray<T>& array) const;
      void operator/= (const valarray<T>& array) const;
      void operator%= (const valarray<T>& array) const;
      void operator+= (const valarray<T>& array) const;
      void operator-= (const valarray<T>& array) const;
      void operator^= (const valarray<T>& array) const;
      void operator&= (const valarray<T>& array) const;
      void operator|= (const valarray<T>& array) const;
      void operator<<= (const valarray<T>& array) const;
      void operator>>= (const valarray<T>& array) const;

       // fill function
      void operator=(const T&);

     private:
       // constructors
      gslice_array();
      gslice_array(const gslice_array<T>&);
       // operator =
      gslice_array<T>& operator= (const gslice_array<T>& array);
     };





CONSTRUCTORS

     gslice_array();
     gslice_array(const gslice_array&);


        All gslice_array constructors are private and  cannot  be
        called  directly.  This  prevents  copy  construction  of
        gslice_arrays.






ASSIGNMENT OPERATORS

     void operator=(const valarray<T>& x) const;


        Assigns values from x to the  selected  elements  of  the
        valarray   that   self   refers   to.   Remember  that  a
        gslice_array never holds any elements itself;  it  simply
        refers  to selected elements in the valarray used to gen-
        erate it.



     gslice_array<T>&
     operator=(const gslice-_array<T>& x);

        Private assignment operator. Cannot be  called  directly,
        thus preventing assignment between gslice_arrays.






COMPUTED ASSIGNMENT OPERATORS

     void operator*=(const valarray<T>& val) const;
     void operator/=(const valarray<T>& val) const;
     void operator%=(const valarray<T>& val) const;
     void operator+=(const valarray<T>& val) const;
     void operator-=(const valarray<T>& val) const;
     void operator^=(const valarray<T>& val) const;
     void operator&=(const valarray<T>& val) const;
     void operator|=(const valarray<T>& val) const;
     void operator<<=(const valarray<T>& val) const;
     void operator>>=(const valarray<T>& val) const;


        Applies the indicated operation using elements  from  val
        to the selected elements of the valarray that self refers
        to. Remember that a gslice_array never holds any elements
        itself;  it  simply  refers  to  selected elements in the
        valarray used to generate it.






MEMBER FUNCTIONS

     void operator=(const T& x) const;


        Assigns x to the selected elements of the  valarray  that
        self refers to.






EXAMPLE

     //
     // gslice_array.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};

      int buf13[9] = {13,13,13,13,13,13,13,13,13};
      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);

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

       // Get a two dimensional diagonal 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] = 10;
      gslice_array<int> gsl = vi[gslice(0,len2,stride2)];

       // print out the slice
      cout << gsl << endl;

       // Assign 13's to everything in the slice
      gsl = valarray<int>(buf13,9);

       // print out the slice and our original valarray
      cout << gsl << endl << vi <<  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,2,4,3,5,7,6,8,10]
     [13,13,13,13,13,13,13,13,13]
     [13,1,2,13,4,5,13,7,8,1,13,3,4,13,6,7,13,9,2,3,13,5,6,13,8,9,13]





WARNINGS

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






SEE ALSO

     slice,   valarray,    gslice,    slice_array,    mask_array,
     indirect_array