2 #define NEXUSFILE_HPP 1
15 # if IN_NEXUS_CPP_LIBRARY
16 # define NXDLL_EXPORT __declspec(dllexport)
18 # define NXDLL_EXPORT __declspec(dllimport)
83 typedef std::multimap<std::string, std::string>
TypeMap;
121 std::pair<std::string, std::string> getNextEntry();
151 void walkFileForTypeMap(
const std::string path,
const std::string class_name, TypeMap &tmap);
159 const std::string makeCurrentPath(
const std::string currpath,
const std::string subpath);
166 void initOpenFile(
const std::string& filename,
const NXaccess access = NXACC_READ);
175 File(
const std::string& filename,
const NXaccess access = NXACC_READ);
183 File(
const char *filename,
const NXaccess access = NXACC_READ);
191 File(NXhandle handle,
bool close_handle =
false);
202 template<
typename NumT>
203 void malloc(NumT*& data,
const Info& info);
205 template<
typename NumT>
206 void free(NumT*& data);
216 void makeGroup(
const std::string& name,
const std::string& class_name,
217 bool open_group =
false);
225 void openGroup(
const std::string& name,
const std::string& class_name);
234 void openPath(
const std::string& path);
243 void openGroupPath(
const std::string& path);
249 std::string getPath();
260 void makeData(
const std::string& name,
NXnumtype type,
261 const std::vector<int>& dims,
bool open_data =
false);
271 void makeData(
const std::string& name,
NXnumtype type,
272 const std::vector<int64_t>& dims,
bool open_data =
false);
282 template <
typename NumT>
283 void makeData(
const std::string& name,
const NXnumtype type,
284 const NumT length,
bool open_data =
false);
292 void writeData(
const std::string& name,
const std::string& value);
300 void writeData(
const std::string& name,
const char* value);
309 template <
typename NumT>
310 void writeData(
const std::string& name,
const std::vector<NumT>& value);
319 template <
typename NumT>
320 void writeData(
const std::string& name,
const NumT& value);
330 template <
typename NumT>
331 void writeData(
const std::string& name,
const std::vector<NumT>& value,
332 const std::vector<int>& dims);
342 template <
typename NumT>
343 void writeData(
const std::string& name,
const std::vector<NumT>& value,
344 const std::vector<int64_t>& dims);
352 template <
typename NumT>
353 void writeExtendibleData(
const std::string& name, std::vector<NumT>& value);
362 template <
typename NumT>
363 void writeExtendibleData(
const std::string& name, std::vector<NumT>& value,
const int64_t chunk);
373 template <
typename NumT>
374 void writeExtendibleData(
const std::string& name, std::vector<NumT>& value,
375 std::vector<int64_t>& dims, std::vector<int64_t> & chunk);
385 template <
typename NumT>
386 void writeUpdatedData(
const std::string& name, std::vector<NumT>& value);
396 template <
typename NumT>
397 void writeUpdatedData(
const std::string& name, std::vector<NumT>& value,
398 std::vector<int64_t>& dims);
405 void makeCompData(
const std::string& name,
const NXnumtype type,
407 const std::vector<int>& bufsize,
bool open_data =
false);
419 void makeCompData(
const std::string& name,
const NXnumtype type,
421 const std::vector<int64_t>& bufsize,
bool open_data =
false);
429 template <
typename NumT>
430 void writeCompData(
const std::string & name,
431 const std::vector<NumT> & value,
433 const std::vector<int> & bufsize);
445 template <
typename NumT>
446 void writeCompData(
const std::string & name,
447 const std::vector<NumT> & value,
449 const std::vector<int64_t> & bufsize);
454 void openData(
const std::string& name);
464 void putData(
const void* data);
470 template <
typename NumT>
471 void putData(
const std::vector<NumT>& data);
479 void putAttr(
const AttrInfo& info,
const void* data);
488 template <
typename NumT>
489 void putAttr(
const std::string& name,
const NumT value);
497 void putAttr(
const char* name,
const char* value);
505 void putAttr(
const std::string& name,
const std::string value);
511 void putSlab(
void* data, std::vector<int>& start,
512 std::vector<int>& size);
521 void putSlab(
void* data, std::vector<int64_t>& start,
522 std::vector<int64_t>& size);
528 template <
typename NumT>
529 void putSlab(std::vector<NumT>& data, std::vector<int>& start,
530 std::vector<int>& size);
540 template <
typename NumT>
541 void putSlab(std::vector<NumT>& data, std::vector<int64_t>& start,
542 std::vector<int64_t>& size);
547 template <
typename NumT>
548 void putSlab(std::vector<NumT>& data,
int start,
int size);
558 template <
typename NumT>
559 void putSlab(std::vector<NumT>& data, int64_t start, int64_t size);
571 void makeLink(NXlink& link);
579 void makeNamedLink(
const std::string& name, NXlink& link);
585 void openSourceGroup();
592 void getData(
void* data);
602 template <
typename NumT>
603 std::vector<NumT> * getData();
613 template <
typename NumT>
614 void getData(std::vector<NumT>& data);
622 void getDataCoerce(std::vector<int> &data);
629 void getDataCoerce(std::vector<double> &data);
646 template <
typename NumT>
647 void readData(
const std::string & dataName, std::vector<NumT>& data);
657 template <
typename NumT>
658 void readData(
const std::string & dataName, NumT & data);
669 void readData(
const std::string & dataName, std::string & data);
674 std::string getStrData();
684 std::map<std::string, std::string> getEntries();
691 void getEntries(std::map<std::string, std::string> & result);
697 void getSlab(
void* data,
const std::vector<int>& start,
698 const std::vector<int>& size);
708 void getSlab(
void* data,
const std::vector<int64_t>& start,
709 const std::vector<int64_t>& size);
715 std::vector<AttrInfo> getAttrInfos();
721 bool hasAttr(
const std::string & name);
731 void getAttr(
const AttrInfo& info,
void* data,
int length = -1);
741 template <
typename NumT>
752 template <
typename NumT>
753 void getAttr(
const std::string& name, NumT& value);
763 std::string getStrAttr(
const AttrInfo & info);
778 bool sameID(NXlink& first, NXlink& second);
785 void printLink(NXlink & link);
794 void setNumberFormat(
NXnumtype& type,
const std::string& format);
803 std::string inquireFile(
const int buff_length = NX_MAXPATHLEN);
814 std::string isExternalGroup(
const std::string& name,
815 const std::string& type,
816 const unsigned buff_length = NX_MAXNAMELEN);
825 void linkExternal(
const std::string& name,
const std::string& type,
826 const std::string& url);
831 bool isDataSetOpen();
838 TypeMap *getTypeMap();
845 template <
typename NumT>
NXcompression
The available compression types.
std::vector< int64_t > dims
The dimensions of the file.
NXnumtype
The primitive types published by this API.
Header for IOStream like interface to NeXus files.
NXnumtype getType(NumT number)
This function returns the NXnumtype given a concrete number.
unsigned length
The length of the attribute.
Information about an attribute.
This structure holds the type and dimensions of a primative field/array.
std::multimap< std::string, std::string > TypeMap
Type definition for a type-keyed multimap.
std::string name
The name of the attribute.
The Object that allows access to the information in the file.
NXnumtype type
The primative type for the field.
NXnumtype type
The primative type for the attribute.