From 8ecfef96af8b4eb80f4620293e8c39af231399ac Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Thu, 1 Aug 2024 13:12:08 +0200 Subject: wip --- modules/codec/c++/args.hpp | 8 ++--- modules/codec/examples/SConscript | 7 ++-- modules/codec/examples/arg_parser.cpp | 67 +++++++++++++++++++++++++++++++++++ modules/codec/tests/args.cpp | 5 ++- 4 files changed, 78 insertions(+), 9 deletions(-) create mode 100644 modules/codec/examples/arg_parser.cpp diff --git a/modules/codec/c++/args.hpp b/modules/codec/c++/args.hpp index e3e651d..0253417 100644 --- a/modules/codec/c++/args.hpp +++ b/modules/codec/c++/args.hpp @@ -28,12 +28,12 @@ class data { template class data...>, schema::Tuple>, encode::Args> { private: - char** argv_; int argc_; + char** argv_; public: - data(char** argv, int argc): - argv_{argv}, - argc_{argc} + data(int argc, char** argv): + argc_{argc}, + argv_{argv} {} uint64_t size() const { diff --git a/modules/codec/examples/SConscript b/modules/codec/examples/SConscript index e06b9fb..3c06e86 100644 --- a/modules/codec/examples/SConscript +++ b/modules/codec/examples/SConscript @@ -20,11 +20,14 @@ env.headers += examples_env.headers; examples_objects = []; examples_env.add_source_files(examples_objects, ['csv_encode.cpp'], shared=False); +examples_env.csv_encode = examples_env.Program('#bin/csv_encode_example', [env.library_static, examples_objects]); -examples_env.examples_basic = examples_env.Program('#bin/csv_encode_example', [env.library_static, examples_objects]); +examples_objects = []; +examples_env.add_source_files(examples_objects, ['arg_parser.cpp'], shared=False); +examples_env.args_decode = examples_env.Program('#bin/arg_parser_example', [env.library_static, examples_objects]); # Set Alias -env.examples = [examples_env.examples_basic]; +env.examples = [examples_env.csv_encode, examples_env.args_decode]; env.Alias('examples', env.examples); if env["build_examples"]: diff --git a/modules/codec/examples/arg_parser.cpp b/modules/codec/examples/arg_parser.cpp new file mode 100644 index 0000000..569c464 --- /dev/null +++ b/modules/codec/examples/arg_parser.cpp @@ -0,0 +1,67 @@ +#include "../c++/args.hpp" + +#include + +namespace sch { +using namespace saw::schema; + +using ExArgStruct = Struct< + Member, + Member +>; + +using ExArgs = Args< + ExArgStruct, + Tuple<> +>; +} + +int main(int argc, char** argv){ + using namespace saw; + + data args_dat{argc, argv}; + codec args_codec; + + data nat_dat; + + auto eov = args_codec.decode(args_dat, nat_dat); + if(eov.is_error()){ + auto& err = eov.get_error(); + std::cerr<<"\n[Error] "<(); + for(uint64_t i = 0; i < prog.size(); ++i){ + std::cout<(); + { + std::cout<<"File: "; + auto& file_val = str_val.template get<"file">(); + for(uint64_t i = 0; i < file_val.size(); ++i){ + std::cout<(); + std::cout<(); + + std::cout<; - std::array foo { "example", "5", @@ -34,7 +32,8 @@ SAW_TEST("Codec Args Decode Basic"){ } data,encode::Args> dat_args{ - &bar[0],5 + 5, + &bar[0] }; data> dat_nat; -- cgit v1.2.3