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();
845 template <
typename NumT>