aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/ryml/tools/parse_emit.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2025-11-07 14:49:13 +0100
committerGitHub Enterprise <[email protected]>2025-11-07 14:49:13 +0100
commit24e43a913f29ac3b314354e8ce5175f135bcc64f (patch)
treeca442937ceeb63461012b33a4576e9835099f106 /thirdparty/ryml/tools/parse_emit.cpp
parentget oplog attachments (#622) (diff)
downloadzen-24e43a913f29ac3b314354e8ce5175f135bcc64f.tar.xz
zen-24e43a913f29ac3b314354e8ce5175f135bcc64f.zip
switch to xmake for package management (#611)
This change removes our dependency on vcpkg for package management, in favour of bringing some code in-tree in the `thirdparty` folder as well as using the xmake build-in package management feature. For the latter, all the package definitions are maintained in the zen repo itself, in the `repo` folder. It should now also be easier to build the project as it will no longer depend on having the right version of vcpkg installed, which has been a common problem for new people coming in to the codebase. Now you should only need xmake to build. * Bumps xmake requirement on github runners to 2.9.9 to resolve an issue where xmake on Windows invokes cmake with `v144` toolchain which does not exist * BLAKE3 is now in-tree at `thirdparty/blake3` * cpr is now in-tree at `thirdparty/cpr` * cxxopts is now in-tree at `thirdparty/cxxopts` * fmt is now in-tree at `thirdparty/fmt` * robin-map is now in-tree at `thirdparty/robin-map` * ryml is now in-tree at `thirdparty/ryml` * sol2 is now in-tree at `thirdparty/sol2` * spdlog is now in-tree at `thirdparty/spdlog` * utfcpp is now in-tree at `thirdparty/utfcpp` * xmake package repo definitions is in `repo` * implemented support for sanitizers. ASAN is supported on windows, TSAN, UBSAN, MSAN etc are supported on Linux/MacOS though I have not yet tested it extensively on MacOS * the zencore encryption implementation also now supports using mbedTLS which is used on MacOS, though for now we still use openssl on Linux * crashpad * bumps libcurl to 8.11.0 (from 8.8.0) which should address a rare build upload bug
Diffstat (limited to 'thirdparty/ryml/tools/parse_emit.cpp')
-rw-r--r--thirdparty/ryml/tools/parse_emit.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/thirdparty/ryml/tools/parse_emit.cpp b/thirdparty/ryml/tools/parse_emit.cpp
new file mode 100644
index 000000000..6ae807964
--- /dev/null
+++ b/thirdparty/ryml/tools/parse_emit.cpp
@@ -0,0 +1,116 @@
+#ifdef RYML_SINGLE_HEADER
+#include <ryml_all.hpp>
+#else
+#include <c4/yml/std/std.hpp>
+#include <c4/yml/parse.hpp>
+#include <c4/yml/emit.hpp>
+#endif
+#include <c4/fs/fs.hpp>
+
+#include <cstdio>
+#include <chrono>
+
+
+using namespace c4;
+
+
+//-----------------------------------------------------------------------------
+
+struct timed_section
+{
+ using myclock = std::chrono::steady_clock;
+ using msecs = std::chrono::duration<double, std::milli>;
+
+ csubstr name;
+ myclock::time_point start;
+
+ msecs since() const { return myclock::now() - start; }
+ timed_section(csubstr n) : name(n), start(myclock::now()) {}
+ ~timed_section()
+ {
+ fprintf(stderr, "%.6fms: %.*s\n", since().count(), (int)name.len, name.str);
+ fflush(stderr);
+ }
+};
+
+#define TS(name) timed_section name##__##__LINE__(#name)
+
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+
+int main(int argc, const char *argv[])
+{
+ bool print_emitted_to_stdout = true;
+ csubstr file;
+ // LCOV_EXCL_START
+ auto show_usage = [argv]{
+ printf("usage: %s [-s] <path/to/file.yaml>\n", argv[0]);
+ };
+ if(argc == 2)
+ {
+ file = to_csubstr(argv[1]);
+ }
+ else if(argc > 2)
+ {
+ file = to_csubstr(argv[2]);
+ csubstr arg = to_csubstr(argv[1]);
+ if(arg == "-s")
+ {
+ print_emitted_to_stdout = false;
+ }
+ else
+ {
+ show_usage();
+ return 1;
+ }
+ }
+ else
+ {
+ show_usage();
+ return 1;
+ }
+ // LCOV_EXCL_STOP
+
+ TS(TOTAL);
+
+ C4_CHECK_MSG(fs::path_exists(file.str), "cannot find file: %s (cwd=%s)", file.str, fs::cwd<std::string>().c_str());
+
+ {
+ TS(objects);
+ std::string contents, output;
+ yml::Tree tree;
+ {
+ TS(read_file);
+ fs::file_get_contents(file.str, &contents);
+ }
+ {
+ TS(tree_reserve);
+ size_t nlines;
+ {
+ TS(count_lines);
+ nlines = to_csubstr(contents).count('\n');
+ }
+ fprintf(stderr, "reserving #lines=%zu\n", nlines);
+ tree.reserve(nlines);
+ }
+ {
+ TS(parse_yml);
+ yml::parse_in_place(file, to_substr(contents), &tree);
+ }
+ {
+ TS(emit_to_buffer);
+ output.resize(contents.size()); // resize, not just reserve
+ yml::emitrs_yaml(tree, &output);
+ }
+ if(print_emitted_to_stdout)
+ {
+ TS(print_stdout);
+ fwrite(output.data(), 1, output.size(), stdout);
+ putchar('\n');
+ }
+ }
+
+ return 0;
+}