From 136d7df643cf9d9598f81b88c81f2786c0364406 Mon Sep 17 00:00:00 2001 From: silverweed Date: Wed, 10 Jul 2024 17:04:11 +0200 Subject: [PATCH] first commit --- .gitignore | 4 ++++ Makefile | 7 +++++++ defer.hpp | 20 ++++++++++++++++++++ rntviewer.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 defer.hpp create mode 100644 rntviewer.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8bac51d --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*~ +*.swo +*.swp +rntviewer diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8f609c2 --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +CXX = clang++ + +d: + $(CXX) -g -O0 -o rntviewer rntviewer.cpp $(shell root-config --cflags --libs) -lROOTNTuple + +r: + $(CXX) -O2 -o rntviewer rntviewer.cpp $(shell root-config --cflags --libs) -lROOTNTuple diff --git a/defer.hpp b/defer.hpp new file mode 100644 index 0000000..35bdb0e --- /dev/null +++ b/defer.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include +#include + +struct Defer_Guard { + template + Defer_Guard(F && f) : _f(f) {} + ~Defer_Guard() { _f(); } + std::function _f; +}; +struct Defer_Guard_Helper { + template + Defer_Guard operator+(F&& f) { return Defer_Guard(std::forward(f)); } +}; + +#define CONCAT_STR_INTERNAL(A, B) A##B +#define CONCAT_STR(A, B) CONCAT_STR_INTERNAL(A, B) + +#define defer const auto CONCAT_STR(defer_, __LINE__) = Defer_Guard_Helper{} + [&] diff --git a/rntviewer.cpp b/rntviewer.cpp new file mode 100644 index 0000000..b3b7ab2 --- /dev/null +++ b/rntviewer.cpp @@ -0,0 +1,44 @@ +#include "defer.hpp" + +#include + +#include + +#include + +using namespace ROOT::Experimental; + +static size_t file_size(FILE *f) +{ + fseek(f, 0, SEEK_END); + size_t res = ftell(f); + fseek(f, 0, SEEK_SET); + return res; +} + +int main(int argc, char **argv) +{ + if (argc < 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + + // Open and map the file + const char *fname = argv[0]; + + FILE *file = fopen(fname, "rb"); + defer { fclose(file); }; + + const int fd = fileno(file); + const size_t fsize = file_size(file); + void *fmem = mmap(0, fsize, PROT_READ, MAP_SHARED_VALIDATE, fd, 0); + if (!fmem) { + fprintf(stderr, "Failed to open file %s\n", fname); + return 1; + } + defer { munmap(fmem, fsize); }; + + // Get the RNTuple information + + return 0; +}