Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

247 lines
9.0 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkAbstractArray.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
//
// .NAME vtkAbstractArray - Abstract superclass for all arrays
//
// .SECTION Description
//
// vtkAbstractArray is an abstract superclass for data array objects.
// This class defines an API that all subclasses must support. The
// data type must be assignable and copy-constructible, but no other
// assumptions about its type are made. Most of the subclasses of
// this array deal with numeric data either as scalars or tuples of
// scalars. A program can use the IsNumeric() method to check whether
// an instance of vtkAbstractArray contains numbers. It is also
// possible to test for this by attempting to SafeDownCast an array to
// an instance of vtkDataArray, although this assumes that all numeric
// arrays will always be descended from vtkDataArray.
//
// <p>
//
// Every array has a character-string name. The naming of the array
// occurs automatically when it is instantiated, but you are free to
// change this name using the SetName() method. (The array name is
// used for data manipulation.)
//
// .SECTION See Also
// vtkDataArray vtkStringArray vtkCellArray
#ifndef __vtkAbstractArray_h
#define __vtkAbstractArray_h
#include "vtkObject.h"
class vtkIdList;
class vtkIdTypeArray;
class vtkDataArray;
#define VTK_MAXIMUM_NUMBER_OF_CACHED_COMPONENT_RANGES 11
class VTK_COMMON_EXPORT vtkAbstractArray : public vtkObject
{
public:
vtkTypeRevisionMacro(vtkAbstractArray,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Allocate memory for this array. Delete old storage only if necessary.
// Note that ext is no longer used.
virtual int Allocate(vtkIdType sz, vtkIdType ext=1000) = 0;
// Description:
// Release storage and reset array to initial state.
virtual void Initialize() = 0;
// Description:
// Return the underlying data type. An integer indicating data type is
// returned as specified in vtkSetGet.h.
virtual int GetDataType() = 0;
// Description:
// Return the size of the underlying data type. For a bit, 0 is
// returned. XXX FIXME How will this method behave for
// variably-sized objects?
virtual int GetDataTypeSize() = 0;
static unsigned long GetDataTypeSize(int type);
// Description:
// Given a list of indices, return an array of values. The caller
// must ensure that enough room has been allocated within the output
// array to hold the data and that the data types match well enough
// to allow any necessary conversions.
virtual void GetValues(vtkIdList *indices, vtkAbstractArray *output) = 0;
// Description:
// Get the values for the range of indices specified (i.e., p1->p2
// inclusive). You must insure that the output array has been
// previously allocated with enough space to hold the data and that
// the type of the output array is compatible with the type of this
// array.
virtual void GetValues(vtkIdType p1, vtkIdType p2, vtkAbstractArray *output) = 0;
// Description:
// Return the number of components in a single element of the array.
// For vtkDataArray and its subclasses, this is the number of
// components in a tuple. Arrays with variable-length elements
// (such as vtkStringArray and vtkCellArray) should return 0.
virtual int GetNumberOfElementComponents() = 0;
// Description:
// Return the size, in bytes, of the lowest-level element of an
// array. For vtkDataArray and subclasses this is the size of the
// data type. For vtkStringArray, this is
// sizeof(vtkStdString::value_type), which winds up being
// sizeof(char).
virtual int GetElementComponentSize() = 0;
// Description:
// Return a void pointer. For image pipeline interface and other
// special pointer manipulation.
virtual void *GetVoidPointer(vtkIdType id) = 0;
// Description:
// Deep copy of data. Implementation left to subclasses, which
// should support as many type conversions as possible given the
// data type.
virtual void DeepCopy(vtkAbstractArray *da) = 0;
// Description:
// Copy an element from one array into an element on this array.
virtual void CopyValue(int toIndex, int fromIndex,
vtkAbstractArray *sourceArray) = 0;
// Description:
// Free any unnecessary memory.
// Description:
// Resize object to just fit data requirement. Reclaims extra memory.
virtual void Squeeze() = 0;
// Description:
// Resize the array while conserving the data.
virtual int Resize(vtkIdType numTuples) = 0;
// Description:
// Reset to an empty state, without freeing any memory.
void Reset()
{this->MaxId = -1;}
// Description:
// Return the size of the data.
vtkIdType GetSize()
{return this->Size;}
// Description:
// What is the maximum id currently in the array.
vtkIdType GetMaxId()
{return this->MaxId;}
// Description:
// This method lets the user specify data to be held by the array. The
// array argument is a pointer to the data. size is the size of
// the array supplied by the user. Set save to 1 to keep the class
// from deleting the array when it cleans up or reallocates memory.
// The class uses the actual array provided; it does not copy the data
// from the supplied array.
virtual void SetVoidArray(void *vtkNotUsed(array),
vtkIdType vtkNotUsed(size),
int vtkNotUsed(save)) {};
// Description:
// Return the memory in kilobytes consumed by this data array. Used to
// support streaming and reading/writing data. The value returned is
// guaranteed to be greater than or equal to the memory required to
// actually represent the data represented by this object. The
// information returned is valid only after the pipeline has
// been updated.
virtual unsigned long GetActualMemorySize() = 0;
// Description:
// Set/get array's name
void SetName(const char* name);
const char* GetName();
// Description:
// Get the name of a data type as a string.
// XXX FIXME Find this macro and move it into vtkTypeNames.h or
// something.
virtual const char *GetDataTypeAsString( void )
{ return vtkImageScalarTypeNameMacro( this->GetDataType() ); }
// This function will only make sense once vtkDataArray is
// re-parented to be a subclass of vtkAbstractArray. It is
// commented out for now.
// Description:
// Creates an array for dataType where dataType is one of
// VTK_BIT, VTK_CHAR, VTK_UNSIGNED_CHAR, VTK_SHORT,
// VTK_UNSIGNED_SHORT, VTK_INT, VTK_UNSIGNED_INT, VTK_LONG,
// VTK_UNSIGNED_LONG, VTK_DOUBLE, VTK_DOUBLE, VTK_ID_TYPE,
// VTK_STRING, VTK_CELL.
// Note that the data array returned has be deleted by the
// user.
// static vtkAbstractArray* CreateArray(int dataType);
// Description:
// This method is here to make backward compatibility easier. It
// must return true if and only if an array contains numeric data.
virtual bool IsNumeric() = 0;
// Description:
// Flatten an arbitrary array into two separate numeric arrays. The
// first contains all the data in the source array; the second, the
// index of the end of each element. This function is meant to
// assist reading and writing arrays with variable-length elements
// such as vtkStringArray and vtkCellArray. The arrays will be
// created within the method body: the caller is responsible for
// deleting them when no longer needed.
//
// <p>
//
// For example, a string array with the elements "This" "Is" "A"
// "Test" would be converted into the following two arrays:
//
// Data: (unsigned char array) ThisIsATest
// Offsets: 3 5 6 10
//
// vtkDataArray also implements this method, although in practice
// you shouldn't need it. It ignores the offsets array and takes
// its tuple-size information from the data array.
virtual void ConvertToContiguous(vtkDataArray **Data, vtkIdTypeArray **Offsets) = 0;
// Description:
// This is the inverse of ConvertToContiguous(), above.
virtual void ConvertFromContiguous(vtkDataArray *Data, vtkIdTypeArray *Offsets) = 0;
protected:
// Construct object with default tuple dimension (number of components) of 1.
vtkAbstractArray(vtkIdType numComp=1);
~vtkAbstractArray();
vtkIdType Size; // allocated size of data
vtkIdType MaxId; // maximum index inserted thus far
char* Name;
int DataType; // uses constants in vtkSystemIncludes.h
private:
vtkAbstractArray(const vtkAbstractArray&); // Not implemented.
void operator=(const vtkAbstractArray&); // Not implemented.
};
#endif