From 021c65316e291c57c9e00f4d7d3f411ffdd90df2 Mon Sep 17 00:00:00 2001 From: Doyle Date: Sat, 23 Feb 2019 15:41:14 +1100 Subject: [PATCH] Add readme --- Code/readme.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Code/readme.md diff --git a/Code/readme.md b/Code/readme.md new file mode 100644 index 0000000..d6904d8 --- /dev/null +++ b/Code/readme.md @@ -0,0 +1,43 @@ +# Dqn +Personal utility library. + +## DqnInspect +A simple C++ introspection metaprogram designed as a prebuild step and generates type information for the inspected types. It is a minimal single header file licensed in the public domain with only CRT dependencies. It is only able to parse C-like C++, i.e. Plain Old Data types only. + +The generated file is written to stdout. + +### Usage +Annotate the C++ code using `DQN_INSPECT`, i.e. + +``` +DQN_INSPECT struct Entity +{ + V2 pos; + V2 size; +} + +DQN_INSPECT enum struct SomeEnum +{ + Hello, + Foo +} +``` + +And then build DqnInspect by defining `DQN_INSPECT_EXECUTABLE_IMPLEMENTATION` before compiling and execute it as follows + +`DqnInspect.exe SourceCode.h > SourceCodeInspected.h` + +Include and use the file in code + +``` +#include "DqnReflect.h" +#include "SourceCode.h" +#include "SourceCodeInspected.h" +SomeEnum enum = SomeEnum::Hello; +printf("%s\n", DqnInspect_EnumString(enum)); // prints Hello + +Entity entity = {}; +DqnInspect_Struct const *inspector = DqnInspect_GetStruct(&entity); +for (int i = 0; i < inspector->members_len; ++i) + printf("%s\n", inspector->members[i].name); +```