From 59735f3ab7ca3df848c206e5686ab18a943cf5d5 Mon Sep 17 00:00:00 2001 From: falsycat Date: Sun, 22 May 2022 14:35:46 +0900 Subject: [PATCH] add new tool to generate default data of root.nf7 --- CMakeLists.txt | 13 +++++++++++ tool/CMakeLists.txt | 3 +++ tool/init.cc | 56 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 tool/CMakeLists.txt create mode 100644 tool/init.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index dd73d4d..e5ad270 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ project(nf7 CXX) option(NF7_STATIC "link all libs statically" ON) set(NF7_GENERATED_INCLUDE_DIR "${PROJECT_BINARY_DIR}/include/generated") +file(MAKE_DIRECTORY "${NF7_GENERATED_INCLUDE_DIR}") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -20,6 +21,7 @@ set(NF7_CXX_FLAGS ) add_subdirectory(thirdparty EXCLUDE_FROM_ALL) +add_subdirectory(tool) # ---- application ---- @@ -59,3 +61,14 @@ target_link_libraries(nf7 source_location yas ) + +# ---- resource compile ---- +set(NF7_DEFAULT_ROOT_INC "${NF7_GENERATED_INCLUDE_DIR}/root.nf7.inc") +add_custom_command( + OUTPUT ${NF7_DEFAULT_ROOT_INC} + DEPENDS nf7-init + COMMAND $ > ${NF7_DEFAULT_ROOT_INC} + COMMENT "generating root.nf7..." + VERBATIM +) +target_sources(nf7 PRIVATE ${NF7_DEFAULT_ROOT_INC}) diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt new file mode 100644 index 0000000..55b2678 --- /dev/null +++ b/tool/CMakeLists.txt @@ -0,0 +1,3 @@ +add_executable(nf7-init) +target_link_libraries(nf7-init PRIVATE yas) +target_sources(nf7-init PRIVATE init.cc) diff --git a/tool/init.cc b/tool/init.cc new file mode 100644 index 0000000..a3937ef --- /dev/null +++ b/tool/init.cc @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +using namespace std::literals; + + +using Ar = yas::binary_oarchive; +using L = std::function; + +namespace yas::detail { +template +struct serializer< + type_prop::not_a_fundamental, + ser_case::use_internal_serializer, + F, + L> { + public: + static Ar& save(Ar& ar, const L& f) { + f(); + return ar; + } +}; +} + +template +L Write(Ar& ar, Args&&... args) { + return [...args = std::forward(args), &ar]() mutable { + ar(std::forward(args)...); + }; +} +int main(void) { + yas::mem_ostream os; + Ar ar(os); + + ar("Dir"s); + ar(std::map { + { "home"s, Write(ar, "Dir"s, std::map {}, false) }, + }, false); + + const auto buf = os.get_shared_buffer(); + for (size_t i = 0; i < buf.size;) { + for (size_t j = 0; j < 32 && i < buf.size; ++j, ++i) { + std::cout << static_cast(buf.data.get()[i]) << ','; + } + } + std::cout << std::endl; +}