Fesapi 2.3.0.0
This project provides C++ classes which allow an easy access in import and export to the Energistics standards.
AbstractHdfProxy.h
1/*-----------------------------------------------------------------------
2Licensed to the Apache Software Foundation (ASF) under one
3or more contributor license agreements. See the NOTICE file
4distributed with this work for additional information
5regarding copyright ownership. The ASF licenses this file
6to you under the Apache License, Version 2.0 (the
7"License"; you may not use this file except in compliance
8with the License. You may obtain a copy of the License at
9
10 http://www.apache.org/licenses/LICENSE-2.0
11
12Unless required by applicable law or agreed to in writing,
13software distributed under the License is distributed on an
14"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15KIND, either express or implied. See the License for the
16specific language governing permissions and limitations
17under the License.
18-----------------------------------------------------------------------*/
19#pragma once
20
21#include "EpcExternalPartReference.h"
22#include "../common/HidtType.h"
23
25#define CUMULATIVE_LENGTH_DS_NAME "cumulativeLength"
27#define ELEMENTS_DS_NAME "elements"
28
29namespace EML2_NS
30{
42 {
43 public:
45 DLL_IMPORT_OR_EXPORT virtual ~AbstractHdfProxy() = default;
46
52 DLL_IMPORT_OR_EXPORT void setRootPath(const std::string& rootPath) { packageDirectoryAbsolutePath = rootPath; }
53
60 DLL_IMPORT_OR_EXPORT void setRelativePath(const std::string& relPath) { relativeFilePath = relPath; }
61
67 DLL_IMPORT_OR_EXPORT void setOpeningMode(COMMON_NS::DataObjectRepository::openingMode openingMode_) { openingMode = openingMode_; }
68
75 DLL_IMPORT_OR_EXPORT const std::string& getRelativePath() const { return relativeFilePath; }
76
81 virtual void open() = 0;
82
88 DLL_IMPORT_OR_EXPORT virtual bool isOpened() const = 0;
89
91 DLL_IMPORT_OR_EXPORT virtual void close() = 0;
92
101 DLL_IMPORT_OR_EXPORT virtual COMMON_NS::AbstractObject::hdfDatatypeEnum getHdfDatatypeInDataset(const std::string & datasetName) = 0;
102
110 DLL_IMPORT_OR_EXPORT virtual int getHdfDatatypeClassInDataset(const std::string & datasetName) = 0;
111
131 DLL_IMPORT_OR_EXPORT virtual void writeItemizedListOfList(const std::string & groupName,
132 const std::string & name,
133 hdf5_hid_t cumulativeLengthDatatype,
134 const void * cumulativeLength,
135 unsigned long long cumulativeLengthSize,
136 hdf5_hid_t elementsDatatype,
137 const void * elements,
138 unsigned long long elementsSize) = 0;
139
149 DLL_IMPORT_OR_EXPORT virtual unsigned int getDimensionCount(const std::string & datasetName) = 0;
150
155 DLL_IMPORT_OR_EXPORT virtual std::vector<unsigned long long> getElementCountPerDimension(const std::string & datasetName) = 0;
156
167 DLL_IMPORT_OR_EXPORT virtual signed long long getElementCount(const std::string & datasetName) = 0;
168
175 DLL_IMPORT_OR_EXPORT virtual void setCompressionLevel(unsigned int newCompressionLevel) = 0;
176
191 DLL_IMPORT_OR_EXPORT virtual void writeArrayNdOfFloatValues(const std::string & groupName,
192 const std::string & name,
193 const float * floatValues,
194 const unsigned long long * numValuesInEachDimension,
195 unsigned int numDimensions) = 0;
196
211 DLL_IMPORT_OR_EXPORT virtual void writeArrayNdOfDoubleValues(const std::string & groupName,
212 const std::string & name,
213 const double * dblValues,
214 const unsigned long long * numValuesInEachDimension,
215 unsigned int numDimensions) = 0;
216
231 DLL_IMPORT_OR_EXPORT virtual void writeArrayNdOfCharValues(const std::string & groupName,
232 const std::string & name,
233 const char * intValues,
234 const unsigned long long * numValuesInEachDimension,
235 unsigned int numDimensions) = 0;
236
251 DLL_IMPORT_OR_EXPORT virtual void writeArrayNdOfIntValues(const std::string & groupName,
252 const std::string & name,
253 const int * intValues,
254 const unsigned long long * numValuesInEachDimension,
255 unsigned int numDimensions) = 0;
256
272 DLL_IMPORT_OR_EXPORT virtual void writeArrayNdOfInt64Values(const std::string & groupName,
273 const std::string & name,
274 const int64_t * values,
275 const unsigned long long * numValuesInEachDimension,
276 unsigned int numDimensions) = 0;
277
293 DLL_IMPORT_OR_EXPORT virtual void writeArrayNdOfUInt64Values(const std::string & groupName,
294 const std::string & name,
295 const uint64_t * values,
296 const unsigned long long * numValuesInEachDimension,
297 unsigned int numDimensions) = 0;
298
314 DLL_IMPORT_OR_EXPORT virtual void writeArrayNd(const std::string & groupName,
315 const std::string & name,
316 hdf5_hid_t datatype,
317 const void * values,
318 const unsigned long long * numValuesInEachDimension,
319 unsigned int numDimensions) = 0;
320
335 DLL_IMPORT_OR_EXPORT virtual void createArrayNd(
336 const std::string& groupName,
337 const std::string& name,
338 hdf5_hid_t datatype,
339 const unsigned long long* numValuesInEachDimension,
340 unsigned int numDimensions
341 ) = 0;
342
358 DLL_IMPORT_OR_EXPORT virtual void writeArrayNdSlab(
359 const std::string& groupName,
360 const std::string& name,
361 hdf5_hid_t datatype,
362 const void* values,
363 const unsigned long long* numValuesInEachDimension,
364 const unsigned long long* offsetValuesInEachDimension,
365 unsigned int numDimensions
366 ) = 0;
367
378 DLL_IMPORT_OR_EXPORT virtual void writeGroupAttributes(const std::string & groupName,
379 const std::vector<std::string> & attributeNames,
380 const std::vector<std::string> & values) = 0;
381
389 DLL_IMPORT_OR_EXPORT virtual void writeGroupAttribute(const std::string & groupName,
390 const std::string & attributeName,
391 const std::vector<std::string> & values) = 0;
392
403 DLL_IMPORT_OR_EXPORT virtual void writeGroupAttributes(const std::string & groupName,
404 const std::vector<std::string> & attributeNames,
405 const std::vector<double> & values) = 0;
406
417 DLL_IMPORT_OR_EXPORT virtual void writeGroupAttributes(const std::string & groupName,
418 const std::vector<std::string> & attributeNames,
419 const std::vector<int> & values) = 0;
420
431 DLL_IMPORT_OR_EXPORT virtual void writeDatasetAttributes(const std::string & datasetName,
432 const std::vector<std::string> & attributeNames,
433 const std::vector<std::string> & values) = 0;
434
442 DLL_IMPORT_OR_EXPORT virtual void writeDatasetAttribute(const std::string & datasetName,
443 const std::string & attributeName,
444 const std::vector<std::string> & values) = 0;
445
456 DLL_IMPORT_OR_EXPORT virtual void writeDatasetAttributes(const std::string & datasetName,
457 const std::vector<std::string> & attributeNames,
458 const std::vector<double> & values) = 0;
459
470 DLL_IMPORT_OR_EXPORT virtual void writeDatasetAttributes(const std::string & datasetName,
471 const std::vector<std::string> & attributeNames,
472 const std::vector<int> & values) = 0;
473
486 DLL_IMPORT_OR_EXPORT virtual std::string readStringAttribute(const std::string & obj_name,
487 const std::string & attr_name) const = 0;
488
501 DLL_IMPORT_OR_EXPORT virtual std::vector<std::string> readStringArrayAttribute(const std::string & obj_name,
502 const std::string & attr_name) const = 0;
503
516 DLL_IMPORT_OR_EXPORT virtual double readDoubleAttribute(const std::string & obj_name,
517 const std::string & attr_name) const = 0;
518
531 DLL_IMPORT_OR_EXPORT virtual int64_t readLongAttribute(const std::string & obj_name,
532 const std::string & attr_name) const = 0;
533
543 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfDoubleValues(const std::string & datasetName, double* values) = 0;
544
563 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfDoubleValues(
564 const std::string & datasetName,
565 double* values,
566 unsigned long long const * numValuesInEachDimension,
567 unsigned long long const * offsetInEachDimension,
568 unsigned int numDimensions
569 ) = 0;
570
594 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfDoubleValues(
595 const std::string & datasetName,
596 double* values,
597 unsigned long long const * blockCountPerDimension,
598 unsigned long long const * offsetInEachDimension,
599 unsigned long long const * strideInEachDimension,
600 unsigned long long const * blockSizeInEachDimension,
601 unsigned int numDimensions) = 0;
602
633 DLL_IMPORT_OR_EXPORT virtual void selectArrayNdOfValues(
634 const std::string & datasetName,
635 unsigned long long const* blockCountPerDimension,
636 unsigned long long const* offsetInEachDimension,
637 unsigned long long const* strideInEachDimension,
638 unsigned long long const* blockSizeInEachDimension,
639 unsigned int numDimensions,
640 bool newSelection,
641 hdf5_hid_t & dataset,
642 hdf5_hid_t & filespace) = 0;
643
656 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfDoubleValues(
657 hdf5_hid_t dataset,
658 hdf5_hid_t filespace,
659 void* values,
660 unsigned long long slabSize) = 0;
661
671 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfFloatValues(const std::string & datasetName, float* values) = 0;
672
691 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfFloatValues(
692 const std::string & datasetName,
693 float* values,
694 unsigned long long const * numValuesInEachDimension,
695 unsigned long long const * offsetInEachDimension,
696 unsigned int numDimensions
697 ) = 0;
698
708 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfInt64Values(const std::string & datasetName, int64_t* values) = 0;
709
728 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfInt64Values(
729 const std::string & datasetName,
730 int64_t* values,
731 unsigned long long const * numValuesInEachDimension,
732 unsigned long long const * offsetInEachDimension,
733 unsigned int numDimensions) = 0;
734
745 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfUInt64Values(const std::string & datasetName, uint64_t* values) = 0;
746
756 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfIntValues(const std::string & datasetName, int* values) = 0;
757
776 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfIntValues(
777 const std::string & datasetName,
778 int* values,
779 unsigned long long const * numValuesInEachDimension,
780 unsigned long long const * offsetInEachDimension,
781 unsigned int numDimensions
782 ) = 0;
783
793 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfUIntValues(const std::string & datasetName, unsigned int* values) = 0;
794
804 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfShortValues(const std::string & datasetName, short* values) = 0;
805
816 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfUShortValues(const std::string & datasetName, unsigned short* values) = 0;
817
827 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfCharValues(const std::string & datasetName, char* values) = 0;
828
839 DLL_IMPORT_OR_EXPORT virtual void readArrayNdOfUCharValues(const std::string & datasetName, unsigned char* values) = 0;
840
848 DLL_IMPORT_OR_EXPORT virtual std::vector<unsigned long long> readArrayDimensions(const std::string & datasetName) = 0;
849
857 DLL_IMPORT_OR_EXPORT virtual bool exist(const std::string & absolutePathInHdfFile) const = 0;
858
868 DLL_IMPORT_OR_EXPORT virtual bool isCompressed(const std::string & datasetName) = 0;
869
882 DLL_IMPORT_OR_EXPORT void setMaxChunkSize(unsigned int newMaxChunkSize) { maxChunkSize = newMaxChunkSize; }
883
889 DLL_IMPORT_OR_EXPORT virtual std::vector<unsigned long long> getElementCountPerChunkDimension(const std::string & datasetName) = 0;
890
901 DLL_IMPORT_OR_EXPORT void initGsoapProxy(COMMON_NS::DataObjectRepository* repo, const std::string& guid, const std::string& title, unsigned int emlVersion);
902
903 protected:
904
910 AbstractHdfProxy(gsoap_resqml2_0_1::eml20__DataObjectReference* partialObject) : EpcExternalPartReference(partialObject), openingMode(COMMON_NS::DataObjectRepository::openingMode::READ_ONLY) {}
911 AbstractHdfProxy(const COMMON_NS::DataObjectReference& dor) : EpcExternalPartReference(dor), openingMode(COMMON_NS::DataObjectRepository::openingMode::READ_ONLY) {}
912
914 std::string packageDirectoryAbsolutePath;
916 std::string relativeFilePath;
918 COMMON_NS::DataObjectRepository::openingMode openingMode;
922 unsigned int maxChunkSize = 1000000;
923
934 DLL_IMPORT_OR_EXPORT AbstractHdfProxy(const std::string & packageDirAbsolutePath, const std::string & externalFilePath, COMMON_NS::DataObjectRepository::openingMode hdfPermissionAccess = COMMON_NS::DataObjectRepository::openingMode::READ_ONLY) :
935 packageDirectoryAbsolutePath(packageDirAbsolutePath), relativeFilePath(externalFilePath), openingMode(hdfPermissionAccess) {}
936
937 AbstractHdfProxy(gsoap_resqml2_0_1::_eml20__EpcExternalPartReference* fromGsoap) :
938 EpcExternalPartReference(fromGsoap), openingMode(COMMON_NS::DataObjectRepository::openingMode::READ_ONLY) {}
939
940 AbstractHdfProxy(gsoap_eml2_1::_eml21__EpcExternalPartReference* fromGsoap) :
941 EpcExternalPartReference(fromGsoap), openingMode(COMMON_NS::DataObjectRepository::openingMode::READ_ONLY) {}
942
943 AbstractHdfProxy(gsoap_eml2_3::_eml23__EpcExternalPartReference* fromGsoap) :
944 EpcExternalPartReference(fromGsoap), openingMode(COMMON_NS::DataObjectRepository::openingMode::READ_ONLY) {}
945 };
946}
An abstract proxy for reading and writing values into an HDF5 file. It is possible to derive this cla...
Definition: AbstractHdfProxy.h:42
virtual signed long long getElementCount(const std::string &datasetName)=0
virtual void writeDatasetAttributes(const std::string &datasetName, const std::vector< std::string > &attributeNames, const std::vector< std::string > &values)=0
virtual void writeGroupAttributes(const std::string &groupName, const std::vector< std::string > &attributeNames, const std::vector< double > &values)=0
virtual bool isOpened() const =0
virtual void readArrayNdOfDoubleValues(hdf5_hid_t dataset, hdf5_hid_t filespace, void *values, unsigned long long slabSize)=0
virtual void writeArrayNdOfInt64Values(const std::string &groupName, const std::string &name, const int64_t *values, const unsigned long long *numValuesInEachDimension, unsigned int numDimensions)=0
virtual double readDoubleAttribute(const std::string &obj_name, const std::string &attr_name) const =0
virtual void readArrayNdOfDoubleValues(const std::string &datasetName, double *values, unsigned long long const *blockCountPerDimension, unsigned long long const *offsetInEachDimension, unsigned long long const *strideInEachDimension, unsigned long long const *blockSizeInEachDimension, unsigned int numDimensions)=0
virtual void readArrayNdOfInt64Values(const std::string &datasetName, int64_t *values)=0
virtual void close()=0
virtual void writeArrayNdOfFloatValues(const std::string &groupName, const std::string &name, const float *floatValues, const unsigned long long *numValuesInEachDimension, unsigned int numDimensions)=0
virtual void writeArrayNdOfCharValues(const std::string &groupName, const std::string &name, const char *intValues, const unsigned long long *numValuesInEachDimension, unsigned int numDimensions)=0
virtual common::AbstractObject::hdfDatatypeEnum getHdfDatatypeInDataset(const std::string &datasetName)=0
virtual void readArrayNdOfUShortValues(const std::string &datasetName, unsigned short *values)=0
virtual void readArrayNdOfDoubleValues(const std::string &datasetName, double *values, unsigned long long const *numValuesInEachDimension, unsigned long long const *offsetInEachDimension, unsigned int numDimensions)=0
virtual void readArrayNdOfFloatValues(const std::string &datasetName, float *values)=0
virtual void readArrayNdOfDoubleValues(const std::string &datasetName, double *values)=0
virtual void readArrayNdOfUInt64Values(const std::string &datasetName, uint64_t *values)=0
virtual void createArrayNd(const std::string &groupName, const std::string &name, hdf5_hid_t datatype, const unsigned long long *numValuesInEachDimension, unsigned int numDimensions)=0
virtual void writeGroupAttribute(const std::string &groupName, const std::string &attributeName, const std::vector< std::string > &values)=0
virtual void readArrayNdOfIntValues(const std::string &datasetName, int *values)=0
virtual std::vector< unsigned long long > getElementCountPerDimension(const std::string &datasetName)=0
virtual std::vector< unsigned long long > getElementCountPerChunkDimension(const std::string &datasetName)=0
virtual std::vector< std::string > readStringArrayAttribute(const std::string &obj_name, const std::string &attr_name) const =0
virtual void writeDatasetAttribute(const std::string &datasetName, const std::string &attributeName, const std::vector< std::string > &values)=0
virtual void readArrayNdOfShortValues(const std::string &datasetName, short *values)=0
virtual ~AbstractHdfProxy()=default
virtual void writeGroupAttributes(const std::string &groupName, const std::vector< std::string > &attributeNames, const std::vector< int > &values)=0
virtual void readArrayNdOfInt64Values(const std::string &datasetName, int64_t *values, unsigned long long const *numValuesInEachDimension, unsigned long long const *offsetInEachDimension, unsigned int numDimensions)=0
virtual bool exist(const std::string &absolutePathInHdfFile) const =0
virtual int getHdfDatatypeClassInDataset(const std::string &datasetName)=0
virtual void writeDatasetAttributes(const std::string &datasetName, const std::vector< std::string > &attributeNames, const std::vector< double > &values)=0
virtual void writeArrayNdSlab(const std::string &groupName, const std::string &name, hdf5_hid_t datatype, const void *values, const unsigned long long *numValuesInEachDimension, const unsigned long long *offsetValuesInEachDimension, unsigned int numDimensions)=0
virtual unsigned int getDimensionCount(const std::string &datasetName)=0
virtual bool isCompressed(const std::string &datasetName)=0
virtual void writeArrayNdOfDoubleValues(const std::string &groupName, const std::string &name, const double *dblValues, const unsigned long long *numValuesInEachDimension, unsigned int numDimensions)=0
virtual void writeArrayNd(const std::string &groupName, const std::string &name, hdf5_hid_t datatype, const void *values, const unsigned long long *numValuesInEachDimension, unsigned int numDimensions)=0
virtual std::vector< unsigned long long > readArrayDimensions(const std::string &datasetName)=0
virtual void readArrayNdOfFloatValues(const std::string &datasetName, float *values, unsigned long long const *numValuesInEachDimension, unsigned long long const *offsetInEachDimension, unsigned int numDimensions)=0
virtual void setCompressionLevel(unsigned int newCompressionLevel)=0
void setOpeningMode(common::DataObjectRepository::openingMode openingMode_)
Definition: AbstractHdfProxy.h:67
virtual void selectArrayNdOfValues(const std::string &datasetName, unsigned long long const *blockCountPerDimension, unsigned long long const *offsetInEachDimension, unsigned long long const *strideInEachDimension, unsigned long long const *blockSizeInEachDimension, unsigned int numDimensions, bool newSelection, hdf5_hid_t &dataset, hdf5_hid_t &filespace)=0
virtual void open()=0
virtual void readArrayNdOfIntValues(const std::string &datasetName, int *values, unsigned long long const *numValuesInEachDimension, unsigned long long const *offsetInEachDimension, unsigned int numDimensions)=0
virtual void writeDatasetAttributes(const std::string &datasetName, const std::vector< std::string > &attributeNames, const std::vector< int > &values)=0
virtual void writeArrayNdOfUInt64Values(const std::string &groupName, const std::string &name, const uint64_t *values, const unsigned long long *numValuesInEachDimension, unsigned int numDimensions)=0
virtual void readArrayNdOfCharValues(const std::string &datasetName, char *values)=0
virtual int64_t readLongAttribute(const std::string &obj_name, const std::string &attr_name) const =0
virtual void writeArrayNdOfIntValues(const std::string &groupName, const std::string &name, const int *intValues, const unsigned long long *numValuesInEachDimension, unsigned int numDimensions)=0
const std::string & getRelativePath() const
Definition: AbstractHdfProxy.h:75
void setRelativePath(const std::string &relPath)
Definition: AbstractHdfProxy.h:60
virtual void readArrayNdOfUIntValues(const std::string &datasetName, unsigned int *values)=0
virtual std::string readStringAttribute(const std::string &obj_name, const std::string &attr_name) const =0
virtual void readArrayNdOfUCharValues(const std::string &datasetName, unsigned char *values)=0
virtual void writeGroupAttributes(const std::string &groupName, const std::vector< std::string > &attributeNames, const std::vector< std::string > &values)=0
void setRootPath(const std::string &rootPath)
Definition: AbstractHdfProxy.h:52
void setMaxChunkSize(unsigned int newMaxChunkSize)
Definition: AbstractHdfProxy.h:882
virtual void writeItemizedListOfList(const std::string &groupName, const std::string &name, hdf5_hid_t cumulativeLengthDatatype, const void *cumulativeLength, unsigned long long cumulativeLengthSize, hdf5_hid_t elementsDatatype, const void *elements, unsigned long long elementsSize)=0
void initGsoapProxy(common::DataObjectRepository *repo, const std::string &guid, const std::string &title, unsigned int emlVersion)
Proxy class for handling external parts of an EPC package. It must be used at least for external HDF5...
Definition: EpcExternalPartReference.h:30