OOF2: The Manual
Name
IndexP — Generic wrapper for index objects
Synopses
C++ Synopsis
#include "engine/fieldindex.h"class IndexP {IndexP(FieldIndex* index);
IndexP(const IndexP& other);
IndexP cloneIndex() const;
int integer() const;
bool in_plane() const;
operator const FieldIndex&() const;
void set(const std::vector<int>* components);
std::vector<int>* components() const;
}
Python Synopsis
from oof2.SWIG.engine.fieldindex import IndexPclass IndexP:def cloneIndex(self)
def integer(self)
def in_plane(self)
def set(self, components)
def components(self)
Description
IndexP
is a wrapper for the various
FieldIndex
classes, which are used to refer to components of various
kinds of Fields
,
Fluxes
and Equations
.
The wrapper is a light-weight object that allows a
FieldIndex
to be used in a generic
fashion, while at the same time handling allocation and
deallocation of the FieldIndex
object. All of the public FieldIndex
methods are available in IndexP
.
Note that IndexP
does
not do reference counting. It's not a
smart pointer class. It just allows functions that would
otherwise have to work with a pointer to work with an object
instead.
Methods
IndexP(FieldIndex *index)
The IndexP
constructor has a single
argument, which must be a pointer to a newly constructed
instance of a FieldIndex
subclass. The IndexP
takes over
ownership of the FieldIndex
and
will delete it when necessary.
![]() |
Note |
---|---|
The |
IndexP(const IndexP& other)
The IndexP
copy constructor creates
a copy of the underlying FieldIndex
object as well.
IndexP cloneIndex() const
cloneIndex
is just a wrapper for
the copy constructor. It's useful to have an explicit
name for this operation when it's invoked from IteratorP
,
which is derived from IndexP
.
int integer() const()
Every kind of FieldIndex
has a canonical ordering of the indices that it
represents. For example, a VectorFieldIndex
takes the values x, y, z in that
order, and a SymTensorIndex
takes the values xx, yy, zz, yz, xz,
xy, in that order.
IndexP::integer
returns the
current value's position in the canonical list.
integer
is used whenever an
IndexP
needs to be used to
determine a position in a Python list, C++
std::vector
, or other linear
storage structure. It's also used in some situations
where functions weren't designed to accept the more
abstract FieldIndex
or
IndexP
objects, for whatever
reason.
bool in_plane() const
in_plane
indicates whether or not
the IndexP
refers to an in-plane or
out-of-plane index. For vectors, x
and y are in-plane. For tensors, any
set of indices containing a z is
out-of-plane.
operator const FieldIndex&() const
This operator converts an IndexP
to
a reference to a const
FieldIndex
. This conversion can
only be done in C++.
void set(const std::vector<int>* components)
The set
method sets the value of
a IndexP
and its underlying FieldIndex
from a std::vector
of ints (in C++) or a list
of integers (in Python). The required length of the list
depends on the FieldIndex
subclass.
std::vector<int>* components() const
components
returns the value of
the IndexP
as a C++ std::vector or
Python list of integers. The length of the list depends
upon the FieldIndex
subclass that the IndexP
wraps.
This function allocates a new
std::vector<int>
, which must be deleted
explicitly when called from C++.