Line data Source code
1 1 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : /// \file
5 : /// Defines class h5::Version for storing version history of files
6 :
7 : #pragma once
8 :
9 : #include <cstdint>
10 : #include <hdf5.h>
11 : #include <string>
12 :
13 : #include "IO/H5/Object.hpp"
14 : #include "IO/H5/OpenGroup.hpp"
15 :
16 : namespace h5 {
17 : /*!
18 : * \ingroup HDF5Group
19 : * \brief Used to store the version of the file
20 : *
21 : * A Version object should be stored inside each H5 object that is to represent
22 : * a file, e.g. Dat, or Text.
23 : *
24 : * \example
25 : * To write the version use:
26 : * \snippet Test_Version.cpp h5file_write_version
27 : * To read the version use:
28 : * \snippet Test_Version.cpp h5file_read_version
29 : *
30 : */
31 1 : class Version : public h5::Object {
32 : public:
33 : /// \cond HIDDEN_SYMOLS
34 : static std::string extension() { return ".ver"; }
35 :
36 : Version(bool exists, detail::OpenGroup&& group, hid_t location,
37 : std::string name, uint32_t version = 1);
38 :
39 : // Write a single string as the version.
40 : //
41 : // This is used for fixing a bug in CCE data written by SpEC and
42 : // will be removed once we no longer need to match that formatting. Do not
43 : // use for SpECTRE versioning!
44 : Version(bool exists, detail::OpenGroup&& group, hid_t location,
45 : std::string name, std::string version);
46 :
47 : Version(const Version& /*rhs*/) = delete;
48 : Version& operator=(const Version& /*rhs*/) = delete;
49 :
50 : Version(Version&& /*rhs*/) = delete; // NOLINT
51 : Version& operator=(Version&& /*rhs*/) = delete; // NOLINT
52 : ~Version() override = default;
53 : /// \endcond
54 :
55 0 : uint32_t get_version() const { return version_; }
56 :
57 1 : const std::string& subfile_path() const override { return path_; }
58 :
59 : private:
60 : /// \cond HIDDEN_SYMBOLS
61 : std::string path_;
62 : uint32_t version_;
63 : // group_ is necessary since the when the h5::Object is destroyed it closes
64 : // all groups that were opened to get to it.
65 : detail::OpenGroup group_;
66 : /// \endcond
67 : };
68 : } // namespace h5
|