summaryrefslogtreecommitdiff
path: root/c++/config.hpp
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2025-04-22 13:35:38 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2025-04-22 13:35:38 +0200
commitd7b6dee2db415fc5d0052dca47a45c44b9aaba6d (patch)
treec21c80c117a1ba3830d668122cc5d47692605c47 /c++/config.hpp
parent60fb118680cf773dd5db44a4930bab4b4c119deb (diff)
Broken float decoder in forstio
Diffstat (limited to 'c++/config.hpp')
-rw-r--r--c++/config.hpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/c++/config.hpp b/c++/config.hpp
new file mode 100644
index 0000000..64f7a0f
--- /dev/null
+++ b/c++/config.hpp
@@ -0,0 +1,53 @@
+#pragma once
+
+#include <forstio/codec/data.hpp>
+#include <forstio/codec/json/json.hpp>
+
+#include <fstream>
+#include <sstream>
+#include <string_view>
+#include <string>
+
+namespace kel {
+namespace lbm {
+namespace sch {
+using namespace saw::schema;
+template<typename T, typename Desc>
+using LbmConfig = Struct<
+ Member<T, "delta_x">,
+ Member<T, "kinematic_viscosity">,
+ Member<T, "delta_t">
+>;
+}
+
+template<typename T, typename Desc>
+saw::error_or<saw::data<sch::LbmConfig<T,Desc>>> load_lbm_config(std::string_view file_name){
+ std::ifstream file{std::string{file_name}};
+
+ if(!file.is_open()){
+ return saw::make_error<saw::err::not_found>("Couldn't open file");
+ }
+
+ saw::data<sch::LbmConfig<T,Desc>, saw::encode::Json> lbm_json_conf{saw::heap<saw::array_buffer>(1u)};
+
+ uint8_t ele{};
+ while(file.readsome(reinterpret_cast<char*>(&ele), 1u) > 0u){
+ auto err = lbm_json_conf.get_buffer().push(ele,1u);
+ if(err.failed()){
+ return err;
+ }
+ }
+
+ saw::data<sch::LbmConfig<T,Desc>> lbm_conf;
+ saw::codec<sch::LbmConfig<T,Desc>, saw::encode::Json> json_codec;
+ {
+ auto eov = json_codec.decode(lbm_json_conf, lbm_conf);
+ if(eov.is_error()){
+ return std::move(eov.get_error());
+ }
+ }
+
+ return lbm_conf;
+}
+}
+}