VTK
vtkDenseArray.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkDenseArray.h
5 
6 -------------------------------------------------------------------------
7  Copyright 2008 Sandia Corporation.
8  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9  the U.S. Government retains certain rights in this software.
10 -------------------------------------------------------------------------
11 
12  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
13  All rights reserved.
14  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
15 
16  This software is distributed WITHOUT ANY WARRANTY; without even
17  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
18  PURPOSE. See the above copyright notice for more information.
19 
20 =========================================================================*/
21 
51 #ifndef vtkDenseArray_h
52 #define vtkDenseArray_h
53 
54 #include "vtkArrayCoordinates.h"
55 #include "vtkObjectFactory.h"
56 #include "vtkTypedArray.h"
57 #include "vtkTypeTemplate.h"
58 
59 template<typename T>
61  public vtkTypeTemplate<vtkDenseArray<T>, vtkTypedArray<T> >
62 {
63 public:
64  static vtkDenseArray<T>* New();
65  void PrintSelf(ostream &os, vtkIndent indent);
66 
68  typedef typename vtkArray::DimensionT DimensionT;
69  typedef typename vtkArray::SizeT SizeT;
70 
71  // vtkArray API
72  bool IsDense();
75  void GetCoordinatesN(const SizeT n, vtkArrayCoordinates& coordinates);
77 
78  // vtkTypedArray API
79  const T& GetValue(CoordinateT i);
82  const T& GetValue(const vtkArrayCoordinates& coordinates);
83  const T& GetValueN(const SizeT n);
84  void SetValue(CoordinateT i, const T& value);
85  void SetValue(CoordinateT i, CoordinateT j, const T& value);
87  void SetValue(const vtkArrayCoordinates& coordinates, const T& value);
88  void SetValueN(const SizeT n, const T& value);
89 
90  // vtkDenseArray API
91 
93 
97  {
98  public:
99  virtual ~MemoryBlock();
101 
102 
103  virtual T* GetAddress() = 0;
104  };
106 
108 
112  public MemoryBlock
113  {
114  public:
116  virtual ~HeapMemoryBlock();
117  virtual T* GetAddress();
119 
120  private:
121  T* Storage;
122  };
123 
125 
128  public MemoryBlock
129  {
130  public:
131  StaticMemoryBlock(T* const storage);
132  virtual T* GetAddress();
134 
135  private:
136  T* Storage;
137  };
138 
152  void ExternalStorage(const vtkArrayExtents& extents, MemoryBlock* storage);
153 
155  void Fill(const T& value);
156 
159  T& operator[](const vtkArrayCoordinates& coordinates);
160 
163  const T* GetStorage() const;
164 
168 
169 protected:
172 
173 private:
174  vtkDenseArray(const vtkDenseArray&); // Not implemented
175  void operator=(const vtkDenseArray&); // Not implemented
176 
177  void InternalResize(const vtkArrayExtents& extents);
178  void InternalSetDimensionLabel(DimensionT i, const vtkStdString& label);
179  vtkStdString InternalGetDimensionLabel(DimensionT i);
180  inline vtkIdType MapCoordinates(CoordinateT i);
181  inline vtkIdType MapCoordinates(CoordinateT i, CoordinateT j);
182  inline vtkIdType MapCoordinates(CoordinateT i, CoordinateT j, CoordinateT k);
183  inline vtkIdType MapCoordinates(const vtkArrayCoordinates& coordinates);
184 
185  void Reconfigure(const vtkArrayExtents& extents, MemoryBlock* storage);
186 
187  typedef vtkDenseArray<T> ThisT;
188 
190  vtkArrayExtents Extents;
191 
193  std::vector<vtkStdString> DimensionLabels;
194 
196  MemoryBlock* Storage;
197 
199 
201  T* Begin;
202  T* End;
204 
206  std::vector<vtkIdType> Offsets;
208 
209  std::vector<vtkIdType> Strides;
210 };
212 
213 #include "vtkDenseArray.txx"
214 
215 #endif
216 
217 // VTK-HeaderTest-Exclude: vtkDenseArray.h
vtkDenseArray::SetValue
void SetValue(CoordinateT i, const T &value)
vtkDenseArray::StaticMemoryBlock::StaticMemoryBlock
StaticMemoryBlock(T *const storage)
vtkArray::SizeT
vtkArrayExtents::SizeT SizeT
Definition: vtkArray.h:77
vtkDenseArray::Fill
void Fill(const T &value)
vtkDenseArray::GetNonNullSize
SizeT GetNonNullSize()
vtkDenseArray::HeapMemoryBlock::~HeapMemoryBlock
virtual ~HeapMemoryBlock()
vtkDenseArray::SetValue
void SetValue(CoordinateT i, CoordinateT j, const T &value)
vtkDenseArray::New
static vtkDenseArray< T > * New()
vtkIdType
int vtkIdType
Definition: vtkType.h:275
vtkDenseArray::SetValueN
void SetValueN(const SizeT n, const T &value)
vtkDenseArray::SetValue
void SetValue(const vtkArrayCoordinates &coordinates, const T &value)
vtkDenseArray::GetStorage
const T * GetStorage() const
vtkTypedArray.h
vtkDenseArray::MemoryBlock
Definition: vtkDenseArray.h:97
vtkgl::n
GLclampd n
Definition: vtkgl.h:14370
vtkDenseArray::StaticMemoryBlock::GetAddress
virtual T * GetAddress()
vtkDenseArray
Contiguous storage for N-way arrays.
Definition: vtkDenseArray.h:62
vtkObjectFactory.h
vtkTypeTemplate.h
vtkDenseArray::operator[]
T & operator[](const vtkArrayCoordinates &coordinates)
vtkDenseArray::HeapMemoryBlock::GetAddress
virtual T * GetAddress()
vtkDenseArray::SizeT
vtkArray::SizeT SizeT
Definition: vtkDenseArray.h:69
vtkArrayCoordinates.h
vtkDenseArray::StaticMemoryBlock
Definition: vtkDenseArray.h:129
vtkgl::value
GLsizei const GLfloat * value
Definition: vtkgl.h:12021
vtkDenseArray::~vtkDenseArray
~vtkDenseArray()
vtkDenseArray::vtkDenseArray
vtkDenseArray()
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkDenseArray::MemoryBlock::GetAddress
virtual T * GetAddress()=0
vtkDenseArray::HeapMemoryBlock::HeapMemoryBlock
HeapMemoryBlock(const vtkArrayExtents &extents)
vtkDenseArray::HeapMemoryBlock
Definition: vtkDenseArray.h:113
vtkDenseArray::GetCoordinatesN
void GetCoordinatesN(const SizeT n, vtkArrayCoordinates &coordinates)
vtkArray
Abstract interface for N-dimensional arrays.
Definition: vtkArray.h:70
vtkDenseArray::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
vtkDenseArray::IsDense
bool IsDense()
vtkDenseArray::GetExtents
const vtkArrayExtents & GetExtents()
vtkDenseArray::ExternalStorage
void ExternalStorage(const vtkArrayExtents &extents, MemoryBlock *storage)
vtkDenseArray::GetValue
const T & GetValue(CoordinateT i)
vtkDenseArray::GetValue
const T & GetValue(const vtkArrayCoordinates &coordinates)
vtkDenseArray::SetValue
void SetValue(CoordinateT i, CoordinateT j, CoordinateT k, const T &value)
vtkDenseArray::GetValueN
const T & GetValueN(const SizeT n)
vtkDenseArray::GetStorage
T * GetStorage()
vtkDenseArray::DimensionT
vtkArray::DimensionT DimensionT
Definition: vtkDenseArray.h:68
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:48
vtkDenseArray::GetValue
const T & GetValue(CoordinateT i, CoordinateT j)
vtkDenseArray::MemoryBlock::~MemoryBlock
virtual ~MemoryBlock()
vtkArray::CoordinateT
vtkArrayExtents::CoordinateT CoordinateT
Definition: vtkArray.h:75
vtkArrayExtents
Stores the number of dimensions and valid coordinate ranges along each dimension for vtkArray.
Definition: vtkArrayExtents.h:74
vtkDenseArray::CoordinateT
vtkArray::CoordinateT CoordinateT
Definition: vtkDenseArray.h:67
vtkArrayCoordinates
Stores coordinate into an N-way array.
Definition: vtkArrayCoordinates.h:57
vtkDenseArray::DeepCopy
vtkArray * DeepCopy()
vtkDenseArray::GetValue
const T & GetValue(CoordinateT i, CoordinateT j, CoordinateT k)
vtkArray::DimensionT
vtkArrayExtents::DimensionT DimensionT
Definition: vtkArray.h:76
vtkTypeTemplate
Provides the equivalent of vtkTypeMacro for use with template classes.
Definition: vtkTypeTemplate.h:40