diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-01 13:12:08 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-01 13:12:08 +0200 |
commit | 8ecfef96af8b4eb80f4620293e8c39af231399ac (patch) | |
tree | a7cd27886b6f9e162b9b9fa40d7cdbe5066aecd9 /modules/codec | |
parent | 2fb400805f077e19a677072d055eecdf6b45c7a1 (diff) |
wip
Diffstat (limited to 'modules/codec')
-rw-r--r-- | modules/codec/c++/args.hpp | 8 | ||||
-rw-r--r-- | modules/codec/examples/SConscript | 7 | ||||
-rw-r--r-- | modules/codec/examples/arg_parser.cpp | 67 | ||||
-rw-r--r-- | modules/codec/tests/args.cpp | 5 |
4 files changed, 78 insertions, 9 deletions
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<T, encode::Args> { template<typename... Str, string_literal... Lits, typename... Tup> class data<schema::Args<schema::Struct<schema::Member<Str,Lits>...>, schema::Tuple<Tup...>>, 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 <iostream> + +namespace sch { +using namespace saw::schema; + +using ExArgStruct = Struct< + Member<String, "file">, + Member<UInt64, "threads"> +>; + +using ExArgs = Args< + ExArgStruct, + Tuple<> +>; +} + +int main(int argc, char** argv){ + using namespace saw; + + data<sch::ExArgs, encode::Args> args_dat{argc, argv}; + codec<sch::ExArgs, encode::Args> args_codec; + + data<sch::ExArgs> nat_dat; + + auto eov = args_codec.decode(args_dat, nat_dat); + if(eov.is_error()){ + auto& err = eov.get_error(); + std::cerr<<"\n[Error] "<<err.get_category(); + auto err_msg = err.get_message(); + if(not err_msg.empty()){ + std::cerr<<" - "<<err_msg; + } + std::cerr<<std::endl; + return err.get_id(); + } + + std::cout<<"Success\n"; + std::cout<<"=======\n"; + std::cout<<"\nProgram: "; + auto& prog = nat_dat.template get<"program">(); + for(uint64_t i = 0; i < prog.size(); ++i){ + std::cout<<prog.at(i); + } + std::cout<<"\n"; + + auto& str_val = nat_dat.template get<"args">(); + { + std::cout<<"File: "; + auto& file_val = str_val.template get<"file">(); + for(uint64_t i = 0; i < file_val.size(); ++i){ + std::cout<<file_val.at(i); + } + std::cout<<"\n"; + } + { + std::cout<<"Threads: "; + auto& threads_val = str_val.template get<"threads">(); + std::cout<<threads_val.get(); + std::cout<<"\n"; + } + auto& tup_val = nat_dat.template get<"positionals">(); + + std::cout<<std::endl; + return 0; +} diff --git a/modules/codec/tests/args.cpp b/modules/codec/tests/args.cpp index f1d497b..7be3c05 100644 --- a/modules/codec/tests/args.cpp +++ b/modules/codec/tests/args.cpp @@ -19,8 +19,6 @@ using ArgsTuple = Tuple< SAW_TEST("Codec Args Decode Basic"){ using namespace saw; - using Schema = sch::Args<sch::ArgsStruct, sch::ArgsTuple>; - std::array<std::string, 5> foo { "example", "5", @@ -34,7 +32,8 @@ SAW_TEST("Codec Args Decode Basic"){ } data<sch::Args<sch::ArgsStruct, sch::ArgsTuple>,encode::Args> dat_args{ - &bar[0],5 + 5, + &bar[0] }; data<sch::Args<sch::ArgsStruct, sch::ArgsTuple>> dat_nat; |