mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-11 13:35:03 -04:00
Improve dynamic values support
This commit is contained in:
parent
6896716b23
commit
90e1e89f80
@ -38,9 +38,11 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef std::string (*dynamic_fun_t)();
|
typedef std::string (*dynamic_fun_t)();
|
||||||
|
typedef std::string (*dynamic_fun_data_t)(void* data);
|
||||||
|
|
||||||
void set_constant_value(const path& mount_point, const path& file_path, const std::string& value);
|
void set_constant_value(const path& mount_point, const path& file_path, const std::string& value);
|
||||||
void set_dynamic_value(const path& mount_point, const path& file_path, dynamic_fun_t fun);
|
void set_dynamic_value(const path& mount_point, const path& file_path, dynamic_fun_t fun);
|
||||||
|
void set_dynamic_value_data(const path& mount_point, const path& file_path, dynamic_fun_data_t fun, void* data);
|
||||||
|
|
||||||
void delete_value(const path& mount_point, const path& file_path);
|
void delete_value(const path& mount_point, const path& file_path);
|
||||||
void delete_folder(const path& mount_point, const path& file_path);
|
void delete_folder(const path& mount_point, const path& file_path);
|
||||||
|
@ -22,6 +22,8 @@ struct sys_value {
|
|||||||
std::string name;
|
std::string name;
|
||||||
std::string _value;
|
std::string _value;
|
||||||
sysfs::dynamic_fun_t fun = nullptr;
|
sysfs::dynamic_fun_t fun = nullptr;
|
||||||
|
sysfs::dynamic_fun_data_t fun_data = nullptr;
|
||||||
|
void* data = nullptr;
|
||||||
|
|
||||||
sys_value() {}
|
sys_value() {}
|
||||||
sys_value(std::string name, std::string value)
|
sys_value(std::string name, std::string value)
|
||||||
@ -34,8 +36,15 @@ struct sys_value {
|
|||||||
//Nothing else to init
|
//Nothing else to init
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sys_value(std::string name, sysfs::dynamic_fun_data_t fun_data, void* data)
|
||||||
|
: name(name), fun_data(fun_data), data(data) {
|
||||||
|
//Nothing else to init
|
||||||
|
}
|
||||||
|
|
||||||
std::string value() const {
|
std::string value() const {
|
||||||
if (fun) {
|
if (fun_data){
|
||||||
|
return fun_data(data);
|
||||||
|
} else if (fun) {
|
||||||
return fun();
|
return fun();
|
||||||
} else {
|
} else {
|
||||||
return _value;
|
return _value;
|
||||||
@ -195,6 +204,18 @@ void set_value(sys_folder& folder, const std::string& name, sysfs::dynamic_fun_t
|
|||||||
folder.values.emplace_back(name, fun);
|
folder.values.emplace_back(name, fun);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_value(sys_folder& folder, const std::string& name, sysfs::dynamic_fun_data_t fun, void* data) {
|
||||||
|
for (auto& v : folder.values) {
|
||||||
|
if (v.name == name) {
|
||||||
|
v.fun_data = fun;
|
||||||
|
v.data = data;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
folder.values.emplace_back(name, fun, data);
|
||||||
|
}
|
||||||
|
|
||||||
void delete_value(sys_folder& folder, const std::string& name) {
|
void delete_value(sys_folder& folder, const std::string& name) {
|
||||||
folder.values.erase(std::remove_if(folder.values.begin(), folder.values.end(), [&name](const sys_value& value){
|
folder.values.erase(std::remove_if(folder.values.begin(), folder.values.end(), [&name](const sys_value& value){
|
||||||
return value.name == name;
|
return value.name == name;
|
||||||
@ -333,6 +354,17 @@ void sysfs::set_dynamic_value(const path& mount_point, const path& file_path, dy
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sysfs::set_dynamic_value_data(const path& mount_point, const path& file_path, dynamic_fun_data_t fun, void* data) {
|
||||||
|
auto& root_folder = find_root_folder(mount_point);
|
||||||
|
|
||||||
|
if (file_path.size() == 2) {
|
||||||
|
::set_value(root_folder, file_path.base_name(), fun, data);
|
||||||
|
} else {
|
||||||
|
auto& folder = find_folder(root_folder, file_path, 1, file_path.size() - 1);
|
||||||
|
::set_value(folder, file_path.base_name(), fun, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void sysfs::delete_value(const path& mount_point, const path& file_path) {
|
void sysfs::delete_value(const path& mount_point, const path& file_path) {
|
||||||
auto& root_folder = find_root_folder(mount_point);
|
auto& root_folder = find_root_folder(mount_point);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user