summaryrefslogtreecommitdiff
path: root/modules/codec
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-01 13:12:08 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-01 13:12:08 +0200
commit8ecfef96af8b4eb80f4620293e8c39af231399ac (patch)
treea7cd27886b6f9e162b9b9fa40d7cdbe5066aecd9 /modules/codec
parent2fb400805f077e19a677072d055eecdf6b45c7a1 (diff)
wip
Diffstat (limited to 'modules/codec')
-rw-r--r--modules/codec/c++/args.hpp8
-rw-r--r--modules/codec/examples/SConscript7
-rw-r--r--modules/codec/examples/arg_parser.cpp67
-rw-r--r--modules/codec/tests/args.cpp5
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;