Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ indirect_array(3C++) — Sun WorkShop 5.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

indirect_array(3C++)

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

 

NAME

 
indirect_array
 
 - A numeric array class used to represent elements selected from a valarray.
 
 
 

SYNOPSIS

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

DESCRIPTION

 
 
indirect_array<T> creates a selective view into a valarray. Indirect_arrays are produced by applying the indirect subscript operator to a valarray. The indirect array produced by this subscript contains only the elements of the valarray whose indices appear as values in the argument. The elements in an indirect_array are references to selected elements in the valarray (so changing an element in the indirect_array really changes the corresponding element in the valarray). An indirect_array does not itself hold any distinct elements. The template cannot be instantiated directly since all its constructors are private. However, you can copy an indirect_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 indirect_array {
public:
 

// types

typedef T value_type;

 

// destructor
~indirect_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

indirect_array();
indirect_array(const indirect_array<T>&);

// operator =

indirect_array<T>&

operator= (const indirect_array<T>& array);

};
 
 
 

CONSTRUCTORS

 
 
 
indirect_array();
indirect_array(const indirect_array&);

 
 
All indirect_array constructors are private and cannot be called directly. This prevents copy construction of indirect_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 an indirect_array never holds any elements itself; it simply refers to selected elements in the valarray used to generate it. 
 

 
 
indirect_array<T>&
operator=(const indirect-_array<T>& x);

 
 
Private assignment operator. Cannot be called directly, thus preventing assignment between indirect_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 an indirect_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);

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

 
 
 

EXAMPLE

 
 
 
//
// indirect_array.cpp
//
#include "valarray.h" // Contains a valarray stream inserter
using namespace std;
 
int main(void)
{

int ibuf[10] = {0,1,2,3,4,5,6,7,8,9};
size_t sbuf[6] = {0,2,3,4,7,8};

 

// create a valarray of ints

valarray<int>         vi(ibuf,10);

 

// create a valarray of indices for a selector

valarray<size_t> selector(sbuf,6);

 

// print out the valarray<int>

cout << vi << endl;

 

// Get a indirect_array
// and assign that indirect to another valarray

indirect_array<int> select = vi[selector];
valarray<int> vi3 = select;

 

// print out the selective array

cout << vi3 << endl;

 

// Double the selected values

select += vi3;

 

// print out vi1 again

cout << vi << endl;

 

return 0;

}
 

Program Output
 
 
 
 
[0,1,2,3,4,5,6,7,8,9]
[0,2,3,4,7,8]
[0,1,4,6,8,5,6,14,16,9]
 
 
 

WARNINGS

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

SEE ALSO

 
 
slice, slice_array, valarray, gslice, gslice_array, mask_array
 

Rogue Wave Software  —  Last change: 02 Apr 1998

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026