VTK  9.7.1
vtkXArrayAccessor.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
3 
4 #ifndef vtkXArrayAccessor_h
5 #define vtkXArrayAccessor_h
6 
7 #include "vtkNetCDFAccessor.h"
8 
9 #include "vtkCommand.h" // for vtkBaseTypeMacro
10 #include "vtkIONetCDFModule.h" // For export macro
11 #include "vtkVariant.h" // for vtkVariant
12 
13 VTK_ABI_NAMESPACE_BEGIN
14 class vtkImageData;
15 class vtkTexture;
16 class vtkDataArray;
17 
18 class VTKIONETCDF_EXPORT vtkXArrayAccessor : public vtkNetCDFAccessor
19 {
20 public:
22  static vtkXArrayAccessor* New();
23 
24  int close(int ncid) override;
25  int open(const char* path, int omode, int* ncidp) override;
26  const char* strerror(int ncerr1) override;
27 
28  int inq_attlen(int ncid, int varid, const char* name, size_t* lenp) override;
29 
30  int inq_dimlen(int ncid, int dimid, size_t* lenp) override;
31  int inq_dimname(int ncid, int dimid, char* name) override;
32 
33  int inq_nvars(int ncid, int* nvarsp) override;
34  int inq_ndims(int ncid, int* ndimsp) override;
35 
36  int inq_vardimid(int ncid, int varid, int* dimidsp) override;
37  int inq_varid(int ncid, const char* name, int* varidp) override;
38  int inq_varname(int ncid, int varid, char* name) override;
39  int inq_varndims(int ncid, int varid, int* ndimsp) override;
40  int inq_vartype(int ncid, int varid, int* typep) override;
41 
42  int get_att_text(int ncid, int varid, const char* name, char* value) override;
43  int get_att_double(int ncid, int varid, const char* name, double* value) override;
44  int get_att_float(int ncid, int varid, const char* name, float* value) override;
45 
46  bool GetCoordinates(int ncFD, int varId, std::vector<std::string>& coordName) override;
47  bool NeedsFileName() override;
48 
49  // shallow copy
50  int get_vars(int ncid, int varid, const size_t* startp, const size_t* countp,
51  const ptrdiff_t* stridep, int vtkType, vtkIdType numberOfComponents, vtkIdType numberOfTuples,
52  vtkDataArray* dataArray) override;
53  // deep copy
54  int get_vars(int ncid, int varid, const size_t* startp, const size_t* countp,
55  const ptrdiff_t* stridep, void* ip) override;
56  // deep copy
57  int get_vars_double(int ncid, int varid, const size_t* startp, const size_t* countp,
58  const ptrdiff_t* stridep, double* ip) override;
59  int get_var_double(int ncid, int varid, double* ip) override;
60 
62 
65  void SetDim(const std::vector<std::string>& v);
66  void SetDimLen(const std::vector<size_t>& v);
68 
70 
73  void SetVar(const std::vector<std::string>& v, const std::vector<int>& is_coord);
74  void SetVarValue(size_t varIndex, void* value);
75  void SetAtt(size_t varIndex, std::string attributeName, const vtkVariant& var);
76  void SetVarType(size_t varIndex, int nctype);
81  bool IsCOARDSCoordinate(std::string);
83 
87  void SetVarDims(size_t varIndex, const std::vector<size_t>& dims);
88  void SetVarCoords(size_t varIndex, const std::vector<size_t>& coords);
89 
90  void PrintSelf(ostream& os, vtkIndent indent) override;
91 
92 protected:
93  void PrintVarValue(const char* name, int varid);
94  void PrintVarValue(const char* name, int varid, const size_t* startp, const size_t* countp);
95  bool IsContiguous(int varid, const size_t* startp, const size_t* countp);
96  void GetContiguousStartSize(
97  int varid, const size_t* startp, const size_t* countp, char*& arrayStart, vtkIdType& arraySize);
98  void Copy(int varid, const size_t* startp, const size_t* countp, char* dst);
99  std::vector<size_t> GetDimIncrement(int varid);
100  bool DecrementAndUpdate(size_t varid, std::vector<size_t>& count, const size_t* startp,
101  const size_t* count_p, const std::vector<size_t>& dimIncrement, char*& src);
102 
103  vtkXArrayAccessor() = default;
104  ~vtkXArrayAccessor() override = default;
105 
106 private:
108 
113  std::vector<std::string> Var;
114  std::vector<int> IsCoord;
115  std::vector<char*> VarValue;
116  std::map<std::string, size_t> VarIndex;
117  std::vector<std::map<std::string, vtkVariant>> Att;
118  std::vector<int> VarType;
120 
122 
126  std::vector<std::string> Dim;
127  std::map<std::string, size_t> DimIndex;
128  std::vector<size_t> DimLen;
130 
133  std::vector<std::vector<size_t>> VarDims;
134  std::vector<std::vector<size_t>> VarCoords;
135 
136  vtkXArrayAccessor(const vtkXArrayAccessor&) = delete;
137  void operator=(const vtkXArrayAccessor&) = delete;
138 };
139 
140 VTK_ABI_NAMESPACE_END
141 #endif
virtual int inq_ndims(int ncid, int *ndimsp)
virtual int get_att_text(int ncid, int varid, const char *name, char *value)
int vtkIdType
Definition: vtkType.h:363
virtual int get_att_float(int ncid, int varid, const char *name, float *value)
virtual int inq_varid(int ncid, const char *name, int *varidp)
A type representing the union of many types.
Definition: vtkVariant.h:52
virtual int close(int ncid)
virtual int inq_attlen(int ncid, int varid, const char *name, size_t *lenp)
virtual int get_var_double(int ncid, int varid, double *ip)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual int open(const char *path, int omode, int *ncidp)
virtual bool GetCoordinates(int ncFD, int varId, std::vector< std::string > &coordName)
virtual int get_vars_double(int ncid, int varid, const size_t *startp, const size_t *countp, const ptrdiff_t *stridep, double *ip)
a simple class to control print indentation
Definition: vtkIndent.h:28
topologically and geometrically regular array of data
Definition: vtkImageData.h:45
virtual int inq_varndims(int ncid, int varid, int *ndimsp)
virtual int inq_varname(int ncid, int varid, char *name)
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
virtual int inq_nvars(int ncid, int *nvarsp)
handles properties associated with a texture map
Definition: vtkTexture.h:58
virtual int inq_dimlen(int ncid, int dimid, size_t *lenp)
virtual int inq_vartype(int ncid, int varid, int *typep)
virtual int get_vars(int ncid, int varid, const size_t *startp, const size_t *countp, const ptrdiff_t *stridep, int vtkType, vtkIdType numberOfComponents, vtkIdType numberOfTuples, vtkDataArray *dataArray)
virtual int inq_vardimid(int ncid, int varid, int *dimidsp)
virtual int inq_dimname(int ncid, int dimid, char *name)
static vtkNetCDFAccessor * New()
virtual const char * strerror(int ncerr1)
virtual int get_att_double(int ncid, int varid, const char *name, double *value)
virtual bool NeedsFileName()