blob: 1c3057f6cde0eda1ab1e9c6ab16f24b345877985 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
/*
* This source code is released into the public domain.
*/
module;
#include <filesystem>
export module liblfvm:context;
namespace lfvm {
/*
* Our global context.
*/
export struct context {
// The database directory where our configuration is stored.
auto dbdir(this context const &self) -> std::filesystem::path
{
return self._dbdir;
}
// The directory where VM configurations are stored (usually a
// subdirectory of dbdir).
auto vmconfdir(this context const &self) -> std::filesystem::path
{
return self.dbdir() / "vm";
}
// The directory where disk configurations are stored (usually a
// subdirectory of dbdir).
auto diskconfdir(this context const &self) -> std::filesystem::path
{
return self.dbdir() / "disk";
}
// The path to our configuration file.
auto config_file(this context const &self) -> std::filesystem::path
{
return self.dbdir() / "config.ucl";
}
// The configuration file for a particular VM.
auto vm_config_file(this context const &self,
std::string_view vm_name)
-> std::filesystem::path
{
using namespace std::literals;
return self.vmconfdir() / (vm_name + ".ucl"s);
}
// The configuration file for a particular disk.
auto disk_config_file(this context const &self,
std::string_view disk_name)
-> std::filesystem::path
{
using namespace std::literals;
return self.diskconfdir() / (disk_name + ".ucl"s);
}
private:
std::filesystem::path _dbdir = LFVM_DBDIR;
};
export auto get_context() -> context & {
static context ctx;
return ctx;
}
} // namespace lfvm
|