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 
00121   const vtkArrayRange GetExtent(DimensionT dimension);
00124   virtual const vtkArrayExtents& GetExtents() = 0;
00125 
00128   DimensionT GetDimensions();
00129 
00136   SizeT GetSize();
00137 
00141   virtual SizeT GetNonNullSize() = 0;
00142 
00144   void SetName(const vtkStdString& name);
00146   vtkStdString GetName();
00147 
00149   void SetDimensionLabel(DimensionT i, const vtkStdString& label);
00150 
00152   vtkStdString GetDimensionLabel(DimensionT i);
00153 
00159   virtual void GetCoordinatesN(const SizeT n, vtkArrayCoordinates& coordinates) = 0;
00160 
00162 
00165   inline vtkVariant GetVariantValue(CoordinateT i);
00166   inline vtkVariant GetVariantValue(CoordinateT i, CoordinateT j);
00167   inline vtkVariant GetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k);
00168   virtual vtkVariant GetVariantValue(const vtkArrayCoordinates& coordinates) = 0;
00170 
00176   virtual vtkVariant GetVariantValueN(const SizeT n) = 0;
00177 
00179 
00182   inline void SetVariantValue(CoordinateT i, const vtkVariant& value);
00183   inline void SetVariantValue(CoordinateT i, CoordinateT j, const vtkVariant& value);
00184   inline void SetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant& value);
00185   virtual void SetVariantValue(const vtkArrayCoordinates& coordinates, const vtkVariant& value) = 0;
00187 
00193   virtual void SetVariantValueN(const SizeT n, const vtkVariant& value) = 0;
00194 
00196 
00198   virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const vtkArrayCoordinates& target_coordinates) = 0;
00199   virtual void CopyValue(vtkArray* source, const SizeT source_index, const vtkArrayCoordinates& target_coordinates) = 0;
00200   virtual void CopyValue(vtkArray* source, const vtkArrayCoordinates& source_coordinates, const SizeT target_index) = 0;
00202 
00204   virtual vtkArray* DeepCopy() = 0;
00205 
00206 protected:
00207   vtkArray();
00208   ~vtkArray();
00209 
00210 private:
00211   vtkArray(const vtkArray&); // Not implemented
00212   void operator=(const vtkArray&); // Not implemented
00213 
00215   vtkStdString Name;
00216 
00219   virtual void InternalResize(const vtkArrayExtents&) = 0;
00220 
00222   virtual void InternalSetDimensionLabel(DimensionT i, const vtkStdString& label) = 0;
00223 
00225 
00226   virtual vtkStdString InternalGetDimensionLabel(DimensionT i) = 0;
00227 };
00229 
00230 vtkVariant vtkArray::GetVariantValue(CoordinateT i)
00231 {
00232   return this->GetVariantValue(vtkArrayCoordinates(i));
00233 }
00234 
00235 vtkVariant vtkArray::GetVariantValue(CoordinateT i, CoordinateT j)
00236 {
00237   return this->GetVariantValue(vtkArrayCoordinates(i, j));
00238 }
00239 
00240 vtkVariant vtkArray::GetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k)
00241 {
00242   return this->GetVariantValue(vtkArrayCoordinates(i, j, k));
00243 }
00244 
00245 void vtkArray::SetVariantValue(CoordinateT i, const vtkVariant& value)
00246 {
00247   this->SetVariantValue(vtkArrayCoordinates(i), value);
00248 }
00249 
00250 void vtkArray::SetVariantValue(CoordinateT i, CoordinateT j, const vtkVariant& value)
00251 {
00252   this->SetVariantValue(vtkArrayCoordinates(i, j), value);
00253 }
00254 
00255 void vtkArray::SetVariantValue(CoordinateT i, CoordinateT j, CoordinateT k, const vtkVariant& value)
00256 {
00257   this->SetVariantValue(vtkArrayCoordinates(i, j, k), value);
00258 }
00259 
00260 #endif
00261