// // Created by patrik on 10.08.17. // #ifndef HDF4CPP_HDFFILE_H #define HDF4CPP_HDFFILE_H #include #include #include namespace hdf4cpp { class HdfItem; class HdfAttribute; /// Opens an hdf file and provides operations with it class HdfFile : public HdfObject { public: HdfFile(const std::string& path); HdfFile(const HdfFile& file) = delete; HdfFile(HdfFile&& file); HdfFile& operator=(const HdfFile& file) = delete; HdfFile& operator=(HdfFile&& file); ~HdfFile(); int32 getSId() const; int32 getVId() const; /// \returns an item from the file with the given name /// \param name the name of the item /// \note: If there are multiple items with the same name then the first will be returned HdfItem get(const std::string& name) const; /// \returns all the items from the file with the given name /// \param name the name of the item(s) std::vector getAll(const std::string& name) const; /// \returns the attribute with the given name /// \param name the name of the attribute HdfAttribute getAttribute(const std::string& name) const; class Iterator; Iterator begin() const; Iterator end() const; private: int32 getDatasetId(const std::string& name) const; int32 getGroupId(const std::string& name) const; int32 getDataId(const std::string& name) const; std::vector getDatasetIds(const std::string& name) const; std::vector getGroupDataIds(const std::string& name) const; int32 sId; int32 vId; std::vector > loneRefs; }; /// HdfFile iterator, gives the possibility to iterate over the items in the file class HdfFile::Iterator : public HdfObject, public std::iterator { public: Iterator(const HdfFile* file, int32 index, const HdfDestroyerChain& chain) : HdfObject(HFILE, ITERATOR, chain), file(file), index(index) {} bool operator!=(const Iterator& it) { return index != it.index; } bool operator==(const Iterator& it) { return index == it.index; } Iterator& operator++() { ++index; return *this; } Iterator operator++(int) { Iterator it(*this); ++index; return it; } Iterator& operator--() { --index; return *this; } Iterator operator--(int) { Iterator it(*this); --index; return it; } HdfItem operator*(); private: const HdfFile *file; int32 index; }; } #endif //HDF4CPP_HDFFILE_H