123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- //
- // Created by patrik on 10.08.17.
- //
- #ifndef HDF4CPP_HDFFILE_H
- #define HDF4CPP_HDFFILE_H
- #include <string>
- #include <vector>
- #include <hdf4cpp/HdfObject.h>
- 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<HdfItem> 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<int32> getDatasetIds(const std::string& name) const;
- std::vector<int32> getGroupDataIds(const std::string& name) const;
- int32 sId;
- int32 vId;
- std::vector<std::pair<int32, Type> > loneRefs;
- };
- /// HdfFile iterator, gives the possibility to iterate over the items in the file
- class HdfFile::Iterator : public HdfObject, public std::iterator<std::bidirectional_iterator_tag, HdfItem> {
- 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
|