VTK  9.1.0
vtkHDFReaderImplementation.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkHDFReaderImplementation.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
21 #ifndef vtkHDFReaderImplementation_h
22 #define vtkHDFReaderImplementation_h
23 
24 #include "vtkHDFReader.h"
25 #include "vtk_hdf5.h"
26 #include <array>
27 #include <map>
28 #include <string>
29 #include <vector>
30 
31 class vtkAbstractArray;
32 class vtkDataArray;
33 class vtkStringArray;
34 
40 {
41 public:
43  virtual ~Implementation();
47  bool Open(VTK_FILEPATH const char* fileName);
51  void Close();
56  int GetDataSetType() { return this->DataSetType; }
60  const std::array<int, 2>& GetVersion() { return this->Version; }
64  template <typename T>
65  bool GetAttribute(const char* attributeName, size_t numberOfElements, T* value);
69  int GetNumberOfPieces() { return this->NumberOfPieces; }
74  bool GetPartitionExtent(hsize_t partitionIndex, int* extent);
78  std::vector<std::string> GetArrayNames(int attributeType);
80 
89  int attributeType, const char* name, const std::vector<hsize_t>& fileExtent);
90  vtkDataArray* NewArray(int attributeType, const char* name, hsize_t offset, hsize_t size);
93 
95 
101  vtkDataArray* NewMetadataArray(const char* name, hsize_t offset, hsize_t size);
102  std::vector<vtkIdType> GetMetadata(const char* name, hsize_t size);
104 
107  std::vector<hsize_t> GetDimensions(const char* dataset);
108 
109 protected:
114  {
115  int Class;
116  size_t Size;
117  int Sign;
119  : Class(H5T_NO_CLASS)
120  , Size(0)
121  , Sign(H5T_SGN_ERROR)
122  {
123  }
124  bool operator<(const TypeDescription& other) const
125  {
126  return Class < other.Class || (Class == other.Class && Size < other.Size) ||
127  (Class == other.Class && Size == other.Size && Sign < other.Sign);
128  }
129  };
130 
131 protected:
137  hid_t OpenDataSet(hid_t group, const char* name, hid_t* nativeType, std::vector<hsize_t>& dims);
142  template <typename T>
149  template <typename T>
151 
153 
165  vtkDataArray* NewArray(hid_t group, const char* name, const std::vector<hsize_t>& fileExtent);
166  template <typename T>
168  hid_t dataset, const std::vector<hsize_t>& fileExtent, hsize_t numberOfComponents);
169  template <typename T>
170  bool NewArray(
171  hid_t dataset, const std::vector<hsize_t>& fileExtent, hsize_t numberOfComponents, T* data);
172  vtkStringArray* NewStringArray(hid_t dataset, hsize_t size);
174 
183 
184 private:
185  std::string FileName;
186  hid_t File;
187  hid_t VTKGroup;
188  // in the same order as vtkDataObject::AttributeTypes: POINT, CELL, FIELD
189  std::array<hid_t, 3> AttributeDataGroup;
190  int DataSetType;
191  int NumberOfPieces;
192  std::array<int, 2> Version;
193  vtkHDFReader* Reader;
194  using ArrayReader = vtkDataArray* (vtkHDFReader::Implementation::*)(hid_t dataset,
195  const std::vector<hsize_t>& fileExtent, hsize_t numberOfComponents);
196  std::map<TypeDescription, ArrayReader> TypeReaderMap;
197 };
198 
199 //------------------------------------------------------------------------------
200 // explicit template instantiation declaration
201 extern template bool vtkHDFReader::Implementation::GetAttribute<int>(
202  const char* attributeName, size_t dim, int* value);
203 extern template bool vtkHDFReader::Implementation::GetAttribute<double>(
204  const char* attributeName, size_t dim, double* value);
205 
206 #endif
207 // VTK-HeaderTest-Exclude: vtkHDFReaderImplementation.h
vtkHDFReader::Implementation::NewArray
bool NewArray(hid_t dataset, const std::vector< hsize_t > &fileExtent, hsize_t numberOfComponents, T *data)
vtkHDFReader::Implementation::BuildTypeReaderMap
void BuildTypeReaderMap()
Builds a map between native types and GetArray routines for that type.
vtkHDFReader::Implementation::NewVtkDataArray
vtkDataArray * NewVtkDataArray()
Create a vtkDataArray based on the C++ template type T.
vtkX3D::value
@ value
Definition: vtkX3D.h:226
VTK_FILEPATH
#define VTK_FILEPATH
Definition: vtkWrappingHints.h:46
vtkX3D::type
@ type
Definition: vtkX3D.h:522
vtkHDFReader::Implementation::NewFieldArray
vtkAbstractArray * NewFieldArray(const char *name)
vtkHDFReader::Implementation::NewArray
vtkDataArray * NewArray(int attributeType, const char *name, const std::vector< hsize_t > &fileExtent)
Reads and returns a new vtkDataArray.
vtkX3D::data
@ data
Definition: vtkX3D.h:321
vtkHDFReader::Implementation
Implementation for the vtkHDFReader.
Definition: vtkHDFReaderImplementation.h:40
vtkHDFReader::Implementation::GetDimensions
std::vector< hsize_t > GetDimensions(const char *dataset)
Returns the dimensions of a HDF dataset.
vtkHDFReader::Implementation::GetPartitionExtent
bool GetPartitionExtent(hsize_t partitionIndex, int *extent)
For an ImageData, sets the extent for 'partitionIndex'.
vtkHDFReader::Implementation::~Implementation
virtual ~Implementation()
vtkHDFReader::Implementation::GetAttribute
bool GetAttribute(const char *attributeName, size_t numberOfElements, T *value)
Reads an attribute from the /VTKHDF group.
vtkHDFReader::Implementation::GetTypeDescription
TypeDescription GetTypeDescription(hid_t type)
Associates a struc of three integers with HDF type.
vtkHDFReader::Implementation::NewArray
vtkDataArray * NewArray(int attributeType, const char *name, hsize_t offset, hsize_t size)
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:159
vtkHDFReader.h
vtkHDFReader::Implementation::GetMetadata
std::vector< vtkIdType > GetMetadata(const char *name, hsize_t size)
vtkX3D::offset
@ offset
Definition: vtkX3D.h:444
vtkHDFReader::Implementation::Open
bool Open(VTK_FILEPATH const char *fileName)
Opens this VTK HDF file and checks if it is valid.
vtkHDFReader::Implementation::GetNumberOfPieces
int GetNumberOfPieces()
Returns the number of partitions for this dataset.
Definition: vtkHDFReaderImplementation.h:69
vtkHDFReader::Implementation::TypeDescription
Used to store HDF native types in a map.
Definition: vtkHDFReaderImplementation.h:114
vtkHDFReader::Implementation::NewArray
vtkDataArray * NewArray(hid_t group, const char *name, const std::vector< hsize_t > &fileExtent)
Reads a vtkDataArray of type T from the attributeType, dataset The array has type 'T' and 'numberOfCo...
vtkHDFReader::Implementation::Implementation
Implementation(vtkHDFReader *reader)
vtkHDFReader::Implementation::NewMetadataArray
vtkDataArray * NewMetadataArray(const char *name, hsize_t offset, hsize_t size)
Reads a 1D metadata array in a DataArray or a vector of vtkIdType.
vtkHDFReader::Implementation::GetArrayNames
std::vector< std::string > GetArrayNames(int attributeType)
Returns the names of arrays for 'attributeType' (point or cell).
vtkHDFReader::Implementation::Close
void Close()
Closes the VTK HDF file and releases any allocated resources.
vtkX3D::size
@ size
Definition: vtkX3D.h:259
vtkHDFReader::Implementation::NewArray
vtkDataArray * NewArray(hid_t dataset, const std::vector< hsize_t > &fileExtent, hsize_t numberOfComponents)
vtkHDFReader::Implementation::TypeDescription::Size
size_t Size
Definition: vtkHDFReaderImplementation.h:116
vtkX3D::name
@ name
Definition: vtkX3D.h:225
vtkAbstractArray
Abstract superclass for all arrays.
Definition: vtkAbstractArray.h:76
vtkX3D::string
@ string
Definition: vtkX3D.h:496
vtkHDFReader::Implementation::TypeDescription::operator<
bool operator<(const TypeDescription &other) const
Definition: vtkHDFReaderImplementation.h:124
vtkHDFReader::Implementation::OpenDataSet
hid_t OpenDataSet(hid_t group, const char *name, hid_t *nativeType, std::vector< hsize_t > &dims)
Opens the hdf5 dataset given the 'group' and 'name'.
vtkStringArray
a vtkAbstractArray subclass for strings
Definition: vtkStringArray.h:146
vtkHDFReader::Implementation::GetVersion
const std::array< int, 2 > & GetVersion()
Returns the version of the VTK HDF implementation.
Definition: vtkHDFReaderImplementation.h:60
vtkHDFReader::Implementation::TypeDescription::Class
int Class
Definition: vtkHDFReaderImplementation.h:115
vtkHDFReader::Implementation::TypeDescription::Sign
int Sign
Definition: vtkHDFReaderImplementation.h:117
vtkX3D::extent
@ extent
Definition: vtkX3D.h:351
_vtkBlueObeliskData::numberOfElements
static const unsigned int numberOfElements
Definition: vtkBlueObeliskDataInternal.h:7
vtkHDFReader::Implementation::TemplateTypeToHdfNativeType
hid_t TemplateTypeToHdfNativeType()
Convert C++ template type T to HDF5 native type this can be constexpr in C++17 standard.
vtkHDFReader::Implementation::GetDataSetType
int GetDataSetType()
Type of vtkDataSet stored by the HDF file, such as VTK_IMAGE_DATA or VTK_UNSTRUCTURED_GRID,...
Definition: vtkHDFReaderImplementation.h:56
vtkHDFReader::Implementation::TypeDescription::TypeDescription
TypeDescription()
Definition: vtkHDFReaderImplementation.h:118
vtkHDFReader
VTKHDF format reader.
Definition: vtkHDFReader.h:48
vtkHDFReader::Implementation::NewStringArray
vtkStringArray * NewStringArray(hid_t dataset, hsize_t size)