NexusCPP  3.5.0
nxfile.h
Go to the documentation of this file.
1 //*****************************************************************************
17 //*****************************************************************************
18 
19 #ifndef __NX_FILE_H__
20 #define __NX_FILE_H__
21 
22 // ============================================================================
39 // ============================================================================
40 
41 // standard library objets
42 #include <iostream>
43 #include <vector>
44 #include <list>
45 #include <map>
46 #include <stack>
47 #include <string>
48 #include <string.h>
49 #include <stdlib.h>
50 #include <cstring>
51 
52 // yat
53 #include <yat/CommonHeader.h>
54 #include <yat/memory/SharedPtr.h>
55 #include <yat/threading/Utilities.h>
56 #include <yat/threading/Mutex.h>
57 
58 #include <nexuscpp/impl/nxdebug.h>
59 
60 #if defined(WIN32) && defined(NEXUSCPP_DLL)
61 # if defined (NEXUSCPP_BUILD)
62 # define NEXUSCPP_DECL __declspec(dllexport)
63 # else
64 # define NEXUSCPP_DECL __declspec(dllimport)
65 # endif
66 #else
67 # define NEXUSCPP_DECL
68 #endif
69 
70 namespace nxcpp
71 {
72 
73 const int MAX_NAME_LENGTH = 256; // For class, attributes, group names
74 const int MAX_DATASET_NDIMS = 256; // Maximum number of dimensions in a dataset
75 const char DATASET_CLASS[] = "SDS"; // Class name for NeXus data set
76 const std::string g_strNoDataSet = "(no data set)";
77 
78 
79 //=============================================================================
81 //=============================================================================
83 {
86 
88  bitshuffle_compression, // default is BSHUF_H5_COMPRESS_LZ4
90 };
91 
93 typedef std::map<FilterOption, int> FilterConfig;
94 
103 {
104  CompressNone, // No compression
105  CompressZLIB, // ZLIB (internal)
106  CompressLZ4, // LZ4 (internal)
107  CompressBsLZ4, // Bitshuffle (LZ4, internal)
108  CompressZstd, // Zstandard (not yet available)
109  CompressBlosc2, // Blosc-2 (not yet available)
110  CompressBzip2, // bzip2 (not yet available)
111 };
112 
116 
118 NEXUSCPP_DECL std::set<CompressionFilter> AvailableCompressFilters();
119 
120 //=============================================================================
121 // NexusGlobalLock
122 //
123 // Ensure exclusive access to the nexus file API during the scope of each instance
124 // of this class
125 //=============================================================================
127 {
128 public:
129  NexusGlobalLock();
131 };
132 
133 // Forward declaration
134 class NexusFileImpl;
135 
136 // NeXus data types (see napi.h)
138 {
139  NX_NONE = 0,
140  NX_CHAR = 4,
143  NX_INT8 = 20,
144  NX_UINT8 = 21,
145  NX_INT16 = 22,
146  NX_UINT16 = 23,
147  NX_INT32 = 24,
148  NX_UINT32 = 25,
149  NX_INT64 = 26,
150  NX_UINT64 = 27,
151  NX_BINARY = 21,
152  // Logical data types (not defined in NeXus API) readed in NeXus meta-DTD files
153  ISO8601 = 100,
154  NX_INT = 102,
155  NX_FLOAT = 103
156 };
157 
160 {
161  NX_OK = 1,
162  NX_EOD = -1,
164 };
165 
166 // Create access types
168 {
169  NX_HDF4 = 0,
170  NX_HDF5, // This is the default
171  NX_XML // Not implemented yet
172 };
173 
175 const int MAX_RANK = 32;
176 
177 //=============================================================================
181 //=============================================================================
182 class NEXUSCPP_DECL NexusException: public yat::Exception
183 {
184 public:
186 
187  NexusException(const char *pcszDesc, const char *pcszOrigin):
188  yat::Exception("NEXUSCPP_ERROR", pcszDesc, pcszOrigin) {}
189 
190  NexusException(const std::string& desc, const char *pcszOrigin):
191  yat::Exception("NEXUSCPP_ERROR", desc.c_str(), pcszOrigin) {}
192 
194  void PrintMessage();
195 
200  void GetMsg(char *pBuf, int iLen);
201 };
202 
203 //=============================================================================
207 //=============================================================================
209 {
210 friend class NexusFileImpl;
211 
212 private:
213  void *m_pLink; // Anonymous pointer to Nexus link object
214 
215 public:
216  NexusItemID();
217  ~NexusItemID();
218 };
219 
220 //=============================================================================
224 //=============================================================================
226 {
227 protected:
229  int m_iRank; // Data storage rank
230  int m_iTotalRank; // Whole dataset rank
231  int *m_piDim; // size of each dimensions
232  int *m_piTotalDim; // size of each dimensions of the whole dataset
233  int *m_piStart; // indices of starting values in each dimensions
234 
235 public:
236 
238  static int DataTypeSize(NexusDataType eDataType);
239 
242 
244  ~NexusDataSetInfo();
245 
250  void SetInfo(NexusDataType eDataType, int iRank);
251 
253  void Clear();
254 
255  //-----------------------------------------------------------------
257 
258 
260  NexusDataType DataType() const { return m_eDataType; }
261 
263  int Rank() const { return m_iRank; }
264 
266  int TotalRank() const { return m_iTotalRank; }
267 
269  int *DimArray() const { return m_piDim; }
270 
273  int *TotalDimArray() const { return m_piTotalDim; }
274 
279  void SetTotalDim(int iTotalRank, int *piTotalDim);
280 
282  int Size() const;
283 
285  bool IsEmpty() const;
286 
288  unsigned int DatumSize() const;
289 
291  unsigned int BufferSize() const { return Size() * DatumSize(); }
292 
294  int *StartArray() const { return m_piStart; }
295  int *StartArray();
296 
298  bool IsSubset() const { return m_piStart ? true:false;}
299 
301 };
302 
303 //=============================================================================
307 //=============================================================================
309 {
310 private:
311  void *m_pData; // Data set
312  bool m_owner; // ownsership
313 
314 public:
316  NexusDataSet();
317 
319  NexusDataSet(const NexusDataSet &dataset);
320 
328  NexusDataSet(NexusDataType eDataType, void *pData, int iRank, int *piDim, int *piStart=NULL);
329 
332  ~NexusDataSet();
333 
335  void FreeData();
336 
338  void Clear();
339 
341  void Alloc();
342 
346  void SetOwner(bool this_has_ownership);
347 
350  bool IsOwner() { return m_owner; }
351 
352  //-----------------------------------------------------------------
354 
355 
357  void *Data() const { return m_pData; }
358 
360  unsigned int MemSize() const;
361 
363  unsigned int Size() const;
364 
368  void SetData(void *pData) { m_pData = pData; }
369 
376  void SetData(const void *pData, NexusDataType eDataType, int iRank, int *piDimArray);
377 
382  void SetDimension(int iDim, int iSize);
383 
385 
386  //=============================================================================
388  //=============================================================================
389  template <class T> class Iterator
390  {
391  private:
392  const NexusDataSet &m_DataSet;
393  char *m_pDataItem;
394 
395  public:
399  Iterator(const NexusDataSet &DataSet) : m_DataSet(DataSet)
400  {
401  m_pDataItem = (char *)DataSet.Data();
402  }
403 
405  T Value() const
406  {
407  switch( m_DataSet.DataType() )
408  {
409  case NX_FLOAT32:
410  return T(*((float *)m_pDataItem));
411  case NX_FLOAT64:
412  return T(*((double *)m_pDataItem));
413  case NX_INT8:
414  return T(*((char *)m_pDataItem));
415  case NX_INT16:
416  return T(*((short *)m_pDataItem));
417  case NX_INT32:
418  return T(*((long *)m_pDataItem));
419  case NX_UINT8:
420  return T(*((unsigned char *)m_pDataItem));
421  case NX_UINT16:
422  return T(*((unsigned short *)m_pDataItem));
423  case NX_UINT32:
424  return T(*((unsigned long *)m_pDataItem));
425  }
426  return T(0);
427  }
428 
430  T operator *() { return Value(); }
431 
434  {
435  m_pDataItem += m_DataSet.DatumSize();
436  return *this;
437  }
438 
441  {
442  m_pDataItem += m_DataSet.DatumSize();
443  return *this;
444  }
445 
447  bool End() const
448  {
449  return m_pDataItem == (char *)m_DataSet.Data() + m_DataSet.MemSize();
450  }
451  };
452 };
453 
454 //=============================================================================
459 //=============================================================================
461 {
462 friend class NexusFileImpl;
463 
464 private:
465  char *m_pszItem; // Name of NeXus data item (group or set)
466  char *m_pszClass; // Class of NeXus group
467  NexusDataType m_eDataType; // data type (NX_NONE for groups)
468  void *m_pContext; // Extra Data storing current context
469 
470 public:
472  NexusItemInfo();
473 
475  ~NexusItemInfo();
476 
477  //-----------------------------------------------------------------
479 
480 
482  const char *ItemName() const { return m_pszItem; }
483 
485  const char *ClassName() const { return m_pszClass; }
486 
488  NexusDataType DataType() const { return m_eDataType; }
489 
491  bool IsDataSet() const;
492 
494  bool IsGroup() const;
495 
497 };
498 
500 typedef yat::SharedPtr<NexusItemInfo> NexusItemInfoPtr;
501 
503 typedef std::list<NexusItemInfoPtr> NexusItemInfoList;
504 
505 //=============================================================================
510 //=============================================================================
512 {
513 friend class NexusFileImpl;
514 
515 protected:
516  char *m_pszName; // Attribute name
517  int m_iLen; // Attribute length
518  NexusDataType m_eDataType; // Type of attribute data
519  void *m_pContext; // Extra Data storing current context
520 
521 public:
522 #if ! defined(OBSOLETE_HDF5_WORKAROUND)
523  NexusAttrInfo();
525 
527  ~NexusAttrInfo();
528 #else
529  NexusAttrInfo() {};
530  ~NexusAttrInfo() {};
531 #endif
532 
533  //-----------------------------------------------------------------
535 
536 
538  const char *AttrName() const { return m_pszName; }
539 
541  int Len() const { return m_iLen; }
542 
544  NexusDataType DataType() const { return m_eDataType; }
545 
547 };
548 
549 //=============================================================================
554 //=============================================================================
556 {
557 private:
558  void * m_pAttrValue;
559 
560 public:
564  NexusAttr(const std::string &strName);
565 
567  NexusAttr(const NexusAttr &aAttr);
568  ~NexusAttr();
569 
571  void SetLong(long lValue);
572 
576  void SetCString(const char *pcszValue);
577 
581  void SetString(const std::string &strValue);
582 
586  void SetDouble(double dValue);
587 
591  void SetFloat(float fValue);
592 
594  long GetLong() const;
595 
597  double GetDouble() const ;
598 
600  float GetFloat() const;
601 
603  std::string GetString() const;
604 
606  void *RawValue() const;
607 
608 private:
609  void CopyValue(const NexusAttr &aAttr);
610 };
611 
613 typedef std::list<NexusAttr> NeXusAttrList;
614 
615 //=============================================================================
621 //=============================================================================
623 {
624 public:
626  enum OpenMode
627  {
630  WRITE
631  };
632 
633 private:
634  NexusFileImpl *m_pImpl; // Pointer to implementation
635  void *m_pUserPtr; // a free data pointer
636 
637 public:
638 
639  static const bool USE_LOCK = true;
640 
641  // Initialize the HDF5 context
642  static void Initialize();
643 
644 #if ! defined(OBSOLETE_HDF5_WORKAROUND)
645 
647 
653  NexusFile(const char *pcszFullPath=NULL, OpenMode eMode = NONE, bool use_lock = false);
654 
658  ~NexusFile();
659 
660 #else
661  NexusFile(const char *pcszFullPath=NULL, OpenMode eMode = NONE, bool use_lock = false) {};
662  ~NexusFile() {};
663 #endif
664 
666 
667  //-----------------------------------------------------------------
669 
670 
679  void Create(const char *pcszFullPath, ENexusCreateMode eMode = NX_HDF5);
680 
684  void OpenRead(const char *pcszFullPath);
685 
689  void OpenReadWrite(const char *pcszFullPath);
690 
693  void Close();
694 
696  void Flush();
697 
699 
700  //-----------------------------------------------------------------
702 
703 
713  void CreateGroup(const char *pcszName, const char *pcszClass, bool bOpen=true);
714 
721  bool OpenGroup(const char *pcszName, const char *pcszClass, bool bThrowException=true);
722 
724  void CloseGroup();
725 
727  void CloseAllGroups();
728 
730 
731  //-----------------------------------------------------------------
733 
734 
742  void CreateDataSet(const char *pcszName, NexusDataType eDataType,
743  int iRank, int *piDim, int bOpen=true);
744 
755  void CreateCompressedDataSet(const char *pcszName, NexusDataType eDataType,
756  int iRank, int *piDim, int *piChunkDim,
758  FilterConfig filter_config=FilterConfig(), int bOpen=true);
759 
762  void CloseDataSet();
763 
773  void WriteData(const char *pcszName, void *pData, NexusDataType eDataType,
774  int iRank, int *piDim, bool bCreate=true);
775 
784  void WriteData(const char *pcszName, void *pData, NexusDataType eDataType,
785  const std::vector<std::size_t>& Shape, bool bCreate=true);
786 
798  void WriteDataSubSet(const char *pcszName, void *pData, NexusDataType eDataType,
799  int iRank, int *piStart, int *piDim, bool bCreate=true, bool bNoDim = false);
800 
802  void WriteData(const char *pcszName, float fValue, bool bCreate=true);
803 
805  void WriteData(const char *pcszName, double dValue, bool bCreate=true);
806 
808  void WriteData(const char *pcszName, long lValue, bool bCreate=true);
809 
811  void WriteData(const char *pcszName, const char *pcszValue, bool bCreate=true);
812 
814  void WriteData(const char *pcszName, void *pData, int _iLen, bool bCreate=true);
815 
820  bool OpenDataSet(const char *pcszName, bool bThrowException=true);
821 
828  void PutData(void *pData, const char *pcszName=NULL, int bFlush=false);
829 
837  void PutDataSubSet(void *pData, int *piStart, int *piSize, const char *pcszName=NULL);
838 
839  //-----------------------------------------------------------------
841 
842 
848  void GetData(NexusDataSet *pDataSet, const char *pcszDataSet=NULL);
849 
855  void GetDataSubSet(NexusDataSet *pDataSet, const char *pcszDataSet=NULL);
856 
861  void GetDataSetInfo(NexusDataSetInfo *pDataSetInfo, const char *pcszDataSet);
862 
864 
865  //-----------------------------------------------------------------
867 
868 
878  void GetAttribute(const char *pcszAttr, int *piBufLen, void *pData,
879  NexusDataType eDataType);
880 
888  void GetAttribute(const char *pcszAttr, long *plValue);
889 
897  void GetAttribute(const char *pcszAttr, double *pdValue);
898 
906  void GetAttribute(const char *pcszAttr, float *pfValue);
907 
912  void GetAttribute(const char *pcszAttr, std::string *pstrValue);
913 
915 
916  //-----------------------------------------------------------------
921 
922 
929  void PutAttr(const char *pcszName, void *pValue, int iLen, NexusDataType eDataType);
930 
935  void PutAttr(const char *pcszName, long lValue);
936 
941  void PutAttr(const char *pcszName, const char *pcszValue);
942 
947  void PutAttr(const char *pcszName, double dValue);
948 
953  void PutAttr(const char *pcszName, float fValue);
954 
956 
957  //-----------------------------------------------------------------
959 
960 
962  int ItemCount();
963 
965  int AttrCount();
966 
972  int GetFirstItem(NexusItemInfo *pItemInfo);
973 
979  int GetNextItem(NexusItemInfo *pItemInfo);
980 
993  int GetFirstAttribute(NexusAttrInfo *pAttrInfo, const char *pcszDataSet=NULL);
994 
1004  int GetNextAttribute(NexusAttrInfo *pAttrInfo);
1005 
1007 
1008  //-----------------------------------------------------------------
1010 
1011 
1015  void GetDataSetLink(NexusItemID *pnxl);
1016 
1020  void GetGroupLink(NexusItemID *pnxl);
1021 
1025  void LinkToCurrentGroup(const NexusItemID &nxl);
1026 
1028 
1029  //-----------------------------------------------------------------
1031 
1032 
1034  void *UserPtr() const { return m_pUserPtr; }
1035 
1037  void SetUserPtr(void *p) { m_pUserPtr = p; }
1038 
1040 
1041  //-----------------------------------------------------------------
1043 
1044 
1052  bool OpenGroupPath(const char *pszPath, bool bThrowException=true);
1053 
1060  bool CreateGroupPath(const char *pszPath);
1061 
1070  int SearchGroup(const char *pszGroupName, const char *pszClassName,
1071  std::vector<std::string> *pvecPaths, const char *pszStartPath=NULL);
1072 
1080  int SearchDataSetFromAttr(const char *pszAttrName, std::vector<std::string> *pvecDataSets, const std::string &strAttrVal="");
1081 
1089  int SearchFirstDataSetFromAttr(const char *pszAttrName, std::string *pstrDataSet, const std::string &strAttrVal="");
1090 
1099  int SearchDataSetFromAttrAndRank(const char *pszAttrName, int iRank, std::vector<std::string> *pvecDataSets, const std::string &strAttrVal="");
1100 
1109  int SearchFirstDataSetFromAttrAndRank(const char *pszAttrName, int iRank, std::string *pstrDataSet, const std::string &strAttrVal="");
1110 
1115  std::string GetAttributeAsString(const NexusAttrInfo &aAttrInfo);
1116 
1123  bool HasAttribute(const char *pszAttrName, const char *pcszDataSet=NULL, const std::string &strAttrVal="");
1124 
1131  bool GetAttributeAsString(const char *pszAttrName, const char *pcszDataSet, std::string *pstrValue);
1132 
1141  bool BuildAxisDict(std::map<std::string, std::string> *pmapAxis, const char *pszGroupPath=NULL, const char *pcszDataSet=NULL);
1142 
1152  bool BuildScanAxisDict(std::map<std::string, std::string> *pmapAxis, const char *pszGroupPath=NULL, const char *pcszDataSet=NULL);
1153 
1162  int GetScanDim(const char *pszDataGroupPath);
1163 
1165  std::string CurrentGroupName();
1166 
1168  std::string CurrentGroupClass();
1169 
1171  std::string CurrentGroupPath();
1172 
1174  std::string CurrentDataset();
1175 
1181  void GetGroupChildren(std::vector<std::string> *pvecDatasets, std::vector<std::string> *pvecGroupNames, std::vector<std::string> *pvecGroupClasses);
1182 
1186  NexusItemInfoList GetGroupChildren();
1187 
1189 
1190  //-----------------------------------------------------------------
1192 
1193 
1194  void GetAttribute(const char*, char*, int);
1195 
1197 
1198 };
1199 
1200 //-----------------------------------------------------------------
1202 //-----------------------------------------------------------------
1203 NEXUSCPP_DECL const char* get_version();
1204 NEXUSCPP_DECL const char* get_name();
1205 
1206 } // namespace nxcpp
1207 
1208 #endif
Definition: nxfile.h:104
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
Definition: nxfile.h:110
FilterOption
id list of all filters options
Definition: nxfile.h:82
Value not defined in the NeXus API.
Definition: nxfile.h:140
Definition: nxfile.h:109
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
Definition: nxfile.h:170
int * TotalDimArray() const
Definition: nxfile.h:273
void * m_pContext
Definition: nxfile.h:519
ENexusCreateMode
Definition: nxfile.h:167
Definition: nxfile.h:622
Definition: nxfile.h:150
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
Definition: nxfile.h:143
Iterator operator++()
Pre-incrementation operator.
Definition: nxfile.h:440
Definition: nxfile.h:141
const int MAX_DATASET_NDIMS
Definition: nxfile.h:74
Definition: nxfile.h:208
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.
Definition: nxfile.h:145
(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
Definition: nxfile.h:169
const int MAX_RANK
Max datasets rank.
Definition: nxfile.h:175
Definition: nxfile.h:139
Definition: nxfile.h:144
std::list< NexusAttr > NeXusAttrList
definition of a attribute collection
Definition: nxfile.h:613
Definition: nxfile.h:511
int * StartArray() const
Returns array of indices of starting values in Ith dimension.
Definition: nxfile.h:294
Definition: nxfile.h:142
Definition: nxfile.h:147
Definition: nxfile.h:162
bool End() const
Is end of buffer reached ?
Definition: nxfile.h:447
Definition: nxdebug.h:31
Definition: nxfile.h:105
Definition: nxfile.h:460
Definition: nxfile.h:153
int m_iTotalRank
Definition: nxfile.h:230
no mode specified
Definition: nxfile.h:629
Definition: nxfile.h:161
Definition: nxfile.h:126
NEXUSCPP_DECL std::set< CompressionFilter > AvailableCompressFilters()
Return the available compress filters.
Definition: nxfile.h:163
Definition: nxfile.h:308
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
Definition: nxfile.h:171
NexusException(const char *pcszDesc, const char *pcszOrigin)
Definition: nxfile.h:187
Definition: nxfile.h:89
Definition: nxfile.h:182
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
Definition: nxfile.h:148
Definition: nxfile.h:106
Definition: nxfile.h:146
Definition: nxfile.h:628
Definition: nxfile.h:225
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
Definition: nxfile.h:151
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
Definition: nxfile.h:107
const char DATASET_CLASS[]
Definition: nxfile.h:75
Iterator(const NexusDataSet &DataSet)
Definition: nxfile.h:399
Definition: nxfile.h:149
Definition: nxfile.h:108
Definition: nxfile.h:555
const char * ItemName() const
Accessors.
Definition: nxfile.h:482