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
52#ifndef vtkDenseArray_h
53#define vtkDenseArray_h
54
55#include "vtkArrayCoordinates.h"
56#include "vtkObjectFactory.h"
57#include "vtkTypedArray.h"
58
59template<typename T>
61{
62public:
65 void PrintSelf(ostream &os, vtkIndent indent) VTK_OVERRIDE;
66
67 typedef typename vtkArray::CoordinateT CoordinateT;
68 typedef typename vtkArray::DimensionT DimensionT;
69 typedef typename vtkArray::SizeT SizeT;
70
71 // vtkArray API
72 bool IsDense() VTK_OVERRIDE;
73 const vtkArrayExtents& GetExtents() VTK_OVERRIDE;
74 SizeT GetNonNullSize() VTK_OVERRIDE;
75 void GetCoordinatesN(const SizeT n, vtkArrayCoordinates& coordinates) VTK_OVERRIDE;
76 vtkArray* DeepCopy() VTK_OVERRIDE;
77
78 // vtkTypedArray API
79 const T& GetValue(CoordinateT i) VTK_OVERRIDE;
80 const T& GetValue(CoordinateT i, CoordinateT j) VTK_OVERRIDE;
81 const T& GetValue(CoordinateT i, CoordinateT j, CoordinateT k) VTK_OVERRIDE;
82 const T& GetValue(const vtkArrayCoordinates& coordinates) VTK_OVERRIDE;
83 const T& GetValueN(const SizeT n) VTK_OVERRIDE;
84 void SetValue(CoordinateT i, const T& value) VTK_OVERRIDE;
85 void SetValue(CoordinateT i, CoordinateT j, const T& value) VTK_OVERRIDE;
86 void SetValue(CoordinateT i, CoordinateT j, CoordinateT k, const T& value) VTK_OVERRIDE;
87 void SetValue(const vtkArrayCoordinates& coordinates, const T& value) VTK_OVERRIDE;
88 void SetValueN(const SizeT n, const T& value) VTK_OVERRIDE;
89
90 // vtkDenseArray API
91
98 {
99 public:
100 virtual ~MemoryBlock();
102
105 virtual T* GetAddress() = 0;
106 };
108
110
116 public MemoryBlock
117 {
118 public:
120 ~HeapMemoryBlock() VTK_OVERRIDE;
121 T* GetAddress() VTK_OVERRIDE;
123
124 private:
125 T* Storage;
126 };
127
129
133 public MemoryBlock
134 {
135 public:
136 StaticMemoryBlock(T* const storage);
137 virtual T* GetAddress();
139
140 private:
141 T* Storage;
142 };
143
160 void ExternalStorage(const vtkArrayExtents& extents, MemoryBlock* storage);
161
165 void Fill(const T& value);
166
170 T& operator[](const vtkArrayCoordinates& coordinates);
171
176 const T* GetStorage() const;
177
183
184protected:
186 ~vtkDenseArray() VTK_OVERRIDE;
187
188private:
189 vtkDenseArray(const vtkDenseArray&) VTK_DELETE_FUNCTION;
190 void operator=(const vtkDenseArray&) VTK_DELETE_FUNCTION;
191
192 void InternalResize(const vtkArrayExtents& extents) VTK_OVERRIDE;
193 void InternalSetDimensionLabel(DimensionT i, const vtkStdString& label) VTK_OVERRIDE;
194 vtkStdString InternalGetDimensionLabel(DimensionT i) VTK_OVERRIDE;
195 inline vtkIdType MapCoordinates(CoordinateT i);
196 inline vtkIdType MapCoordinates(CoordinateT i, CoordinateT j);
197 inline vtkIdType MapCoordinates(CoordinateT i, CoordinateT j, CoordinateT k);
198 inline vtkIdType MapCoordinates(const vtkArrayCoordinates& coordinates);
199
200 void Reconfigure(const vtkArrayExtents& extents, MemoryBlock* storage);
201
202 typedef vtkDenseArray<T> ThisT;
203
207 vtkArrayExtents Extents;
208
212 std::vector<vtkStdString> DimensionLabels;
213
217 MemoryBlock* Storage;
218
220
224 T* Begin;
225 T* End;
227
231 std::vector<vtkIdType> Offsets;
233
236 std::vector<vtkIdType> Strides;
237};
239
240#include "vtkDenseArray.txx"
241
242#endif
243
244// VTK-HeaderTest-Exclude: vtkDenseArray.h
Stores coordinate into an N-way array.
Stores the number of dimensions and valid coordinate ranges along each dimension for vtkArray.
Abstract interface for N-dimensional arrays.
Definition: vtkArray.h:71
vtkArrayExtents::SizeT SizeT
Definition: vtkArray.h:78
vtkArrayExtents::DimensionT DimensionT
Definition: vtkArray.h:77
vtkArrayExtents::CoordinateT CoordinateT
Definition: vtkArray.h:76
MemoryBlock implementation that manages internally-allocated memory using new[] and delete[].
T * GetAddress() override
Returns a pointer to the block of memory to be used for storage.
HeapMemoryBlock(const vtkArrayExtents &extents)
Strategy object that contains a block of memory to be used by vtkDenseArray for value storage.
Definition: vtkDenseArray.h:98
virtual T * GetAddress()=0
Returns a pointer to the block of memory to be used for storage.
MemoryBlock implementation that manages a static (will not be freed) memory block.
virtual T * GetAddress()
Returns a pointer to the block of memory to be used for storage.
StaticMemoryBlock(T *const storage)
Contiguous storage for N-way arrays.
Definition: vtkDenseArray.h:61
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()).
SizeT GetNonNullSize() override
Returns the number of non-null values stored in the array.
const vtkArrayExtents & GetExtents() override
Returns the extents (the number of dimensions and size along each dimension) of the array.
void SetValue(CoordinateT i, const T &value) override
Overwrites the value stored in the array at the given coordinates.
T * GetStorage()
Returns a mutable reference to the underlying storage.
static vtkDenseArray< T > * New()
~vtkDenseArray() override
const T * GetStorage() const
Returns a read-only reference to the underlying storage.
bool IsDense() override
Returns true iff the underlying array storage is "dense", i.e.
void ExternalStorage(const vtkArrayExtents &extents, MemoryBlock *storage)
Initializes the array to use an externally-allocated memory block.
void Fill(const T &value)
Fills every element in the array with the given value.
const T & GetValueN(const SizeT n) override
Returns the n-th value stored in the array, where n is in the range [0, GetNonNullSize()).
const T & GetValue(CoordinateT i) override
Returns the value stored in the array at the given coordinates.
T & operator[](const vtkArrayCoordinates &coordinates)
Returns a value by-reference, which is useful for performance and code-clarity.
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,...
vtkTemplateTypeMacro(vtkDenseArray< T >, vtkTypedArray< T >) void PrintSelf(ostream &os
vtkArray * DeepCopy() override
Returns a new array that is a deep copy of this array.
a simple class to control print indentation
Definition: vtkIndent.h:40
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:49
Provides a type-specific interface to N-way arrays.
Definition: vtkTypedArray.h:59
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
@ vector
Definition: vtkX3D.h:237
@ value
Definition: vtkX3D.h:220
int vtkIdType
Definition: vtkType.h:287