53 #include <yat/CommonHeader.h> 54 #include <yat/memory/SharedPtr.h> 55 #include <yat/threading/Utilities.h> 56 #include <yat/threading/Mutex.h> 60 #if defined(WIN32) && defined(NEXUSCPP_DLL) 61 # if defined (NEXUSCPP_BUILD) 62 # define NEXUSCPP_DECL __declspec(dllexport) 64 # define NEXUSCPP_DECL __declspec(dllimport) 67 # define NEXUSCPP_DECL 188 yat::Exception(
"NEXUSCPP_ERROR", pcszDesc, pcszOrigin) {}
191 yat::Exception(
"NEXUSCPP_ERROR", desc.c_str(), pcszOrigin) {}
200 void GetMsg(
char *pBuf,
int iLen);
210 friend class NexusFileImpl;
263 int Rank()
const {
return m_iRank; }
279 void SetTotalDim(
int iTotalRank,
int *piTotalDim);
285 bool IsEmpty()
const;
288 unsigned int DatumSize()
const;
291 unsigned int BufferSize()
const {
return Size() * DatumSize(); }
298 bool IsSubset()
const {
return m_piStart ?
true:
false;}
346 void SetOwner(
bool this_has_ownership);
357 void *
Data()
const {
return m_pData; }
360 unsigned int MemSize()
const;
363 unsigned int Size()
const;
368 void SetData(
void *pData) { m_pData = pData; }
376 void SetData(
const void *pData,
NexusDataType eDataType,
int iRank,
int *piDimArray);
382 void SetDimension(
int iDim,
int iSize);
401 m_pDataItem = (
char *)DataSet.
Data();
410 return T(*((
float *)m_pDataItem));
412 return T(*((
double *)m_pDataItem));
414 return T(*((
char *)m_pDataItem));
416 return T(*((
short *)m_pDataItem));
418 return T(*((
long *)m_pDataItem));
420 return T(*((
unsigned char *)m_pDataItem));
422 return T(*((
unsigned short *)m_pDataItem));
424 return T(*((
unsigned long *)m_pDataItem));
430 T operator *() {
return Value(); }
449 return m_pDataItem == (
char *)m_DataSet.
Data() + m_DataSet.
MemSize();
462 friend class NexusFileImpl;
491 bool IsDataSet()
const;
494 bool IsGroup()
const;
513 friend class NexusFileImpl;
522 #if ! defined(OBSOLETE_HDF5_WORKAROUND) 541 int Len()
const {
return m_iLen; }
571 void SetLong(
long lValue);
576 void SetCString(
const char *pcszValue);
581 void SetString(
const std::string &strValue);
586 void SetDouble(
double dValue);
591 void SetFloat(
float fValue);
594 long GetLong()
const;
597 double GetDouble()
const ;
600 float GetFloat()
const;
603 std::string GetString()
const;
606 void *RawValue()
const;
634 NexusFileImpl *m_pImpl;
639 static const bool USE_LOCK =
true;
642 static void Initialize();
644 #if ! defined(OBSOLETE_HDF5_WORKAROUND) 653 NexusFile(
const char *pcszFullPath=NULL,
OpenMode eMode = NONE,
bool use_lock =
false);
661 NexusFile(
const char *pcszFullPath=NULL,
OpenMode eMode = NONE,
bool use_lock =
false) {};
684 void OpenRead(
const char *pcszFullPath);
689 void OpenReadWrite(
const char *pcszFullPath);
713 void CreateGroup(
const char *pcszName,
const char *pcszClass,
bool bOpen=
true);
721 bool OpenGroup(
const char *pcszName,
const char *pcszClass,
bool bThrowException=
true);
727 void CloseAllGroups();
742 void CreateDataSet(
const char *pcszName,
NexusDataType eDataType,
743 int iRank,
int *piDim,
int bOpen=
true);
755 void CreateCompressedDataSet(
const char *pcszName,
NexusDataType eDataType,
756 int iRank,
int *piDim,
int *piChunkDim,
758 FilterConfig filter_config=
FilterConfig(),
int bOpen=
true);
773 void WriteData(
const char *pcszName,
void *pData,
NexusDataType eDataType,
774 int iRank,
int *piDim,
bool bCreate=
true);
784 void WriteData(
const char *pcszName,
void *pData,
NexusDataType eDataType,
785 const std::vector<std::size_t>& Shape,
bool bCreate=
true);
798 void WriteDataSubSet(
const char *pcszName,
void *pData,
NexusDataType eDataType,
799 int iRank,
int *piStart,
int *piDim,
bool bCreate=
true,
bool bNoDim =
false);
802 void WriteData(
const char *pcszName,
float fValue,
bool bCreate=
true);
805 void WriteData(
const char *pcszName,
double dValue,
bool bCreate=
true);
808 void WriteData(
const char *pcszName,
long lValue,
bool bCreate=
true);
811 void WriteData(
const char *pcszName,
const char *pcszValue,
bool bCreate=
true);
814 void WriteData(
const char *pcszName,
void *pData,
int _iLen,
bool bCreate=
true);
820 bool OpenDataSet(
const char *pcszName,
bool bThrowException=
true);
828 void PutData(
void *pData,
const char *pcszName=NULL,
int bFlush=
false);
837 void PutDataSubSet(
void *pData,
int *piStart,
int *piSize,
const char *pcszName=NULL);
848 void GetData(
NexusDataSet *pDataSet,
const char *pcszDataSet=NULL);
855 void GetDataSubSet(
NexusDataSet *pDataSet,
const char *pcszDataSet=NULL);
861 void GetDataSetInfo(
NexusDataSetInfo *pDataSetInfo,
const char *pcszDataSet);
878 void GetAttribute(
const char *pcszAttr,
int *piBufLen,
void *pData,
888 void GetAttribute(
const char *pcszAttr,
long *plValue);
897 void GetAttribute(
const char *pcszAttr,
double *pdValue);
906 void GetAttribute(
const char *pcszAttr,
float *pfValue);
912 void GetAttribute(
const char *pcszAttr, std::string *pstrValue);
929 void PutAttr(
const char *pcszName,
void *pValue,
int iLen,
NexusDataType eDataType);
935 void PutAttr(
const char *pcszName,
long lValue);
941 void PutAttr(
const char *pcszName,
const char *pcszValue);
947 void PutAttr(
const char *pcszName,
double dValue);
953 void PutAttr(
const char *pcszName,
float fValue);
993 int GetFirstAttribute(
NexusAttrInfo *pAttrInfo,
const char *pcszDataSet=NULL);
1052 bool OpenGroupPath(
const char *pszPath,
bool bThrowException=
true);
1060 bool CreateGroupPath(
const char *pszPath);
1070 int SearchGroup(
const char *pszGroupName,
const char *pszClassName,
1071 std::vector<std::string> *pvecPaths,
const char *pszStartPath=NULL);
1080 int SearchDataSetFromAttr(
const char *pszAttrName, std::vector<std::string> *pvecDataSets,
const std::string &strAttrVal=
"");
1089 int SearchFirstDataSetFromAttr(
const char *pszAttrName, std::string *pstrDataSet,
const std::string &strAttrVal=
"");
1099 int SearchDataSetFromAttrAndRank(
const char *pszAttrName,
int iRank, std::vector<std::string> *pvecDataSets,
const std::string &strAttrVal=
"");
1109 int SearchFirstDataSetFromAttrAndRank(
const char *pszAttrName,
int iRank, std::string *pstrDataSet,
const std::string &strAttrVal=
"");
1115 std::string GetAttributeAsString(
const NexusAttrInfo &aAttrInfo);
1123 bool HasAttribute(
const char *pszAttrName,
const char *pcszDataSet=NULL,
const std::string &strAttrVal=
"");
1131 bool GetAttributeAsString(
const char *pszAttrName,
const char *pcszDataSet, std::string *pstrValue);
1141 bool BuildAxisDict(std::map<std::string, std::string> *pmapAxis,
const char *pszGroupPath=NULL,
const char *pcszDataSet=NULL);
1152 bool BuildScanAxisDict(std::map<std::string, std::string> *pmapAxis,
const char *pszGroupPath=NULL,
const char *pcszDataSet=NULL);
1162 int GetScanDim(
const char *pszDataGroupPath);
1165 std::string CurrentGroupName();
1168 std::string CurrentGroupClass();
1171 std::string CurrentGroupPath();
1174 std::string CurrentDataset();
1181 void GetGroupChildren(std::vector<std::string> *pvecDatasets, std::vector<std::string> *pvecGroupNames, std::vector<std::string> *pvecGroupClasses);
1186 NexusItemInfoList GetGroupChildren();
1194 void GetAttribute(
const char*,
char*,
int);
int Rank() const
Returns the data set rank.
Definition: nxfile.h:263
unsigned int MemSize() const
Returns size of the data block (i.e. Size() * sizeof(<datatype>) )
void * UserPtr() const
Get user pointer.
Definition: nxfile.h:1034
NexusDataType m_eDataType
Definition: nxfile.h:518
int m_iRank
Definition: nxfile.h:229
#define NEXUSCPP_DECL
Definition: nxfile.h:67
NexusDataType DataType() const
Returns type attribute data.
Definition: nxfile.h:544
FilterOption
id list of all filters options
Definition: nxfile.h:82
Value not defined in the NeXus API.
Definition: nxfile.h:140
NEXUSCPP_DECL bool IsCompressFilterAvailable(CompressionFilter filter_id)
void * Data() const
Returns a pointer to the data set.
Definition: nxfile.h:357
int Len() const
Returns len of attribute.
Definition: nxfile.h:541
int * TotalDimArray() const
Definition: nxfile.h:273
void * m_pContext
Definition: nxfile.h:519
ENexusCreateMode
Definition: nxfile.h:167
generic integer type
Definition: nxfile.h:155
unsigned int BufferSize() const
Returns buffer size.
Definition: nxfile.h:291
NexusDataType DataType() const
Returns the data type.
Definition: nxfile.h:488
NexusDataType m_eDataType
Definition: nxfile.h:228
yat::SharedPtr< NexusItemInfo > NexusItemInfoPtr
Smart pointer definition helper.
Definition: nxfile.h:500
int * m_piDim
Definition: nxfile.h:231
NexusDataType DataType() const
Returns the data type.
Definition: nxfile.h:260
int * DimArray() const
Returns size array of dimensions.
Definition: nxfile.h:269
OpenMode
Files open mode.
Definition: nxfile.h:626
NexusException(const std::string &desc, const char *pcszOrigin)
Definition: nxfile.h:190
T Value() const
Return current value.
Definition: nxfile.h:405
Iterator operator++()
Pre-incrementation operator.
Definition: nxfile.h:440
const int MAX_DATASET_NDIMS
Definition: nxfile.h:74
int * m_piStart
Definition: nxfile.h:233
const char * AttrName() const
Accessors.
Definition: nxfile.h:538
bool IsOwner()
Definition: nxfile.h:350
int m_iLen
Definition: nxfile.h:517
NexusDataType
Definition: nxfile.h:137
int * m_piTotalDim
Definition: nxfile.h:232
unsigned int DatumSize() const
Returns datum size.
(NX_CHAR)
Definition: nxfile.h:154
const int MAX_NAME_LENGTH
Definition: nxfile.h:73
const char * ClassName() const
Returns class name of NeXus group.
Definition: nxfile.h:485
const std::string g_strNoDataSet
Definition: nxfile.h:76
const int MAX_RANK
Max datasets rank.
Definition: nxfile.h:175
std::list< NexusAttr > NeXusAttrList
definition of a attribute collection
Definition: nxfile.h:613
int * StartArray() const
Returns array of indices of starting values in Ith dimension.
Definition: nxfile.h:294
bool End() const
Is end of buffer reached ?
Definition: nxfile.h:447
int m_iTotalRank
Definition: nxfile.h:230
no mode specified
Definition: nxfile.h:629
NEXUSCPP_DECL std::set< CompressionFilter > AvailableCompressFilters()
Return the available compress filters.
bool IsSubset() const
Is the dataset info about a subset?
Definition: nxfile.h:298
std::map< FilterOption, int > FilterConfig
Filter options to be passed with CreateCompressedDataSet method.
Definition: nxfile.h:93
Basic iterator to browse over NeXusDataSet values.
Definition: nxfile.h:389
std::list< NexusItemInfoPtr > NexusItemInfoList
ItemInfo smart pointers list definition helper.
Definition: nxfile.h:503
NexusException(const char *pcszDesc, const char *pcszOrigin)
Definition: nxfile.h:187
CompressionFilter
List of known compression filters.
Definition: nxfile.h:102
NexusException()
Definition: nxfile.h:185
Iterator operator++(int)
Post-incrementation operator.
Definition: nxfile.h:433
char * m_pszName
Definition: nxfile.h:516
void SetData(void *pData)
Definition: nxfile.h:368
NEXUSCPP_DECL const char * get_name()
Apply on ZLIB filter.
Definition: nxfile.h:85
NEXUSCPP_DECL const char * get_version()
Free function: provide project version & name.
NexusRC
NeXus return codes.
Definition: nxfile.h:159
void SetUserPtr(void *p)
Set user pointer.
Definition: nxfile.h:1037
int TotalRank() const
Returns the whole data set rank.
Definition: nxfile.h:266
BitShuffle filter.
Definition: nxfile.h:88
const char DATASET_CLASS[]
Definition: nxfile.h:75
Iterator(const NexusDataSet &DataSet)
Definition: nxfile.h:399
const char * ItemName() const
Accessors.
Definition: nxfile.h:482