File indexing completed on 2026-07-29 09:12:12
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include <string>
0012 #include <type_traits>
0013
0014 #include "H5Object.hpp"
0015 #include "H5PropertyList.hpp"
0016 #include "bits/H5Annotate_traits.hpp"
0017 #include "bits/H5Node_traits.hpp"
0018
0019 namespace HighFive {
0020
0021
0022
0023
0024
0025 class File: public Object, public NodeTraits<File>, public AnnotateTraits<File> {
0026 public:
0027 const static ObjectType type = ObjectType::File;
0028
0029 enum class AccessMode {
0030 None = 0x00u,
0031
0032 ReadOnly = 0x01u,
0033
0034 ReadWrite = 0x02u,
0035
0036 Truncate = 0x04u,
0037
0038 Excl = 0x08u,
0039
0040 Debug = 0x10u,
0041
0042 Create = 0x20u,
0043
0044 ReadSWMR = 0x40u,
0045
0046 WriteSWMR = 0x80u,
0047
0048 Overwrite = Truncate,
0049
0050 OpenOrCreate = ReadWrite | Create
0051 };
0052
0053 constexpr static AccessMode ReadOnly = AccessMode::ReadOnly;
0054 constexpr static AccessMode ReadWrite = AccessMode::ReadWrite;
0055 constexpr static AccessMode Truncate = AccessMode::Truncate;
0056 constexpr static AccessMode Excl = AccessMode::Excl;
0057 constexpr static AccessMode Debug = AccessMode::Debug;
0058 constexpr static AccessMode Create = AccessMode::Create;
0059 constexpr static AccessMode Overwrite = AccessMode::Overwrite;
0060 constexpr static AccessMode OpenOrCreate = AccessMode::OpenOrCreate;
0061 constexpr static AccessMode ReadSWMR = AccessMode::ReadSWMR;
0062 constexpr static AccessMode WriteSWMR = AccessMode::WriteSWMR;
0063
0064
0065
0066
0067
0068
0069
0070
0071 explicit File(const std::string& filename,
0072 AccessMode openFlags = ReadOnly,
0073 const FileAccessProps& fileAccessProps = FileAccessProps::Default());
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083 File(const std::string& filename,
0084 AccessMode access_mode,
0085 const FileCreateProps& fileCreateProps,
0086 const FileAccessProps& fileAccessProps = FileAccessProps::Default());
0087
0088
0089 File(File&& other) noexcept = default;
0090
0091
0092 File& operator=(File&& other) = default;
0093
0094
0095 File(const File& other) = default;
0096
0097
0098 File& operator=(const File& other) = default;
0099
0100
0101
0102
0103 const std::string& getName() const;
0104
0105
0106 std::string getPath() const noexcept {
0107 return "/";
0108 }
0109
0110
0111 hsize_t getMetadataBlockSize() const;
0112
0113
0114 std::pair<H5F_libver_t, H5F_libver_t> getVersionBounds() const;
0115
0116 #if H5_VERSION_GE(1, 10, 1)
0117
0118 H5F_fspace_strategy_t getFileSpaceStrategy() const;
0119
0120
0121 hsize_t getFileSpacePageSize() const;
0122 #endif
0123
0124
0125
0126
0127
0128
0129 void flush();
0130
0131 #if H5_VERSION_GE(1, 10, 0)
0132
0133 void startSWMRWrite();
0134 #endif
0135
0136
0137 FileCreateProps getCreatePropertyList() const {
0138 return details::get_plist<FileCreateProps>(*this, H5Fget_create_plist);
0139 }
0140
0141
0142 FileAccessProps getAccessPropertyList() const {
0143 return details::get_plist<FileAccessProps>(*this, H5Fget_access_plist);
0144 }
0145
0146
0147 size_t getFileSize() const;
0148
0149
0150
0151
0152
0153
0154
0155 size_t getFreeSpace() const;
0156
0157 protected:
0158 File() = default;
0159 using Object::Object;
0160
0161 private:
0162 mutable std::string _filename{};
0163
0164 template <typename>
0165 friend class PathTraits;
0166 };
0167
0168 inline File::AccessMode operator|(File::AccessMode lhs, File::AccessMode rhs) {
0169 using int_t = std::underlying_type<File::AccessMode>::type;
0170 return static_cast<File::AccessMode>(static_cast<int_t>(lhs) | static_cast<int_t>(rhs));
0171 }
0172
0173 inline File::AccessMode operator&(File::AccessMode lhs, File::AccessMode rhs) {
0174 using int_t = std::underlying_type<File::AccessMode>::type;
0175 return static_cast<File::AccessMode>(static_cast<int_t>(lhs) & static_cast<int_t>(rhs));
0176 }
0177
0178 inline File::AccessMode operator^(File::AccessMode lhs, File::AccessMode rhs) {
0179 using int_t = std::underlying_type<File::AccessMode>::type;
0180 return static_cast<File::AccessMode>(static_cast<int_t>(lhs) ^ static_cast<int_t>(rhs));
0181 }
0182
0183 inline File::AccessMode operator~(File::AccessMode mode) {
0184 using int_t = std::underlying_type<File::AccessMode>::type;
0185 return static_cast<File::AccessMode>(~static_cast<int_t>(mode));
0186 }
0187
0188 inline const File::AccessMode& operator|=(File::AccessMode& lhs, File::AccessMode rhs) {
0189 lhs = lhs | rhs;
0190 return lhs;
0191 }
0192
0193 inline File::AccessMode operator&=(File::AccessMode& lhs, File::AccessMode rhs) {
0194 lhs = lhs & rhs;
0195 return lhs;
0196 }
0197
0198 inline File::AccessMode operator^=(File::AccessMode& lhs, File::AccessMode rhs) {
0199 lhs = lhs ^ rhs;
0200 return lhs;
0201 }
0202
0203 inline bool any(File::AccessMode mode) {
0204 return mode != File::AccessMode::None;
0205 }
0206
0207
0208 }
0209
0210
0211 #include "bits/H5Annotate_traits_misc.hpp"
0212 #include "bits/H5File_misc.hpp"
0213 #include "bits/H5Node_traits_misc.hpp"
0214 #include "bits/H5Path_traits_misc.hpp"