VTK
9.1.0
|
Contiguous storage for N-way arrays. More...
#include <vtkDenseArray.h>
Classes | |
class | HeapMemoryBlock |
MemoryBlock implementation that manages internally-allocated memory using new[] and delete[]. More... | |
class | MemoryBlock |
Strategy object that contains a block of memory to be used by vtkDenseArray for value storage. More... | |
class | StaticMemoryBlock |
MemoryBlock implementation that manages a static (will not be freed) memory block. More... | |
Public Types | |
typedef vtkArray::CoordinateT | CoordinateT |
typedef vtkArray::DimensionT | DimensionT |
typedef vtkArray::SizeT | SizeT |
Public Types inherited from vtkTypedArray< T > | |
typedef vtkArray::CoordinateT | CoordinateT |
typedef vtkArray::SizeT | SizeT |
Public Types inherited from vtkArray | |
enum | { DENSE = 0 , SPARSE = 1 } |
typedef vtkObject | Superclass |
typedef vtkArrayExtents::CoordinateT | CoordinateT |
typedef vtkArrayExtents::DimensionT | DimensionT |
typedef vtkArrayExtents::SizeT | SizeT |
Public Member Functions | |
vtkTemplateTypeMacro (vtkDenseArray< T >, vtkTypedArray< T >) | |
void | PrintSelf (ostream &os, vtkIndent indent) override |
Methods invoked by print to print information about the object including superclasses. More... | |
bool | IsDense () override |
Returns true iff the underlying array storage is "dense", i.e. More... | |
const vtkArrayExtents & | GetExtents () override |
Returns the extents (the number of dimensions and size along each dimension) of the array. More... | |
SizeT | GetNonNullSize () override |
Returns the number of non-null values stored in the array. More... | |
void | GetCoordinatesN (const SizeT n, vtkArrayCoordinates &coordinates) override |
Returns the coordinates of the n-th value in the array, where n is in the range [0, GetNonNullSize()). More... | |
vtkArray * | DeepCopy () override |
Returns a new array that is a deep copy of this array. More... | |
const T & | GetValue (CoordinateT i) override |
Returns the value stored in the array at the given coordinates. More... | |
const T & | GetValue (CoordinateT i, CoordinateT j) override |
Returns the value stored in the array at the given coordinates. More... | |
const T & | GetValue (CoordinateT i, CoordinateT j, CoordinateT k) override |
Returns the value stored in the array at the given coordinates. More... | |
const T & | GetValue (const vtkArrayCoordinates &coordinates) override |
Returns the value stored in the array at the given coordinates. More... | |
const T & | GetValueN (const SizeT n) override |
Returns the n-th value stored in the array, where n is in the range [0, GetNonNullSize()). More... | |
void | SetValue (CoordinateT i, const T &value) override |
Overwrites the value stored in the array at the given coordinates. More... | |
void | SetValue (CoordinateT i, CoordinateT j, const T &value) override |
Overwrites the value stored in the array at the given coordinates. More... | |
void | SetValue (CoordinateT i, CoordinateT j, CoordinateT k, const T &value) override |
Overwrites the value stored in the array at the given coordinates. More... | |
void | SetValue (const vtkArrayCoordinates &coordinates, const T &value) override |
Overwrites the value stored in the array at the given coordinates. More... | |
void | SetValueN (const SizeT n, const T &value) override |
Overwrites the n-th value stored in the array, where n is in the range [0, GetNonNullSize()). More... | |
Public Member Functions inherited from vtkTypedArray< T > | |
vtkTemplateTypeMacro (vtkTypedArray< T >, vtkArray) | |
void | PrintSelf (ostream &os, vtkIndent indent) override |
Methods invoked by print to print information about the object including superclasses. More... | |
vtkVariant | GetVariantValue (const vtkArrayCoordinates &coordinates) override |
Returns the value stored in the array at the given coordinates. More... | |
vtkVariant | GetVariantValueN (const SizeT n) override |
Returns the n-th value stored in the array, where n is in the range [0, GetNonNullSize()). More... | |
void | SetVariantValue (const vtkArrayCoordinates &coordinates, const vtkVariant &value) override |
Overwrites the value stored in the array at the given coordinates. More... | |
void | SetVariantValueN (const SizeT n, const vtkVariant &value) override |
Overwrites the n-th value stored in the array, where n is in the range [0, GetNonNullSize()). More... | |
void | CopyValue (vtkArray *source, const vtkArrayCoordinates &source_coordinates, const vtkArrayCoordinates &target_coordinates) override |
Overwrites a value with a value retrieved from another array. More... | |
void | CopyValue (vtkArray *source, const SizeT source_index, const vtkArrayCoordinates &target_coordinates) override |
Overwrites a value with a value retrieved from another array. More... | |
void | CopyValue (vtkArray *source, const vtkArrayCoordinates &source_coordinates, const SizeT target_index) override |
Overwrites a value with a value retrieved from another array. More... | |
virtual const T & | GetValueN (const SizeT n)=0 |
Returns the n-th value stored in the array, where n is in the range [0, GetNonNullSize()). More... | |
virtual void | SetValueN (const SizeT n, const T &value)=0 |
Overwrites the n-th value stored in the array, where n is in the range [0, GetNonNullSize()). More... | |
vtkVariant | GetVariantValue (CoordinateT i) |
Returns the value stored in the array at the given coordinates. More... | |
vtkVariant | GetVariantValue (CoordinateT i, CoordinateT j) |
vtkVariant | GetVariantValue (CoordinateT i, CoordinateT j, CoordinateT k) |
virtual vtkVariant | GetVariantValue (const vtkArrayCoordinates &coordinates)=0 |
Returns the value stored in the array at the given coordinates. More... | |
void | SetVariantValue (CoordinateT i, const vtkVariant &value) |
Overwrites the value stored in the array at the given coordinates. More... | |
void | SetVariantValue (CoordinateT i, CoordinateT j, const vtkVariant &value) |
void | SetVariantValue (CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant &value) |
virtual void | SetVariantValue (const vtkArrayCoordinates &coordinates, const vtkVariant &value)=0 |
Overwrites the value stored in the array at the given coordinates. More... | |
Public Member Functions inherited from vtkArray | |
virtual vtkTypeBool | IsA (const char *type) |
Return 1 if this class is the same type of (or a subclass of) the named class. More... | |
vtkArray * | NewInstance () const |
void | PrintSelf (ostream &os, vtkIndent indent) override |
Methods invoked by print to print information about the object including superclasses. More... | |
virtual bool | IsDense ()=0 |
Returns true iff the underlying array storage is "dense", i.e. More... | |
vtkArrayRange | GetExtent (DimensionT dimension) |
Returns the extent (valid coordinate range) along the given dimension. More... | |
virtual const vtkArrayExtents & | GetExtents ()=0 |
Returns the extents (the number of dimensions and size along each dimension) of the array. More... | |
DimensionT | GetDimensions () |
Returns the number of dimensions stored in the array. More... | |
SizeT | GetSize () |
Returns the number of values stored in the array. More... | |
virtual SizeT | GetNonNullSize ()=0 |
Returns the number of non-null values stored in the array. More... | |
void | SetName (const vtkStdString &name) |
Sets the array name. More... | |
vtkStdString | GetName () |
Returns the array name. More... | |
void | SetDimensionLabel (DimensionT i, const vtkStdString &label) |
Sets the label for the i-th array dimension. More... | |
vtkStdString | GetDimensionLabel (DimensionT i) |
Returns the label for the i-th array dimension. More... | |
virtual void | GetCoordinatesN (const SizeT n, vtkArrayCoordinates &coordinates)=0 |
Returns the coordinates of the n-th value in the array, where n is in the range [0, GetNonNullSize()). More... | |
virtual vtkVariant | GetVariantValueN (const SizeT n)=0 |
Returns the n-th value stored in the array, where n is in the range [0, GetNonNullSize()). More... | |
virtual void | SetVariantValueN (const SizeT n, const vtkVariant &value)=0 |
Overwrites the n-th value stored in the array, where n is in the range [0, GetNonNullSize()). More... | |
virtual vtkArray * | DeepCopy ()=0 |
Returns a new array that is a deep copy of this array. More... | |
void | Resize (const CoordinateT i) |
Resizes the array to the given extents (number of dimensions and size of each dimension). More... | |
void | Resize (const CoordinateT i, const CoordinateT j) |
Resizes the array to the given extents (number of dimensions and size of each dimension). More... | |
void | Resize (const CoordinateT i, const CoordinateT j, const CoordinateT k) |
Resizes the array to the given extents (number of dimensions and size of each dimension). More... | |
void | Resize (const vtkArrayRange &i) |
Resizes the array to the given extents (number of dimensions and size of each dimension). More... | |
void | Resize (const vtkArrayRange &i, const vtkArrayRange &j) |
Resizes the array to the given extents (number of dimensions and size of each dimension). More... | |
void | Resize (const vtkArrayRange &i, const vtkArrayRange &j, const vtkArrayRange &k) |
Resizes the array to the given extents (number of dimensions and size of each dimension). More... | |
void | Resize (const vtkArrayExtents &extents) |
Resizes the array to the given extents (number of dimensions and size of each dimension). More... | |
vtkVariant | GetVariantValue (CoordinateT i) |
Returns the value stored in the array at the given coordinates. More... | |
vtkVariant | GetVariantValue (CoordinateT i, CoordinateT j) |
Returns the value stored in the array at the given coordinates. More... | |
vtkVariant | GetVariantValue (CoordinateT i, CoordinateT j, CoordinateT k) |
Returns the value stored in the array at the given coordinates. More... | |
void | SetVariantValue (CoordinateT i, const vtkVariant &value) |
Overwrites the value stored in the array at the given coordinates. More... | |
void | SetVariantValue (CoordinateT i, CoordinateT j, const vtkVariant &value) |
Overwrites the value stored in the array at the given coordinates. More... | |
void | SetVariantValue (CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant &value) |
Overwrites the value stored in the array at the given coordinates. More... | |
Public Member Functions inherited from vtkObject | |
vtkBaseTypeMacro (vtkObject, vtkObjectBase) | |
virtual void | DebugOn () |
Turn debugging output on. More... | |
virtual void | DebugOff () |
Turn debugging output off. More... | |
bool | GetDebug () |
Get the value of the debug flag. More... | |
void | SetDebug (bool debugFlag) |
Set the value of the debug flag. More... | |
virtual void | Modified () |
Update the modification time for this object. More... | |
virtual vtkMTimeType | GetMTime () |
Return this object's modified time. More... | |
void | PrintSelf (ostream &os, vtkIndent indent) override |
Methods invoked by print to print information about the object including superclasses. More... | |
void | RemoveObserver (unsigned long tag) |
void | RemoveObservers (unsigned long event) |
void | RemoveObservers (const char *event) |
void | RemoveAllObservers () |
vtkTypeBool | HasObserver (unsigned long event) |
vtkTypeBool | HasObserver (const char *event) |
int | InvokeEvent (unsigned long event) |
int | InvokeEvent (const char *event) |
unsigned long | AddObserver (unsigned long event, vtkCommand *, float priority=0.0f) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. More... | |
unsigned long | AddObserver (const char *event, vtkCommand *, float priority=0.0f) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. More... | |
vtkCommand * | GetCommand (unsigned long tag) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. More... | |
void | RemoveObserver (vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. More... | |
void | RemoveObservers (unsigned long event, vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. More... | |
void | RemoveObservers (const char *event, vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. More... | |
vtkTypeBool | HasObserver (unsigned long event, vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. More... | |
vtkTypeBool | HasObserver (const char *event, vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. More... | |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(), float priority=0.0f) |
Overloads to AddObserver that allow developers to add class member functions as callbacks for events. More... | |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
Overloads to AddObserver that allow developers to add class member functions as callbacks for events. More... | |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, bool(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
Allow user to set the AbortFlagOn() with the return value of the callback method. More... | |
int | InvokeEvent (unsigned long event, void *callData) |
This method invokes an event and return whether the event was aborted or not. More... | |
int | InvokeEvent (const char *event, void *callData) |
This method invokes an event and return whether the event was aborted or not. More... | |
Public Member Functions inherited from vtkObjectBase | |
const char * | GetClassName () const |
Return the class name as a string. More... | |
virtual vtkTypeBool | IsA (const char *name) |
Return 1 if this class is the same type of (or a subclass of) the named class. More... | |
virtual vtkIdType | GetNumberOfGenerationsFromBase (const char *name) |
Given the name of a base class of this class type, return the distance of inheritance between this class type and the named class (how many generations of inheritance are there between this class and the named class). More... | |
virtual void | Delete () |
Delete a VTK object. More... | |
virtual void | FastDelete () |
Delete a reference to this object. More... | |
void | InitializeObjectBase () |
void | Print (ostream &os) |
Print an object to an ostream. More... | |
virtual void | Register (vtkObjectBase *o) |
Increase the reference count (mark as used by another object). More... | |
virtual void | UnRegister (vtkObjectBase *o) |
Decrease the reference count (release by another object). More... | |
int | GetReferenceCount () |
Return the current reference count of this object. More... | |
void | SetReferenceCount (int) |
Sets the reference count. More... | |
bool | GetIsInMemkind () const |
A local state flag that remembers whether this object lives in the normal or extended memory space. More... | |
virtual void | PrintHeader (ostream &os, vtkIndent indent) |
Methods invoked by print to print information about the object including superclasses. More... | |
virtual void | PrintTrailer (ostream &os, vtkIndent indent) |
Methods invoked by print to print information about the object including superclasses. More... | |
Static Public Member Functions | |
static vtkDenseArray< T > * | New () |
Static Public Member Functions inherited from vtkArray | |
static vtkTypeBool | IsTypeOf (const char *type) |
static vtkArray * | SafeDownCast (vtkObjectBase *o) |
static vtkArray * | CreateArray (int StorageType, int ValueType) |
Creates a new array where StorageType is one of vtkArray::DENSE or vtkArray::SPARSE, and ValueType is one of VTK_CHAR, VTK_UNSIGNED_CHAR, VTK_SHORT, VTK_UNSIGNED_SHORT, VTK_INT, VTK_UNSIGNED_INT, VTK_LONG, VTK_UNSIGNED_LONG, VTK_DOUBLE, VTK_ID_TYPE, or VTK_STRING. More... | |
Static Public Member Functions inherited from vtkObject | |
static vtkObject * | New () |
Create an object with Debug turned off, modified time initialized to zero, and reference counting on. More... | |
static void | BreakOnError () |
This method is called when vtkErrorMacro executes. More... | |
static void | SetGlobalWarningDisplay (int val) |
This is a global flag that controls whether any debug, warning or error messages are displayed. More... | |
static void | GlobalWarningDisplayOn () |
This is a global flag that controls whether any debug, warning or error messages are displayed. More... | |
static void | GlobalWarningDisplayOff () |
This is a global flag that controls whether any debug, warning or error messages are displayed. More... | |
static int | GetGlobalWarningDisplay () |
This is a global flag that controls whether any debug, warning or error messages are displayed. More... | |
Static Public Member Functions inherited from vtkObjectBase | |
static vtkTypeBool | IsTypeOf (const char *name) |
Return 1 if this class type is the same type of (or a subclass of) the named class. More... | |
static vtkIdType | GetNumberOfGenerationsFromBaseType (const char *name) |
Given a the name of a base class of this class type, return the distance of inheritance between this class type and the named class (how many generations of inheritance are there between this class and the named class). More... | |
static vtkObjectBase * | New () |
Create an object with Debug turned off, modified time initialized to zero, and reference counting on. More... | |
static void | SetMemkindDirectory (const char *directoryname) |
The name of a directory, ideally mounted -o dax, to memory map an extended memory space within. More... | |
static bool | GetUsingMemkind () |
A global state flag that controls whether vtkObjects are constructed in the usual way (the default) or within the extended memory space. More... | |
void | ExternalStorage (const vtkArrayExtents &extents, MemoryBlock *storage) |
Initializes the array to use an externally-allocated memory block. More... | |
void | Fill (const T &value) |
Fills every element in the array with the given value. More... | |
T & | operator[] (const vtkArrayCoordinates &coordinates) |
Returns a value by-reference, which is useful for performance and code-clarity. More... | |
const T * | GetStorage () const |
Returns a read-only reference to the underlying storage. More... | |
T * | GetStorage () |
Returns a mutable reference to the underlying storage. More... | |
vtkDenseArray () | |
Stores the current array extents (its size along each dimension) More... | |
~vtkDenseArray () override | |
Stores the current array extents (its size along each dimension) More... | |
Additional Inherited Members | |
Protected Member Functions inherited from vtkTypedArray< T > | |
vtkTypedArray ()=default | |
~vtkTypedArray () override=default | |
Protected Member Functions inherited from vtkArray | |
virtual vtkObjectBase * | NewInstanceInternal () const |
vtkArray () | |
~vtkArray () override | |
Protected Member Functions inherited from vtkObject | |
vtkObject () | |
~vtkObject () override | |
void | RegisterInternal (vtkObjectBase *, vtkTypeBool check) override |
void | UnRegisterInternal (vtkObjectBase *, vtkTypeBool check) override |
void | InternalGrabFocus (vtkCommand *mouseEvents, vtkCommand *keypressEvents=nullptr) |
These methods allow a command to exclusively grab all events. More... | |
void | InternalReleaseFocus () |
These methods allow a command to exclusively grab all events. More... | |
Protected Member Functions inherited from vtkObjectBase | |
vtkObjectBase () | |
virtual | ~vtkObjectBase () |
virtual void | RegisterInternal (vtkObjectBase *, vtkTypeBool check) |
virtual void | UnRegisterInternal (vtkObjectBase *, vtkTypeBool check) |
virtual void | ReportReferences (vtkGarbageCollector *) |
vtkObjectBase (const vtkObjectBase &) | |
void | operator= (const vtkObjectBase &) |
Static Protected Member Functions inherited from vtkObjectBase | |
static vtkMallocingFunction | GetCurrentMallocFunction () |
static vtkReallocingFunction | GetCurrentReallocFunction () |
static vtkFreeingFunction | GetCurrentFreeFunction () |
static vtkFreeingFunction | GetAlternateFreeFunction () |
Protected Attributes inherited from vtkObject | |
bool | Debug |
vtkTimeStamp | MTime |
vtkSubjectHelper * | SubjectHelper |
Protected Attributes inherited from vtkObjectBase | |
std::atomic< int32_t > | ReferenceCount |
vtkWeakPointerBase ** | WeakPointers |
Contiguous storage for N-way arrays.
vtkDenseArray is a concrete vtkArray implementation that stores values using a contiguous block of memory. Values are stored with fortran ordering, meaning that if you iterated over the memory block, the left-most coordinates would vary the fastest.
In addition to the retrieval and update methods provided by vtkTypedArray, vtkDenseArray provides methods to:
Fill the entire array with a specific value.
Retrieve a pointer to the storage memory block.
Definition at line 133 of file vtkDenseArray.h.
typedef vtkArray::CoordinateT vtkDenseArray< T >::CoordinateT |
Definition at line 140 of file vtkDenseArray.h.
typedef vtkArray::DimensionT vtkDenseArray< T >::DimensionT |
Definition at line 141 of file vtkDenseArray.h.
typedef vtkArray::SizeT vtkDenseArray< T >::SizeT |
Definition at line 142 of file vtkDenseArray.h.
|
protected |
Stores the current array extents (its size along each dimension)
|
overrideprotected |
Stores the current array extents (its size along each dimension)
|
static |
vtkDenseArray< T >::vtkTemplateTypeMacro | ( | vtkDenseArray< T > | , |
vtkTypedArray< T > | |||
) |
|
overridevirtual |
|
overridevirtual |
Returns true iff the underlying array storage is "dense", i.e.
that GetSize() and GetNonNullSize() will always return the same value. If not, the array is "sparse".
Implements vtkArray.
|
overridevirtual |
Returns the extents (the number of dimensions and size along each dimension) of the array.
Implements vtkArray.
|
overridevirtual |
|
overridevirtual |
Returns the coordinates of the n-th value in the array, where n is in the range [0, GetNonNullSize()).
Note that the order in which coordinates are visited is undefined, but is guaranteed to match the order in which values are visited using vtkTypedArray::GetValueN() and vtkTypedArray::SetValueN().
Implements vtkArray.
|
overridevirtual |
Returns a new array that is a deep copy of this array.
Implements vtkArray.
|
overridevirtual |
Returns the value stored in the array at the given coordinates.
Note that the number of dimensions in the supplied coordinates must match the number of dimensions in the array.
Implements vtkTypedArray< T >.
|
overridevirtual |
Returns the value stored in the array at the given coordinates.
Note that the number of dimensions in the supplied coordinates must match the number of dimensions in the array.
Implements vtkTypedArray< T >.
|
overridevirtual |
Returns the value stored in the array at the given coordinates.
Note that the number of dimensions in the supplied coordinates must match the number of dimensions in the array.
Implements vtkTypedArray< T >.
|
overridevirtual |
Returns the value stored in the array at the given coordinates.
Note that the number of dimensions in the supplied coordinates must match the number of dimensions in the array.
Implements vtkTypedArray< T >.
|
overridevirtual |
Returns the n-th value stored in the array, where n is in the range [0, GetNonNullSize()).
This is useful for efficiently visiting every value in the array. Note that the order in which values are visited is undefined, but is guaranteed to match the order used by vtkArray::GetCoordinatesN().
Implements vtkTypedArray< T >.
|
overridevirtual |
Overwrites the value stored in the array at the given coordinates.
Note that the number of dimensions in the supplied coordinates must match the number of dimensions in the array.
Implements vtkTypedArray< T >.
|
overridevirtual |
Overwrites the value stored in the array at the given coordinates.
Note that the number of dimensions in the supplied coordinates must match the number of dimensions in the array.
Implements vtkTypedArray< T >.
|
overridevirtual |
Overwrites the value stored in the array at the given coordinates.
Note that the number of dimensions in the supplied coordinates must match the number of dimensions in the array.
Implements vtkTypedArray< T >.
|
overridevirtual |
Overwrites the value stored in the array at the given coordinates.
Note that the number of dimensions in the supplied coordinates must match the number of dimensions in the array.
Implements vtkTypedArray< T >.
|
overridevirtual |
Overwrites the n-th value stored in the array, where n is in the range [0, GetNonNullSize()).
This is useful for efficiently visiting every value in the array. Note that the order in which values are visited is undefined, but is guaranteed to match the order used by vtkArray::GetCoordinatesN().
Implements vtkTypedArray< T >.
void vtkDenseArray< T >::ExternalStorage | ( | const vtkArrayExtents & | extents, |
MemoryBlock * | storage | ||
) |
Initializes the array to use an externally-allocated memory block.
The supplied MemoryBlock must be large enough to store extents.GetSize() values. The contents of the memory must be stored contiguously with fortran ordering,
Dimension-labels are undefined after calling ExternalStorage() - you should initialize them accordingly.
The array will use the supplied memory for storage until the array goes out of scope, is configured to use a different memory block by calling ExternalStorage() again, or is configured to use internally-allocated memory by calling Resize().
Note that the array will delete the supplied memory block when it is no longer in use. caller's responsibility to ensure that the memory does not go out-of-scope until the array has been destroyed or is no longer using it.
void vtkDenseArray< T >::Fill | ( | const T & | value | ) |
Fills every element in the array with the given value.
T & vtkDenseArray< T >::operator[] | ( | const vtkArrayCoordinates & | coordinates | ) |
Returns a value by-reference, which is useful for performance and code-clarity.
const T * vtkDenseArray< T >::GetStorage | ( | ) | const |
Returns a read-only reference to the underlying storage.
Values are stored contiguously with fortran ordering.
T * vtkDenseArray< T >::GetStorage | ( | ) |
Returns a mutable reference to the underlying storage.
Values are stored contiguously with fortran ordering. Use at your own risk!