VTK
dox/Common/vtkArray.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkArray.h
00005 
00006 -------------------------------------------------------------------------
00007   Copyright 2008 Sandia Corporation.
00008   Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00009   the U.S. Government retains certain rights in this software.
00010 -------------------------------------------------------------------------
00011 
00012   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00013   All rights reserved.
00014   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00015 
00016      This software is distributed WITHOUT ANY WARRANTY; without even
00017      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00018      PURPOSE.  See the above copyright notice for more information.
00019 
00020 =========================================================================*/
00021 
00059 #ifndef __vtkArray_h
00060 #define __vtkArray_h
00061 
00062 #include "vtkArrayCoordinates.h"
00063 #include "vtkArrayExtents.h"
00064 #include "vtkObject.h"
00065 #include "vtkStdString.h"
00066 #include "vtkVariant.h"
00067 
00068 class VTK_COMMON_EXPORT vtkArray : public vtkObject
00069 {
00070 public:
00071   vtkTypeMacro(vtkArray, vtkObject);
00072   void PrintSelf(ostream &os, vtkIndent indent);
00073 
00074   typedef vtkArrayExtents::CoordinateT CoordinateT;
00075   typedef vtkArrayExtents::DimensionT DimensionT;
00076   typedef vtkArrayExtents::SizeT SizeT;
00077 
00078 //BTX
00079   enum
00080   {
00082     DENSE = 0,
00084     SPARSE = 1
00085   };
00086 //ETX
00087 
00094   static vtkArray* CreateArray(int StorageType, int ValueType);
00095 
00099   virtual bool IsDense() = 0;
00100 
00102 
00110   void Resize(const CoordinateT i);
00111   void Resize(const CoordinateT i, const CoordinateT j);
00112   void Resize(const CoordinateT i, const CoordinateT j, const CoordinateT k);
00113   void Resize(const vtkArrayRange& i);
00114   void Resize(const vtkArrayRange& i, const vtkArrayRange& j);
00115   void Resize(const vtkArrayRange& i, const vtkArrayRange& j, const vtkArrayRange& k);
00116   void Resize(const vtkArrayExtents& extents);
00118 
00120 
00122   const vtkArrayRange GetExtent(DimensionT dimension);
00123   // Description:
00124   // Returns the extents (the number of dimensions and size along each
00125   // dimension) of the array.
00126   virtual const vtkArrayExtents& GetExtents() = 0;
00128 
00131   DimensionT GetDimensions();
00132 
00139   SizeT GetSize();
00140 
00144   virtual SizeT GetNonNullSize() = 0;
00145 
00147 
00148   void SetName(const vtkStdString& name);
00149   // Description:
00150   // Returns the array name.
00151   vtkStdString GetName();
00153 
00155   void SetDimensionLabel(DimensionT i, const vtkStdString& label);
00156 
00158   vtkStdString GetDimensionLabel(DimensionT i);
00159 
00165   virtual void GetCoordinatesN(const SizeT n, vtkArrayCoordinates& coordinates) = 0;
00166 
00168 
00171   inline vtkVariant GetVariantValue(CoordinateT i);
00172   inline vtkVariant GetVariantValue(CoordinateT i, CoordinateT j);
00173   inline vtkVariant GetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k);
00174   virtual vtkVariant GetVariantValue(const vtkArrayCoordinates& coordinates) = 0;
00176 
00182   virtual vtkVariant GetVariantValueN(const SizeT n) = 0;
00183 
00185 
00188   inline void SetVariantValue(CoordinateT i, const vtkVariant& value);
00189   inline void SetVariantValue(CoordinateT i, CoordinateT j, const vtkVariant& value);
00190   inline void SetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant& value);
00191   virtual void SetVariantValue(const vtkArrayCoordinates& coordinates, const vtkVariant& value) = 0;
00193 
00199   virtual void SetVariantValueN(const SizeT n, const vtkVariant& value) = 0;
00200 
00202 
00204   virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const vtkArrayCoordinates& target_coordinates) = 0;
00205   virtual void CopyValue(vtkArray* source, const SizeT source_index, const vtkArrayCoordinates& target_coordinates) = 0;
00206   virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const SizeT target_index) = 0;
00208 
00210   virtual vtkArray* DeepCopy() = 0;
00211 
00212 protected:
00213   vtkArray();
00214   ~vtkArray();
00215 
00216 private:
00217   vtkArray(const vtkArray&); // Not implemented
00218   void operator=(const vtkArray&); // Not implemented
00219 
00221   vtkStdString Name;
00222 
00225   virtual void InternalResize(const vtkArrayExtents&) = 0;
00226 
00228   virtual void InternalSetDimensionLabel(DimensionT i, const vtkStdString& label) = 0;
00229 
00231 
00232   virtual vtkStdString InternalGetDimensionLabel(DimensionT i) = 0;
00233 };
00235 
00236 vtkVariant vtkArray::GetVariantValue(CoordinateT i)
00237 {
00238   return this->GetVariantValue(vtkArrayCoordinates(i));
00239 }
00240 
00241 vtkVariant vtkArray::GetVariantValue(CoordinateT i, CoordinateT j)
00242 {
00243   return this->GetVariantValue(vtkArrayCoordinates(i, j));
00244 }
00245 
00246 vtkVariant vtkArray::GetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k)
00247 {
00248   return this->GetVariantValue(vtkArrayCoordinates(i, j, k));
00249 }
00250 
00251 void vtkArray::SetVariantValue(CoordinateT i, const vtkVariant& value)
00252 {
00253   this->SetVariantValue(vtkArrayCoordinates(i), value);
00254 }
00255 
00256 void vtkArray::SetVariantValue(CoordinateT i, CoordinateT j, const vtkVariant& value)
00257 {
00258   this->SetVariantValue(vtkArrayCoordinates(i, j), value);
00259 }
00260 
00261 void vtkArray::SetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant& value)
00262 {
00263   this->SetVariantValue(vtkArrayCoordinates(i, j, k), value);
00264 }
00265 
00266 #endif
00267