-
Notifications
You must be signed in to change notification settings - Fork 1
/
file.h
107 lines (93 loc) · 5.79 KB
/
file.h
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Copyright (C) High-Performance Computing Center Stuttgart (https://www.hlrs.de/)
// SPDX-License-Identifier: LGPL-2.1-or-later
/// \file file.h
/// query available settings within a file
#pragma once
#include <string>
#include <memory>
#include <vector>
#include "detail/export.h"
#include "detail/flags.h"
#include "detail/logger.h"
#ifdef CONFIG_NAMESPACE
namespace CONFIG_NAMESPACE {
#endif
namespace config {
namespace detail {
class Manager;
struct Config;
} // namespace detail
class ConfigBase;
template<class V>
class Value;
template<class V>
class Array;
/// query for existing sections and entries within a configuration file
class COVEXPORT File: detail::Logger {
public:
File(const std::string &path, detail::Manager *mgr = nullptr); ///< create an interface to a configuration file
~File(); ///< destructor
bool exists() const; ///< query if path has existed when configuration was loaded
std::string pathname() const; ///< actual path that was/would have been loaded
bool save(); ///< request to store current configuration to disk
void setSaveOnExit(bool enable); ///< request to save the current values when Manager is destroyed (i.e. application quits)
bool isSaveOnExit() const; ///< query whether file will be saved automatically on exit
std::vector<std::string> sections(); ///< all top-level sections
std::vector<std::string> subsections(const std::string §ion); ///< all subsections of a (sub-)section
std::vector<std::string> entries(const std::string §ion); ///< all entries within a (sub-)section
template<class V>
std::unique_ptr<Value<V>> value(const std::string §ion,
const std::string &name); ///< query existing configuration value
template<class V>
std::unique_ptr<Value<V>>
value(const std::string §ion, const std::string &name, const V &def,
Flag flags = Flag::Default); ///< create configuration value with the provided default
template<class V>
std::unique_ptr<Array<V>> array(const std::string §ion,
const std::string &name); ///< query existing configuration array
template<class V>
std::unique_ptr<Array<V>>
array(const std::string §ion, const std::string &name, const std::vector<V> &def,
Flag flags = Flag::Default); ///< create configuration array with the provided default
private:
detail::Manager *m_manager = nullptr;
detail::Config &m_config;
};
extern template std::unique_ptr<Value<bool>> COVEXPORT File::value(const std::string §ion, const std::string &name);
extern template std::unique_ptr<Value<int64_t>> COVEXPORT File::value(const std::string §ion,
const std::string &name);
extern template std::unique_ptr<Value<double>> COVEXPORT File::value(const std::string §ion,
const std::string &name);
extern template std::unique_ptr<Value<std::string>> COVEXPORT File::value(const std::string §ion,
const std::string &name);
extern template std::unique_ptr<Value<bool>> COVEXPORT File::value(const std::string §ion, const std::string &name,
const bool &def, Flag flags);
extern template std::unique_ptr<Value<int64_t>>
COVEXPORT File::value(const std::string §ion, const std::string &name, const int64_t &def, Flag flags);
extern template std::unique_ptr<Value<double>>
COVEXPORT File::value(const std::string §ion, const std::string &name, const double &def, Flag flags);
extern template std::unique_ptr<Value<std::string>>
COVEXPORT File::value(const std::string §ion, const std::string &name, const std::string &def, Flag flags);
extern template std::unique_ptr<Array<bool>> COVEXPORT File::array(const std::string §ion, const std::string &name);
extern template std::unique_ptr<Array<int64_t>> COVEXPORT File::array(const std::string §ion,
const std::string &name);
extern template std::unique_ptr<Array<double>> COVEXPORT File::array(const std::string §ion,
const std::string &name);
extern template std::unique_ptr<Array<std::string>> COVEXPORT File::array(const std::string §ion,
const std::string &name);
extern template std::unique_ptr<Array<bool>> COVEXPORT File::array(const std::string §ion, const std::string &name,
const std::vector<bool> &def, Flag flags);
extern template std::unique_ptr<Array<int64_t>> COVEXPORT File::array(const std::string §ion,
const std::string &name,
const std::vector<int64_t> &def, Flag flags);
extern template std::unique_ptr<Array<double>> COVEXPORT File::array(const std::string §ion,
const std::string &name,
const std::vector<double> &def, Flag flags);
extern template std::unique_ptr<Array<std::string>> COVEXPORT File::array(const std::string §ion,
const std::string &name,
const std::vector<std::string> &def,
Flag flags);
} // namespace config
#ifdef CONFIG_NAMESPACE
}
#endif