LCOV - code coverage report
Current view: top level - build directory/src/include/gen - templates.hpp (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 2 2 100.0 %
Date: 2019-09-12 12:28:41 Functions: 0 0 -

          Line data    Source code
       1             : #include <unordered_map>
       2             : #include <string>
       3             : static const char * const _kdbgentemplate_highlevel_c = "// clang-format off\n{{!\nThis template file is licensed under BSD Zero Clause License (0BSD).\nFor the full text see ./highlevel/LICENSE.txt\n}}\n{{=/*% %*/=}}\n// clang-format on\n/**\n * @file\n *\n * This file was automatically generated using `kdb gen highlevel`.\n * Any changes will be overwritten, when the file is regenerated.\n *\n * @copyright BSD Zero Clause License\n *\n *     Copyright (C) 2019 Elektra Initiative (https://libelektra.org)\n *\n *     Permission to use, copy, modify, and/or distribute this software for any\n *     purpose with or without fee is hereby granted.\n *\n *     THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n *     REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n *     FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n *     INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n *     LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n *     OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n *     PERFORMANCE OF THIS SOFTWARE.\n */\n\n#include \"/*% header_file %*/\"\n\n/*%# more_headers %*/\n#include \"/*% . %*/\"\n/*%/ more_headers %*/\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n\n#include <kdbhelper.h>\n#include <kdbinvoke.h>\n#include <kdbopts.h>\n\n#include <elektra/conversion.h>\n\n/*%# embed_spec\? %*/\nstatic KeySet * embeddedSpec (void)\n{\n      return /*%& spec %*/;\n}\n/*%/ embed_spec\? %*/\n\n/*%={{ }}=%*/\n/**\n * Initializes an instance of Elektra for the application \'{{{ parent_key }}}\'.\n *\n * This can be invoked as many times as you want, however it is not a cheap operation,\n * so you should try to reuse the Elektra handle as much as possible.\n *\n * @param elektra A reference to where the Elektra instance shall be stored.\n *                Has to be disposed of with elektraClose().\n * @param error   A reference to an ElektraError pointer. Will be passed to elektraOpen().\n *\n * @retval 0  on success, @p elektra will contain a new Elektra instance coming from elektraOpen(),\n *            @p error will be unchanged\n * @retval -1 on error, @p elektra will be unchanged, @p error will be set\n * @retval 1  help mode, \'-h\' or \'--help\' was specified call {{{ help_function_name }}} to display\n *            the help message. @p elektra will contain a new Elektra instance. It has to be passed\n *            to {{{ help_function_name }}}. You also need to elektraClose() it.\n *            @p error will be unchanged\n *\n * @see elektraOpen\n */// {{=/*% %*/=}}\nint /*%& init_function_name %*/ (Elektra ** elektra, ElektraError ** error)\n{\n /*%# spec_as_defaults\? %*/\n   KeySet * defaults = embeddedSpec ();\n  /*%/ spec_as_defaults\? %*/\n   /*%^ spec_as_defaults\? %*/\n   /*%# embed_defaults\? %*/\n     KeySet * defaults = /*%& defaults %*/;\n    /*%/ embed_defaults\? %*/\n     /*%^ embed_defaults\? %*/\n     KeySet * defaults = NULL;\n     /*%/ embed_defaults\? %*/\n     /*%/ spec_as_defaults\? %*/\n\n KeySet * contract = /*%& contract %*/;\n\n  Elektra * e = elektraOpen (\"/*% parent_key %*/\", defaults, contract, error);\n\n    if (defaults != NULL)\n {\n             ksDel (defaults);\n     }\n\n   if (e == NULL)\n        {\n             return -1;\n    }\n\n   *elektra = e;\n return elektraHelpKey (e) != NULL \? 1 : 0;\n}\n\n/**\n * Checks whether specload mode was invoked and if so, sends the specification over stdout\n * in the format expected by specload.\n *\n * You MUST not output anything to stdout before invoking this function. Ideally invoking this\n * is the first thing you do in your main()-function.\n *\n * This function will ONLY RETURN, if specload mode was NOT invoked. Otherwise it will call `exit()`.\n *\n * @param argc pass the value of argc from main\n * @param argv pass the value of argv from main\n */\nvoid /*%& specload_function_name %*/ (int argc, const char ** argv)\n{\n        /*%# embed_spec\? %*/\n if (argc != 2 || strcmp (argv[1], \"/*% specload_arg %*/\") != 0)\n   {\n             return;\n       }\n\n   KeySet * spec = embeddedSpec ();\n\n    Key * parentKey = keyNew (\"/*% spec_parent_key %*/\", KEY_META, \"system/elektra/quickdump/noparent\", \"\", KEY_END);\n\n       KeySet * specloadConf = ksNew (1, keyNew (\"system/sendspec\", KEY_END), KS_END);\n   ElektraInvokeHandle * specload = elektraInvokeOpen (\"specload\", specloadConf, parentKey);\n\n       int result = elektraInvoke2Args (specload, \"sendspec\", spec, parentKey);\n\n        elektraInvokeClose (specload, parentKey);\n     keyDel (parentKey);\n   ksDel (specloadConf);\n ksDel (spec);\n\n       exit (result == ELEKTRA_PLUGIN_STATUS_SUCCESS \? EXIT_SUCCESS : EXIT_FAILURE);\n        /*%/ embed_spec\? %*/\n}\n\n/*%={{ }}=%*/\n/**\n * Outputs the help message to stdout\n *\n * @param elektra  The Elektra instance produced by {{{ init_function_name }}}.\n * @param usage        If this is not NULL, it will be used instead of the default usage line.\n * @param prefix   If this is not NULL, it will be inserted between the usage line and the options list.\n */// {{=/*% %*/=}}\nvoid /*%& help_function_name %*/ (Elektra * elektra, const char * usage, const char * prefix)\n{\n       Key * helpKey = elektraHelpKey (elektra);\n     if (helpKey == NULL)\n  {\n             return;\n       }\n\n   char * help = elektraGetOptsHelpMessage (helpKey, usage, prefix);\n     printf (\"%s\", help);\n      elektraFree (help);\n}\n\n/*%> partial.enum.c %*/\n\n/*%> partial.union.c %*/\n\n/*%> partial.struct.c %*/\n";
       4             : static const char * const _kdbgentemplate_highlevel_h = "// clang-format off\n{{!\nThis template file is licensed under BSD Zero Clause License (0BSD).\nFor the full text see ./highlevel/LICENSE.txt\n}}\n{{=/*% %*/=}}\n// clang-format on\n/**\n * @file\n *\n * This file was automatically generated using `kdb gen highlevel`.\n * Any changes will be overwritten, when the file is regenerated.\n *\n * @copyright BSD Zero Clause License\n *\n *     Copyright (C) 2019 Elektra Initiative (https://libelektra.org)\n *\n *     Permission to use, copy, modify, and/or distribute this software for any\n *     purpose with or without fee is hereby granted.\n *\n *     THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n *     REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n *     FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n *     INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n *     LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n *     OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n *     PERFORMANCE OF THIS SOFTWARE.\n */\n\n\n#ifndef /*%& include_guard %*/\n#define /*%& include_guard %*/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <elektra.h>\n\n#include <kdbhelper.h>\n#include <string.h>\n\n/*%# more_headers %*/\n#include \"/*% . %*/\"\n/*%/ more_headers %*/\n\n/*%> partial.enum.decl.h %*/\n\n/*%> partial.union.decl.h %*/\n\n/*%> partial.struct.decl.h %*/\n\n/*%> partial.keys.tags.h %*/\n\n/*%> partial.keys.fun.h %*/\n\nint /*%& init_function_name %*/ (Elektra ** elektra, ElektraError ** error);\nvoid /*%& help_function_name %*/ (Elektra * elektra, const char * usage, const char * prefix);\nvoid /*%& specload_function_name %*/ (int argc, const char ** argv);\n\n/*%={{ }}=%*/\n/**\n * @param elektra The elektra instance initialized with {{{ init_function_name }}}().\n * @param tag     The tag to look up.\n *\n * @return The value stored at the given key.\n *   The lifetime of returned pointers is documented in the ELEKTRA_GET(*) functions above.\n */// {{=/*% %*/=}}\n#define elektraGet(elektra, tag) ELEKTRA_GET (tag) (elektra)\n\n/*%={{ }}=%*/\n/**\n * @param elektra The elektra instance initialized with {{{ init_function_name }}}().\n * @param tag     The tag to look up.\n * @param ...     Variable arguments depending on the given tag.\n *\n * @return The value stored at the given key.\n *   The lifetime of returned pointers is documented in the ELEKTRA_GET(*) functions above.\n */// {{=/*% %*/=}}\n#define elektraGetV(elektra, tag, ...) ELEKTRA_GET (tag) (elektra, __VA_ARGS__)\n\n/*%={{ }}=%*/\n/**\n * @param elektra The elektra instance initialized with {{{ init_function_name }}}().\n * @param result  Points to the struct into which results will be stored.\n *   The lifetime of pointers in this struct is documented in the ELEKTRA_GET(*) functions above.\n * @param tag     The tag to look up.\n */// {{=/*% %*/=}}\n#define elektraFillStruct(elektra, result, tag) ELEKTRA_GET (tag) (elektra, result)\n\n/*%={{ }}=%*/\n/**\n * @param elektra The elektra instance initialized with {{{ init_function_name }}}().\n * @param result  Points to the struct into which results will be stored.\n *   The lifetime of pointers in this struct is documented in the ELEKTRA_GET(*) functions above.\n * @param tag     The tag to look up.\n * @param ...     Variable arguments depending on the given tag.\n */// {{=/*% %*/=}}\n#define elektraFillStructV(elektra, result, tag, ...) ELEKTRA_GET (tag) (elektra, result, __VA_ARGS__)\n\n/*%# generate_setters\? %*/\n/*%={{ }}=%*/\n/**\n * @param elektra The elektra instance initialized with the {{{ init_function_name }}}().\n * @param tag     The tag to write to.\n * @param value   The new value.\n * @param error   Pass a reference to an ElektraError pointer.\n */// {{=/*% %*/=}}\n#define elektraSet(elektra, tag, value, error) ELEKTRA_SET (tag) (elektra, value, error)\n\n/*%={{ }}=%*/\n/**\n * @param elektra The elektra instance initialized with the {{{ init_function_name }}}().\n * @param tag     The tag to write to.\n * @param value   The new value.\n * @param error   Pass a reference to an ElektraError pointer.\n * @param ...     Variable arguments depending on the given tag.\n */// {{=/*% %*/=}}\n#define elektraSetV(elektra, tag, value, error, ...) ELEKTRA_SET (tag) (elektra, value, __VA_ARGS__, error)\n/*%/ generate_setters\? %*/\n\n/*%={{ }}=%*/\n/**\n * @param elektra The elektra instance initialized with {{{ init_function_name }}}().\n * @param tag     The array tag to look up.\n *\n * @return The size of the array below the given key.\n */// {{=/*% %*/=}}\n#define elektraSize(elektra, tag) ELEKTRA_SIZE (tag) (elektra)\n\n/*%={{ }}=%*/\n/**\n * @param elektra The elektra instance initialized with {{{ init_function_name }}}().\n * @param tag     The array tag to look up.\n * @param ...     Variable arguments depending on the given tag.\n *\n * @return The size of the array below the given key.\n */// {{=/*% %*/=}}\n#define elektraSizeV(elektra, tag, ...) ELEKTRA_SIZE (tag) (elektra, __VA_ARGS__)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // /*%& include_guard %*/\n";
       5             : static const char * const _kdbgentemplate_highlevel_mount_sh = "#!/bin/sh\n\n{{# direct_file\? }}\nif [ -z \"$SPEC_FILE\" ]; then\n      # TODO: set SPEC_FILE to the installed path of your spec.eqd file\n     SPEC_FILE=\'/usr/local/share/{{{ org_and_app }}}.spec.eqd\'\nfi\n\nif ! [ -f \"$SPEC_FILE\" ]; then\n echo \"ERROR: SPEC_FILE points to non-existent file\" 1>&2\n   exit 1\nfi\n{{/ direct_file\? }}{{^ direct_file\? }}\nif [ -z \"$APP_PATH\" ]; then\n # TODO: set APP_PATH to the installed path of your application\n        APP_PATH=\'/usr/local/bin/{{{ app }}}\'\nfi\n\nif ! [ -f \"$APP_PATH\" ]; then\n      echo \"ERROR: APP_PATH points to non-existent file\" 1>&2\n    exit 1\nfi\n{{/ direct_file\? }}\n\nerror_other_mp() {\n        echo \"ERROR: another mountpoint already exists on {{{ spec_parent_key }}}. Please umount first.\" 1>&2\n      exit 1\n}\n\nif kdb mount -13 | grep -Fxq \'{{{ spec_parent_key }}}\'; then\n   if ! kdb mount | grep -Fxq \'{{{ mount_file }}} on {{{ spec_parent_key }}} with name {{{ spec_parent_key }}}\'; then\n          error_other_mp\n        fi\n\n  MP=$(echo \"{{{ spec_parent_key }}}\" | sed \'s:\\\\:\\\\\\\\:g\' | sed \'s:/:\\\\/:g\')\n    {{# direct_file\? }}\n  if [ \"$(kdb get \"system/elektra/mountpoints/$MP/getplugins/#5#specload#specload#/config/file\")\" != \"$SPEC_FILE\" ]; then\n           error_other_mp\n        fi\n    {{/ direct_file\? }}{{^ direct_file\? }}\n      if [ -n \"$(kdb get \"system/elektra/mountpoints/$MP/getplugins/#5#specload#specload#/config/file\")\" ]; then\n            error_other_mp\n        fi\n    if [ \"$(kdb get \"system/elektra/mountpoints/$MP/getplugins/#5#specload#specload#/config/app\")\" != \"$APP_PATH\" ]; then\n             error_other_mp\n        fi\n    if [ -n \"$(kdb ls \"system/elektra/mountpoints/$MP/getplugins/#5#specload#specload#/config/app/args\")\" ]; then\n         error_other_mp\n        fi\n    {{/ direct_file\? }}\nelse\n    {{# direct_file\? }}\n  sudo kdb mount -R noresolver \"{{{ mount_file }}}\" \"{{{ spec_parent_key }}}\" specload \"file=$SPEC_FILE\"\n    {{/ direct_file\? }}{{^ direct_file\? }}\n      sudo kdb mount -R noresolver \"{{{ mount_file }}}\" \"{{{ spec_parent_key }}}\" specload \"app=$APP_PATH\"\n      {{/ direct_file\? }}\nfi\n\nif kdb mount -13 | grep -Fxq \'{{{ parent_key }}}\'; then\n if ! kdb mount | grep -Fxq \'{{{ spec_mount_file }}} on {{{ parent_key }}} with name {{{ parent_key }}}\'; then\n               echo \"ERROR: another mountpoint already exists on {{{ parent_key }}}. Please umount first.\" 1>&2\n           exit 1\n        fi\nelse\n      sudo kdb spec-mount \'{{{ parent_key }}}\'\nfi\n";
       6             : static const char * const _kdbgentemplate_highlevel_enum_c = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n// -------------------------\n// Enum conversion functions\n// -------------------------\n\n/*%# enums %*/\nELEKTRA_KEY_TO_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/)\n{\n       const char * string;\n  if (!elektraKeyToString (key, &string) || strlen (string) == 0)\n   {\n             return 0;\n     }\n\n   /*%# switch_from_string\? %*/\n /*%& from_string_code %*/\n /*%/ switch_from_string\? %*/\n /*%^ switch_from_string\? %*/\n /*%# values %*/\n       if (strcmp (string, \"/*% string_value %*/\") == 0)\n {\n             *variable = /*%& name %*/;\n                return 1;\n     }\n     /*%/ values %*/\n       /*%/ switch_from_string\? %*/\n\n       return 0;\n}\n\nELEKTRA_TO_STRING_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/)\n{\n     switch (value)\n        {\n     /*%# values %*/\n       case /*%& name %*/:\n               return elektraStrDup (\"/*% string_value %*/\");\n            /*%/ values %*/\n       }\n\n   // should be unreachable\n      return elektraStrDup (\"\");\n}\n\nELEKTRA_TO_CONST_STRING_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/)\n{\n  switch (value)\n        {\n     /*%# values %*/\n       case /*%& name %*/:\n               return \"/*% string_value %*/\";\n            /*%/ values %*/\n       }\n\n   // should be unreachable\n      return \"\";\n}\n/*%/ enums %*/\n\n// -------------------------\n// Enum accessor functions\n// -------------------------\n\n/*%# enums %*/\nELEKTRA_GET_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/)\n{\n    /*%& native_type %*/ result;\n      const Key * key = elektraFindKey (elektra, keyname, KDB_TYPE_ENUM);\n   if (!ELEKTRA_KEY_TO (/*%& type_name %*/) (key, &result))\n      {\n             elektraFatalError (elektra, elektraErrorConversionFromString (KDB_TYPE_ENUM, keyname, keyString (key)));\n              return (/*%& native_type %*/) 0;\n  }\n     return result;\n}\n\nELEKTRA_GET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/)\n{\n        /*%& native_type %*/ result;\n      const Key * key = elektraFindArrayElementKey (elektra, keyname, index, KDB_TYPE_ENUM);\n        if (!ELEKTRA_KEY_TO (/*%& type_name %*/) (key, &result))\n      {\n             elektraFatalError (elektra, elektraErrorConversionFromString (KDB_TYPE_ENUM, keyname, keyString (key)));\n              return (/*%& native_type %*/) 0;\n  }\n     return result;\n}\n\n/*%# generate_setters\? %*/\nELEKTRA_SET_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/)\n{\n char * string = ELEKTRA_TO_STRING (/*%& type_name %*/) (value);\n   if (string == 0)\n      {\n             *error = elektraErrorConversionToString (KDB_TYPE_ENUM, keyname);\n             return;\n       }\n     elektraSetRawString (elektra, keyname, string, KDB_TYPE_ENUM, error);\n elektraFree (string);\n}\n\nELEKTRA_SET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/)\n{\n char * string = ELEKTRA_TO_STRING (/*%& type_name %*/) (value);\n   if (string == 0)\n      {\n             *error = elektraErrorConversionToString (KDB_TYPE_ENUM, keyname);\n             return;\n       }\n     elektraSetRawStringArrayElement (elektra, keyname, index, string, KDB_TYPE_ENUM, error);\n      elektraFree (string);\n}\n/*%/ generate_setters\? %*/\n/*%/ enums %*/\n";
       7             : static const char * const _kdbgentemplate_highlevel_enum_decl_h = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n/*%# enums %*/\n/*%# generate_typedef\? %*/\ntypedef enum\n{\n        /*%# values %*/\n       /*%& name %*/ = /*%& value %*/,\n       /*%/ values %*/\n} /*%& native_type %*/;\n\n/*%/ generate_typedef\? %*/\n/*%/ enums %*/\n\n#define ELEKTRA_TO_CONST_STRING(typeName) ELEKTRA_CONCAT (ELEKTRA_CONCAT (elektra, typeName), ToConstString)\n#define ELEKTRA_TO_CONST_STRING_SIGNATURE(cType, typeName) const char * ELEKTRA_TO_CONST_STRING (typeName) (cType value)\n\n/*%# enums %*/\nELEKTRA_KEY_TO_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/);\nELEKTRA_TO_STRING_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/);\nELEKTRA_TO_CONST_STRING_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/);\n\nELEKTRA_GET_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/);\nELEKTRA_GET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/);\n/*%# generate_setters\? %*/\nELEKTRA_SET_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/);\nELEKTRA_SET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/);\n/*%/ generate_setters\? %*/\n\n/*%/ enums %*/\n";
       8             : static const char * const _kdbgentemplate_highlevel_keys_fun_h = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n// local helper macros to determine the length of a 64 bit integer\n#define elektra_len19(x) ((x) < 10000000000000000000ULL \? 19 : 20)\n#define elektra_len18(x) ((x) < 1000000000000000000ULL \? 18 : elektra_len19 (x))\n#define elektra_len17(x) ((x) < 100000000000000000ULL \? 17 : elektra_len18 (x))\n#define elektra_len16(x) ((x) < 10000000000000000ULL \? 16 : elektra_len17 (x))\n#define elektra_len15(x) ((x) < 1000000000000000ULL \? 15 : elektra_len16 (x))\n#define elektra_len14(x) ((x) < 100000000000000ULL \? 14 : elektra_len15 (x))\n#define elektra_len13(x) ((x) < 10000000000000ULL \? 13 : elektra_len14 (x))\n#define elektra_len12(x) ((x) < 1000000000000ULL \? 12 : elektra_len13 (x))\n#define elektra_len11(x) ((x) < 100000000000ULL \? 11 : elektra_len12 (x))\n#define elektra_len10(x) ((x) < 10000000000ULL \? 10 : elektra_len11 (x))\n#define elektra_len09(x) ((x) < 1000000000ULL \? 9 : elektra_len10 (x))\n#define elektra_len08(x) ((x) < 100000000ULL \? 8 : elektra_len09 (x))\n#define elektra_len07(x) ((x) < 10000000ULL \? 7 : elektra_len08 (x))\n#define elektra_len06(x) ((x) < 1000000ULL \? 6 : elektra_len07 (x))\n#define elektra_len05(x) ((x) < 100000ULL \? 5 : elektra_len06 (x))\n#define elektra_len04(x) ((x) < 10000ULL \? 4 : elektra_len05 (x))\n#define elektra_len03(x) ((x) < 1000ULL \? 3 : elektra_len04 (x))\n#define elektra_len02(x) ((x) < 100ULL \? 2 : elektra_len03 (x))\n#define elektra_len01(x) ((x) < 10ULL \? 1 : elektra_len02 (x))\n#define elektra_len00(x) ((x) < 0ULL \? 0 : elektra_len01 (x))\n#define elektra_len(x) elektra_len00 (x)\n\n#define ELEKTRA_SIZE(tagName) ELEKTRA_CONCAT (elektraSize, tagName)\n\n/*%# keys %*/\n/*%# is_struct\? %*/\n/*%> partial.keys.fun.struct.h %*/\n/*%/ is_struct\? %*/\n/*%^ is_struct\? %*/\n/*%# is_struct_ref\? %*/\n/*%> partial.keys.fun.structref.h %*/\n/*%/ is_struct_ref\? %*/\n/*%^ is_struct_ref\? %*/\n/*%={{ }}=%*/\n/**\n * Get the value of key \'{{{ name }}}\' (tag #{{{ macro_name }}}).\n *\n * @param elektra Instance of Elektra. Create with {{{ init_function_name }}}().\n{{# args\? }}{{# args }} * @param {{{ name }}} {{{ description }}}\n{{/ args }}{{/ args\? }}\n *\n * @return the value of \'{{{ name }}}\'.\n{{# is_string\? }} *   The returned pointer may become invalid, if the internal state of @p elektra\n *   is modified. All calls to elektraSet* modify this state.\n{{/ is_string\? }}\n */// {{=/*% %*/=}}\nstatic inline /*%& native_type %*/ ELEKTRA_GET (/*%& macro_name %*/) (Elektra * elektra /*%# args\? %*/,\n                                                                      /*%# args %*/ /*%& native_type %*/ /*%& name %*/ /*%^ last\? %*/,\n                                                                     /*%/ last\? %*/ /*%/ args %*/ /*%/ args\? %*/)\n{\n       /*%# args\? %*/\n       char * name = elektraFormat (\"/*% fmt_string %*/\", /*%# args %*/ /*%& code %*/ /*%^ last\? %*/,\n                                    /*%/ last\? %*/ /*%/ args %*/);\n  /*%& native_type %*/ result = ELEKTRA_GET (/*%& type_name %*/) (elektra, name);\n       elektraFree (name);\n   return result;\n        /*%/ args\? %*/\n       /*%^ args\? %*/\n       return ELEKTRA_GET (/*%& type_name %*/) (elektra, \"/*% name %*/\");\n    /*%/ args\? %*/\n}\n\n/*%# generate_setters\? %*/\n/*%={{ }}=%*/\n/**\n * Set the value of key \'{{{ name }}}\' (tag #{{{ macro_name }}}).\n *\n * @param elektra Instance of Elektra. Create with {{{ init_function_name }}}().\n * @param value   The value of \'{{{ name }}}\'.\n{{# args\? }}{{# args }} * @param {{{ name }}} {{{ description }}}\n{{/ args }}{{/ args\? }}\n * @param error   Pass a reference to an ElektraError pointer.\n *                Will only be set in case of an error.\n */// {{=/*% %*/=}}\nstatic inline void ELEKTRA_SET (/*%& macro_name %*/) (Elektra * elektra,\n                                                /*%& native_type %*/ value, /*%# args\? %*/ /*%# args %*/\n                                                 /*%& native_type %*/ /*%& name %*/,\n                                                   /*%/ args %*/ /*%/ args\? %*/ ElektraError ** error)\n{\n /*%# args\? %*/\n       char * name = elektraFormat (\"/*% fmt_string %*/\", /*%# args %*/ /*%& code %*/ /*%^ last\? %*/,\n                                    /*%/ last\? %*/ /*%/ args %*/);\n  ELEKTRA_SET (/*%& type_name %*/) (elektra, name, value, error);\n   elektraFree (name);\n   /*%/ args\? %*/\n       /*%^ args\? %*/\n       ELEKTRA_SET (/*%& type_name %*/) (elektra, \"/*% name %*/\", value, error);\n     /*%/ args\? %*/\n}\n/*%/ generate_setters\? %*/\n/*%/ is_struct_ref\? %*/\n/*%/ is_struct\? %*/\n/*%# is_array\? %*/\n/*%={{ }}=%*/\n/**\n * Get the size of the array \'{{{ name }}}\' (tag #{{{ macro_name }}}).\n *\n * @param elektra Instance of Elektra. Create with {{{ init_function_name }}}().\n{{# array_args\? }}{{# args }} * @param {{{ name }}} {{{ description }}}\n{{/ args }}{{/ array_args\? }}\n */// {{=/*% %*/=}}\nstatic inline kdb_long_long_t ELEKTRA_SIZE (/*%& macro_name %*/) (Elektra * elektra /*%# array_args\? %*/,\n                                                                 /*%# args %*/ /*%& native_type %*/ /*%& name %*/ /*%^ last\? %*/,\n                                                             /*%/ last\? %*/ /*%/ args %*/ /*%/ array_args\? %*/)\n{\n     /*%# array_args\? %*/\n char * name = elektraFormat (\"/*% fmt_string %*/\", /*%# args %*/ /*%& code %*/ /*%^ last\? %*/,\n                                    /*%/ last\? %*/ /*%/ args %*/);\n  kdb_long_long_t size = elektraArraySize (elektra, name);\n      elektraFree (name);\n   return size;\n  /*%/ array_args\? %*/\n /*%^ array_args\? %*/\n return elektraArraySize (elektra, \"/*% array_name %*/\");\n  /*%/ array_args\? %*/\n}\n/*%/ is_array\? %*/\n/*%/ keys %*/\n\n#undef elektra_len19\n#undef elektra_len18\n#undef elektra_len17\n#undef elektra_len16\n#undef elektra_len15\n#undef elektra_len14\n#undef elektra_len13\n#undef elektra_len12\n#undef elektra_len11\n#undef elektra_len10\n#undef elektra_len09\n#undef elektra_len08\n#undef elektra_len07\n#undef elektra_len06\n#undef elektra_len05\n#undef elektra_len04\n#undef elektra_len03\n#undef elektra_len02\n#undef elektra_len01\n#undef elektra_len00\n#undef elektra_len\n";
       9             : static const char * const _kdbgentemplate_highlevel_keys_fun_struct_h = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n/*%# alloc\? %*/\n/*%={{ }}=%*/\n/**\n * Get the value of key \'{{{ name }}}\' (tag #{{{ macro_name }}}).\n *\n * @param elektra Instance of Elektra. Create with {{{ init_function_name }}}().\n{{# args\? }}{{# args }} * @param {{{ name }}} {{{ description }}}\n{{/ args }}{{/ args\? }}\n *\n * @return the value of \'{{{ name }}}\', free with ELEKTRA_STRUCT_FREE ({{{ type_name }}}).\n *   Pointers contained in the struct may become invalid, if the internal state of @p elektra\n *   is modified. All calls to elektraSet* modify this state.\n */// {{=/*% %*/=}}\nstatic inline /*%& native_type %*/ * ELEKTRA_GET (/*%& macro_name %*/) (Elektra * elektra /*%# args\? %*/,\n                                                                        /*%# args %*/ /*%& native_type %*/ /*%& name %*/ /*%^ last\? %*/,\n                                                                     /*%/ last\? %*/ /*%/ args %*/ /*%/ args\? %*/)\n{\n     /*%# args\? %*/\n       char * name = elektraFormat (\"/*% fmt_string %*/\", /*%# args %*/ /*%& code %*/ /*%^ last\? %*/,\n                                    /*%/ last\? %*/ /*%/ args %*/);\n  /*%& native_type %*/ *result = ELEKTRA_GET (/*%& type_name %*/) (elektra, name);\n      elektraFree (name);\n   return result;\n        /*%/ args\? %*/\n       /*%^ args\? %*/\n       return ELEKTRA_GET (/*%& type_name %*/) (elektra, \"/*% name %*/\");\n    /*%/ args\? %*/\n}\n/*%/ alloc\? %*/\n/*%^ alloc\? %*/\n/*%={{ }}=%*/\n/**\n * Get the value of key \'{{{ name }}}\' (tag #{{{ macro_name }}}).\n *\n * @param elektra Instance of Elektra. Create with {{{ init_function_name }}}().\n * @param result  The value will be stored in the referenced variable.\n *   Pointers contained in the struct may become invalid, if the internal state of @p elektra\n *   is modified. All calls to elektraSet* modify this state.\n{{# args\? }}{{# args }} * @param {{{ name }}} {{{ description }}}\n{{/ args }}{{/ args\? }}\n */// {{=/*% %*/=}}\nstatic inline void ELEKTRA_GET (/*%& macro_name %*/) (Elektra * elektra, /*%& native_type %*/ *result /*%# args\? %*/,\n                                                      /*%# args %*/ /*%& native_type %*/ /*%& name %*/ /*%^ last\? %*/, /*%/ last\? %*/\n                                                     /*%/ args %*/ /*%/ args\? %*/)\n{\n       /*%# args\? %*/\n       char * name = elektraFormat (\"/*% fmt_string %*/\", /*%# args %*/ /*%& code %*/ /*%^ last\? %*/,\n                                    /*%/ last\? %*/ /*%/ args %*/);\n  ELEKTRA_GET (/*%& type_name %*/) (elektra, name, result);\n elektraFree (name);\n   /*%/ args\? %*/\n       /*%^ args\? %*/\n       ELEKTRA_GET (/*%& type_name %*/) (elektra, \"/*% name %*/\", result);\n   /*%/ args\? %*/\n}\n/*%/ alloc\? %*/\n\n/*%# generate_setters\? %*/\n/*%={{ }}=%*/\n/**\n * Set the value of key \'{{{ name }}}\' (tag #{{{ macro_name }}}).\n *\n * @param elektra Instance of Elektra. Create with {{{ init_function_name }}}().\n * @param value   The value of \'{{{ name }}}\'.\n{{# args\? }}{{# args }} * @param {{{ name }}} {{{ description }}}\n{{/ args }}{{/ args\? }}\n * @param error   Pass a reference to an ElektraError pointer.\n *                Will only be set in case of an error.\n */// {{=/*% %*/=}}\nstatic inline void ELEKTRA_SET (/*%& macro_name %*/) (Elektra * elektra, const /*%& native_type %*/ * value, /*%# args\? %*/ /*%# args %*/\n                                                /*%& native_type %*/ /*%& name %*/,\n                                                   /*%/ args %*/ /*%/ args\? %*/ ElektraError ** error)\n{\n /*%# args\? %*/\n       char * name = elektraFormat (\"/*% fmt_string %*/\", /*%# args %*/ /*%& code %*/ /*%^ last\? %*/,\n                                    /*%/ last\? %*/ /*%/ args %*/);\n  ELEKTRA_SET (/*%& type_name %*/) (elektra, name, value, error);\n   elektraFree (name);\n   /*%/ args\? %*/\n       /*%^ args\? %*/\n       ELEKTRA_SET (/*%& type_name %*/) (elektra, \"/*% name %*/\", value, error);\n     /*%/ args\? %*/\n}\n/*%/ generate_setters\? %*/\n";
      10             : static const char * const _kdbgentemplate_highlevel_keys_fun_structref_h = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n/*%# alloc\? %*/\n/*%={{ }}=%*/\n/**\n * Get the value of key \'{{{ name }}}\' (tag #{{{ macro_name }}}).\n *\n * @param elektra Instance of Elektra. Create with {{{ init_function_name }}}().\nsucceed_if_same_string ($1)\n *\n * @return the value of \'{{{ name }}}\', free with ELEKTRA_STRUCT_FREE ({{{ type_name }}}).\n *   Pointers contained in the struct may become invalid, if the internal state of @p elektra\n *   is modified. All calls to elektraSet* modify this state.\n */// {{=/*% %*/=}}\nstatic inline /*%& native_type %*/ * ELEKTRA_GET (/*%& macro_name %*/) (Elektra * elektra /*%# args\? %*/,\n                                                                      /*%# args %*/\n                                                                 /*%& native_type %*/ /*%& name %*/ /*%^ last\? %*/, /*%/ last\? %*/\n                                                                   /*%/ args %*/ /*%/ args\? %*/)\n{\n     /*%# args\? %*/\n       char * name = elektraFormat (\"/*% fmt_string %*/\", /*%# args %*/ /*%& code %*/ /*%^ last\? %*/,\n                                    /*%/ last\? %*/ /*%/ args %*/);\n  const char * actualName = elektraFindReference (elektra, name);\n       elektraFree (name);\n   /*%/ args\? %*/\n       /*%^ args\? %*/\n       const char * actualName = elektraFindReference (elektra, \"/*% name %*/\");\n /*%/ args\? %*/\n\n     if (actualName == NULL || strlen (actualName) == 0)\n   {\n             return NULL;\n  }\n\n   return ELEKTRA_GET (/*%& type_name %*/) (elektra, actualName);\n}\n/*%/ alloc\? %*/\n/*%^ alloc\? %*/\n/*%={{ }}=%*/\n/**\n * Get the value of key \'{{{ name }}}\' (tag #{{{ macro_name }}}).\n *\n * @param elektra Instance of Elektra. Create with {{{ init_function_name }}}().\n * @param result  The value will be stored in the referenced variable.\n *   Pointers contained in the struct may become invalid, if the internal state of @p elektra\n *   is modified. All calls to elektraSet* modify this state.\n{{# args\? }}{{# args }} * @param {{{ name }}} {{{ description }}}\n{{/ args }}{{/ args\? }}\n */// {{=/*% %*/=}}\nstatic inline void ELEKTRA_GET (/*%& macro_name %*/) (Elektra * elektra, /*%& native_type %*/ *result /*%# args\? %*/,\n                                                   /*%# args %*/\n                                                 /*%& native_type %*/ /*%& name %*/ /*%^ last\? %*/, /*%/ last\? %*/\n                                                   /*%/ args %*/ /*%/ args\? %*/)\n{\n       /*%# args\? %*/\n       char * name = elektraFormat (\"/*% fmt_string %*/\", /*%# args %*/ /*%& code %*/ /*%^ last\? %*/,\n                                    /*%/ last\? %*/ /*%/ args %*/);\n  const char * actualName = elektraFindReference (elektra, name);\n       elektraFree (name);\n   /*%/ args\? %*/\n       /*%^ args\? %*/\n       const char * actualName = elektraFindReference (elektra, \"/*% name %*/\");\n /*%/ args\? %*/\n\n     if (actualName == NULL || strlen (actualName) == 0)\n   {\n             return NULL;\n  }\n\n   ELEKTRA_GET (/*%& type_name %*/) (elektra, actualName, result);\n}\n/*%/ alloc\? %*/\n\n/*%# generate_setters\? %*/\n/*%={{ }}=%*/\n/**\n * Set the value of key \'{{{ name }}}\' (tag #{{{ macro_name }}}).\n *\n * WARNING: if the given value does not reference a valid struct, from this specification,\n * ELEKTRA_GET ({{{ tag_name }}}) will fail. Use the `reference` plugin to ensure valid values.\n *\n * @param elektra Instance of Elektra. Create with {{{ init_function_name }}}().\n * @param value   The value of \'{{{ name }}}\', you must prefix it with \'{{{ parent_key }}}\' yourself.\n *                This is because you may want to specify a namespace.\n{{# args\? }}{{# args }} * @param {{{ name }}} {{{ description }}}\n{{/ args }}{{/ args\? }}\n * @param error   Pass a reference to an ElektraError pointer.\n *                Will only be set in case of an error.\n */// {{=/*% %*/=}}\nstatic inline void ELEKTRA_SET (/*%& macro_name %*/) (Elektra * elektra, const char * value,\n                                                    /*%# args\? %*/ /*%# args %*/ /*%& native_type %*/ /*%& name %*/,\n                                                     /*%/ args %*/ /*%/ args\? %*/ ElektraError ** error)\n{\n /*%# args\? %*/\n       char * name = elektraFormat (\"/*% fmt_string %*/\", /*%# args %*/ /*%& code %*/ /*%^ last\? %*/,\n                                    /*%/ last\? %*/ /*%/ args %*/);\n  elektraSetRawString (elektra, name, value, \"struct_ref\", error);\n  elektraFree (name);\n   /*%/ args\? %*/\n       /*%^ args\? %*/\n       elektraSetRawString (elektra, \"/*% name %*/\", value, \"struct_ref\", error);\n    /*%/ args\? %*/\n}\n/*%/ generate_setters\? %*/\n";
      11             : static const char * const _kdbgentemplate_highlevel_keys_tags_h = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n// clang-format off\n/*%# keys %*/\n/*%={{ }}=%*/\n/**\n* Tag name for \'{{{ name }}}\'\n* {{# args\? }}\n* Required arguments:\n* {{# args }}\n* - {{{ native_type }}} {{{ name }}}: {{{ description }}}\n* {{/ args }}\n* {{/ args\? }}\n*/// {{=/*% %*/=}}\n#define /*%& macro_name %*/ /*%& tag_name %*/\n/*%/ keys %*/\n// clang-format on\n";
      12             : static const char * const _kdbgentemplate_highlevel_struct_alloc_fields_c = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n/*%# fields %*/\n/*%^ is_array_size\? %*/\n/*%^ is_discriminator\? %*/\nstrncpy (&field[nameLen], \"/*% key_name %*/\", /*%& max_field_len %*/);\n/*%# is_union\? %*/\n/*%# is_array\? %*/\nresult->/*%& size_field %*/ = elektraArraySize (elektra, field);\nif (result->/*%& size_field %*/ > 0)\n{\n  result->/*%& name %*/ = elektraCalloc (sizeof (/*%& native_type %*/) * result->/*%& size_field %*/);\n        result->/*%& discr_field %*/ = elektraCalloc (sizeof (/*%& discr_native_type %*/) * result->/*%& size_field %*/);\n   for (kdb_long_long_t i = 0; i < result->/*%& size_field %*/; ++i)\n   {\n             const char * refname = elektraFindReferenceArrayElement (elektra, field, i);\n          if (refname != NULL && refname[0] != \'\\0\')\n         {\n                     size_t refnameLen = strlen (refname);\n                 char * discriminatorField = elektraCalloc ((refnameLen + sizeof (\"//*% discr_suffix %*/\")) * sizeof (char));\n                      strcpy (discriminatorField, refname);\n                 strcpy (&discriminatorField[refnameLen], \"//*% discr_suffix %*/\");\n\n                  result->/*% discr_field %*/[i] = ELEKTRA_GET (/*%& discr_type_name %*/) (elektra, discriminatorField);\n                 elektraFree (discriminatorField);\n\n                   result->/*%& name %*/[i] = ELEKTRA_GET (/*%& type_name %*/) (elektra, refname, result->/*% discr_field %*/[i]);\n         }\n     }\n}\n/*%/ is_array\? %*/\n/*%^ is_array\? %*/\nconst char * refname = elektraFindReference (elektra, field);\nif (refname != NULL && refname[0] != \'\\0\')\n{\n       size_t refnameLen = strlen (refname);\n char * discriminatorField = elektraCalloc ((refnameLen + sizeof (\"//*% discr_suffix %*/\")) * sizeof (char));\n      strcpy (discriminatorField, refname);\n strcpy (&discriminatorField[refnameLen], \"//*% discr_suffix %*/\");\n\n  result->/*% discr_field %*/ = ELEKTRA_GET (/*%& discr_type_name %*/) (elektra, discriminatorField);\n    elektraFree (discriminatorField);\n\n   result->/*%& name %*/ = ELEKTRA_GET (/*%& type_name %*/) (elektra, refname, result->/*% discr_field %*/);\n}\n/*%/ is_array\? %*/\n/*%/ is_union\? %*/\n/*%^ is_union\? %*/\n/*%# is_array\? %*/\nresult->/*%& size_field %*/ = elektraArraySize (elektra, field);\nif (result->/*%& size_field %*/ > 0)\n{\n    result->/*%& name %*/ = elektraCalloc (sizeof (/*%& native_type %*/) * result->/*%& size_field %*/);\n        for (kdb_long_long_t i = 0; i < result->/*%& size_field %*/; ++i)\n   {\n             /*%# is_struct\? %*/\n          const char * refname = elektraFindReferenceArrayElement (elektra, field, i);\n          if (refname != NULL && refname[0] != \'\\0\')\n         {\n                     /*%# alloc\? %*/\n                      result->/*%& name %*/[i] = ELEKTRA_GET (/*%& type_name %*/) (elektra, refname);\n                    /*%/ alloc\? %*/\n                      /*%^ alloc\? %*/\n                      result->/*%& name %*/[i] = elektraCalloc (sizeof (/*%& native_type %*/));\n                  ELEKTRA_GET (/*%& type_name %*/) (elektra, refname, &result->/*%& name %*/[i]);\n                        /*%/ alloc\? %*/\n              }\n             /*%/ is_struct\? %*/\n          /*%^ is_struct\? %*/\n          result->/*%& name %*/[i] = ELEKTRA_GET_ARRAY_ELEMENT (/*%& type_name %*/) (elektra, field, i);\n             /*%/ is_struct\? %*/\n  }\n}\n/*%/ is_array\? %*/\n/*%^ is_array\? %*/\n/*%# is_struct\? %*/\nconst char * refname = elektraFindReference (elektra, field);\nif (refname != NULL && refname[0] != \'\\0\')\n{\n /*%# alloc\? %*/\n      result->/*%& name %*/ = ELEKTRA_GET (/*%& type_name %*/) (elektra, refname);\n       /*%/ alloc\? %*/\n      /*%^ alloc\? %*/\n      result->/*%& name %*/ = elektraCalloc (sizeof (/*%& native_type %*/));\n     ELEKTRA_GET (/*%& type_name %*/) (elektra, refname, result->/*%& name %*/);\n        /*%/ alloc\? %*/\n}\n/*%/ is_struct\? %*/\n/*%^ is_struct\? %*/\nresult->/*%& name %*/ = ELEKTRA_GET (/*%& type_name %*/) (elektra, field);\n/*%/ is_struct\? %*/\n/*%/ is_array\? %*/\n/*%/ is_union\? %*/\n/*%/ is_discriminator\? %*/\n/*%/ is_array_size\? %*/\n\n/*%/ fields %*/\n";
      13             : static const char * const _kdbgentemplate_highlevel_struct_c = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n// -------------------------\n// Struct accessor functions\n// -------------------------\n\n/*%# structs %*/\n/*%# alloc\? %*/\nELEKTRA_STRUCT_FREE_SIGNATURE (/*%& native_type %*/ *, /*%& type_name %*/)\n{\n  if (*ptr == NULL)\n     {\n             return;\n       }\n\n   /*%# fields %*/\n       /*%^ is_discriminator\? %*/\n   /*%# is_union\? %*/\n   /*%# is_array\? %*/\n   for (kdb_long_long_t i = 0; i < (*ptr)->/*%& size_field %*/; ++i)\n   {\n             ELEKTRA_UNION_FREE (/*%& type_name %*/) (&(*ptr)->/*%& name %*/[i], ((*ptr)->/*%& discr_field %*/[i]));\n }\n     /*%/ is_array\? %*/\n   elektraFree ((*ptr)->/*%& name %*/);\n   elektraFree ((*ptr)->/*%& discr_field %*/);\n    /*%^ is_array\? %*/\n   ELEKTRA_UNION_FREE (/*%& type_name %*/) ((*ptr)->/*%& name %*/, (*ptr)->/*%& discr_field %*/);\n      /*%/ is_array\? %*/\n   /*%/ is_union\? %*/\n   /*%^ is_union\? %*/\n   /*%# is_struct %*/\n    /*%# is_array\? %*/\n   for (kdb_long_long_t i = 0; i < (*ptr)->/*%& size_field %*/; ++i)\n   {\n             ELEKTRA_STRUCT_FREE (/*%& type_name %*/) (&(*ptr)->/*%& name %*/[i]);\n  }\n     elektraFree ((*ptr)->/*%& name %*/);\n   /*%/ is_array\? %*/\n   /*%^ is_array\? %*/\n   ELEKTRA_STRUCT_FREE (/*%& type_name %*/) ((*ptr)->/*%& name %*/);\n  /*%/ is_array\? %*/\n   /*%/ is_struct %*/\n    /*%/ is_union\? %*/\n   /*%/ is_discriminator\? %*/\n   /*%/ fields %*/\n       elektraFree (*ptr);\n   *ptr = NULL;\n}\n\nELEKTRA_GET_SIGNATURE (/*%& native_type %*/ *, /*%& type_name %*/)\n{\n      /*%& native_type %*/ *result = elektraCalloc (sizeof (/*%& native_type %*/));\n size_t nameLen = strlen (keyname);\n    char * field = elektraCalloc ((nameLen + 1 + /*%& max_field_len %*/ +1) * sizeof (char));\n strcpy (field, keyname);\n      field[nameLen] = \'/\';\n       ++nameLen;\n\n  /*%> partial.struct.alloc.fields.c %*/\n\n   elektraFree (field);\n  return result;\n}\n\nELEKTRA_GET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/ *, /*%& type_name %*/)\n{\n      /*%& native_type %*/ *result = elektraCalloc (sizeof (/*%& native_type %*/));\n size_t nameLen = strlen (keyname);\n    char * field = elektraCalloc ((nameLen + 1 + /*%& max_field_len %*/ +1 + ELEKTRA_MAX_ARRAY_SIZE) * sizeof (char));\n        strcpy (field, keyname);\n      field[nameLen] = \'/\';\n       ++nameLen;\n\n  elektraWriteArrayNumber (&field[nameLen], index);\n nameLen = strlen (field);\n     field[nameLen] = \'/\';\n       ++nameLen;\n\n  /*%> partial.struct.alloc.fields.c %*/\n\n   elektraFree (field);\n  return result;\n}\n/*%/ alloc\? %*/\n/*%^ alloc\? %*/\nELEKTRA_GET_OUT_PTR_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/)\n{\n    size_t nameLen = strlen (keyname);\n    char * field = elektraCalloc ((nameLen + 1 + /*%& max_field_len %*/ +1) * sizeof (char));\n strcpy (field, keyname);\n      field[nameLen] = \'/\';\n       ++nameLen;\n\n  /*%# fields %*/\n       /*%^ is_array_size\? %*/\n      strncpy (&field[nameLen], \"/*% key_name %*/\", /*%& max_field_len %*/);\n    /*%# is_struct\? %*/\n/*%! should never happend %*/\n#error \"struct reference inside non-allocating struct is not supported\"\n      /*%/ is_struct\? %*/\n  /*%^ is_struct\? %*/\n  /*%# is_array\? %*/\n/*%! should never happend %*/\n#error \"array inside non-allocating struct is not supported\"\n  /*%/ is_array\? %*/\n   /*%^ is_array\? %*/\n   result->/*%& name %*/ = ELEKTRA_GET (/*%& type_name %*/) (elektra, field);\n /*%/ is_array\? %*/\n   /*%/ is_struct\? %*/\n  /*%/ is_array_size\? %*/\n\n    /*%/ fields %*/\n       elektraFree (field);\n}\n\nELEKTRA_GET_OUT_PTR_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/)\n{\n  size_t nameLen = strlen (keyname);\n    char * field = elektraCalloc ((nameLen + 1 + /*%& max_field_len %*/ +1 + ELEKTRA_MAX_ARRAY_SIZE) * sizeof (char));\n        strcpy (field, keyname);\n      field[nameLen] = \'/\';\n       ++nameLen;\n\n  elektraWriteArrayNumber (&field[nameLen], index);\n nameLen = strlen (field);\n     field[nameLen] = \'/\';\n       ++nameLen;\n\n  /*%# fields %*/\n       /*%^ is_array_size\? %*/\n      strncpy (&field[nameLen], \"/*% key_name %*/\", /*%& max_field_len %*/);\n    /*%# is_struct\? %*/\n/*%! should never happend %*/\n#error \"struct reference inside non-allocating struct is not supported\"\n      /*%/ is_struct\? %*/\n  /*%^ is_struct\? %*/\n  /*%# is_array\? %*/\n/*%! should never happend %*/\n#error \"array inside non-allocating struct is not supported\"\n  /*%/ is_array\? %*/\n   /*%^ is_array\? %*/\n   result->/*%& name %*/ = ELEKTRA_GET (/*%& type_name %*/) (elektra, field);\n /*%/ is_array\? %*/\n   /*%/ is_struct\? %*/\n  /*%/ is_array_size\? %*/\n\n    /*%/ fields %*/\n       elektraFree (field);\n}\n/*%/ alloc\? %*/\n\n/*%# generate_setters\? %*/\nELEKTRA_SET_SIGNATURE (const /*%& native_type %*/ *, /*%& type_name %*/)\n{\n size_t nameLen = strlen (keyname);\n    char * field = elektraCalloc ((nameLen + 1 + /*%& max_field_len %*/ +1) * sizeof (char));\n strcpy (field, keyname);\n      field[nameLen] = \'/\';\n       ++nameLen;\n\n  /*%# fields %*/\n       /*%^ is_array_size\? %*/\n      /*%^ is_discriminator\? %*/\n   strncpy (&field[nameLen], \"/*% key_name %*/\", /*%& max_field_len %*/);\n    /*%# is_union\? %*/\n   /*%# is_array\? %*/\n   for (kdb_long_long_t i = 0; i < value->/*%& size_field %*/; ++i)\n    {\n             /*%& native_type %*/ v = value->/*%& name %*/[i];\n          ELEKTRA_SET_ARRAY_ELEMENT (/*%& type_name %*/) (elektra, field, i, v, (value->/*%& discr_field %*/[i]), error);\n    }\n     /*%/ is_array\? %*/\n   /*%^ is_array\? %*/\n   ELEKTRA_SET (/*%& type_name %*/) (elektra, field, value->/*%& name %*/, value->/*%& discr_field %*/, error);\n        /*%/ is_array\? %*/\n   /*%/ is_union\? %*/\n   /*%^ is_union\? %*/\n   /*%# is_array\? %*/\n   for (kdb_long_long_t i = 0; i < value->/*%& size_field %*/; ++i)\n    {\n             ELEKTRA_SET_ARRAY_ELEMENT (/*%& type_name %*/) (elektra, field, i, value->/*%& name %*/[i], error);\n        }\n     /*%/ is_array\? %*/\n   /*%^ is_array\? %*/\n   ELEKTRA_SET (/*%& type_name %*/) (elektra, field, value->/*%& name %*/, error);\n    /*%/ is_array\? %*/\n   /*%/ is_union\? %*/\n   if (error != NULL)\n    {\n             return;\n       }\n     /*%/ is_discriminator\? %*/\n   /*%/ is_array_size\? %*/\n\n    /*%/ fields %*/\n}\n\nELEKTRA_SET_ARRAY_ELEMENT_SIGNATURE (const /*%& native_type %*/ *, /*%& type_name %*/)\n{\n       size_t nameLen = strlen (keyname);\n    char * field = elektraCalloc ((nameLen + 1 + /*%& max_field_len %*/ +1 + ELEKTRA_MAX_ARRAY_SIZE) * sizeof (char));\n        strcpy (field, keyname);\n      field[nameLen] = \'/\';\n       ++nameLen;\n\n  elektraWriteArrayNumber (&field[nameLen], index);\n nameLen = strlen (field);\n     field[nameLen] = \'/\';\n       ++nameLen;\n\n  /*%# fields %*/\n       /*%^ is_array_size\? %*/\n      /*%^ is_discriminator\? %*/\n   strncpy (&field[nameLen], \"/*% key_name %*/\", /*%& max_field_len %*/);\n    /*%# is_union\? %*/\n   /*%# is_array\? %*/\n   for (kdb_long_long_t i = 0; i < value->/*%& size_field %*/; ++i)\n    {\n             /*%& native_type %*/ v = value->/*%& name %*/[i];\n          ELEKTRA_SET_ARRAY_ELEMENT (/*%& type_name %*/) (elektra, field, i, v, (value->/*%& discr_field %*/[i]), error);\n    }\n     /*%/ is_array\? %*/\n   /*%^ is_array\? %*/\n   ELEKTRA_SET (/*%& type_name %*/) (elektra, field, value->/*%& name %*/, value->/*%& discr_field %*/, error);\n        /*%/ is_array\? %*/\n   /*%/ is_union\? %*/\n   /*%^ is_union\? %*/\n   /*%# is_array\? %*/\n   for (kdb_long_long_t i = 0; i < value->/*%& size_field %*/; ++i)\n    {\n             ELEKTRA_SET_ARRAY_ELEMENT (/*%& type_name %*/) (elektra, field, i, value->/*%& name %*/[i], error);\n        }\n     /*%/ is_array\? %*/\n   /*%^ is_array\? %*/\n   ELEKTRA_SET (/*%& type_name %*/) (elektra, field, value->/*%& name %*/, error);\n    /*%/ is_array\? %*/\n   /*%/ is_union\? %*/\n   if (error != NULL)\n    {\n             return;\n       }\n     /*%/ is_discriminator\? %*/\n   /*%/ is_array_size\? %*/\n\n    /*%/ fields %*/\n}\n/*%/ generate_setters\? %*/\n/*%/ structs %*/\n";
      14             : static const char * const _kdbgentemplate_highlevel_struct_decl_h = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n#define ELEKTRA_STRUCT_FREE(typeName) ELEKTRA_CONCAT (elektraFree, typeName)\n#define ELEKTRA_STRUCT_FREE_SIGNATURE(cType, typeName) void ELEKTRA_STRUCT_FREE (typeName) (cType * ptr)\n\n/*%# structs %*/\n/*%# generate_typedef\? %*/\ntypedef struct /*%& native_type %*/\n{\n       /*%# fields %*/\n       /*%# is_union\? %*/\n   /*%& native_type %*/ /*%# is_array\? %*/ * /*%/ is_array\? %*/ /*%& name%*/;\n  /*%/ is_union\? %*/\n   /*%^ is_union\? %*/ /*%# is_struct\? %*/\n      struct /*%& native_type %*/ * /*%# is_array\? %*/ * /*%/ is_array\? %*/ /*%& name%*/;\n /*%/ is_struct\? %*/\n  /*%^ is_struct\? %*/\n  /*%& native_type %*/ /*%# is_array\? %*/ */*%/ is_array\? %*/ /*%& name%*/;\n   /*%/ is_struct\? %*/ /*%/ is_union\? %*/\n\n    /*%/ fields %*/\n} /*%& native_type %*/;\n\n/*%/ generate_typedef\? %*/\n/*%/ structs %*/\n\n/*%# structs %*/\n/*%# alloc\? %*/\nELEKTRA_STRUCT_FREE_SIGNATURE (/*%& native_type %*/ *, /*%& type_name %*/);\n\nELEKTRA_GET_SIGNATURE (/*%& native_type %*/ *, /*%& type_name %*/);\nELEKTRA_GET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/ *, /*%& type_name %*/);\n/*%/ alloc\? %*/\n/*%^ alloc\? %*/\nELEKTRA_GET_OUT_PTR_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/);\nELEKTRA_GET_OUT_PTR_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/);\n/*%/ alloc\? %*/\n/*%# generate_setters\? %*/\nELEKTRA_SET_SIGNATURE (const /*%& native_type %*/ *, /*%& type_name %*/);\nELEKTRA_SET_ARRAY_ELEMENT_SIGNATURE (const /*%& native_type %*/ *, /*%& type_name %*/);\n/*%/ generate_setters\? %*/\n\n/*%/ structs %*/\n";
      15             : static const char * const _kdbgentemplate_highlevel_union_c = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n// -------------------------\n// Union accessor functions\n// -------------------------\n\n/*%# unions %*/\nELEKTRA_UNION_FREE_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/, /*%& discr_native_type %*/)\n{\n  if (ptr == NULL)\n      {\n             return;\n       }\n\n   switch (discriminator)\n        {\n     /*%# fields %*/\n       case /*%& enum_value %*/:\n         ELEKTRA_STRUCT_FREE (/*% type_name %*/) (&ptr->/*%& name %*/);\n             break;\n        /*%/ fields %*/\n       default:\n              break;\n        }\n}\n\nELEKTRA_UNION_GET_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/, /*%& discr_native_type %*/)\n{\n     switch (discriminator)\n        {\n     /*%# fields %*/\n       case /*%& enum_value %*/:\n         return (/*%& union_type %*/) ELEKTRA_GET (/*% type_name %*/) (elektra, keyname);\n  /*%/ fields %*/\n       default:\n              // TODO: fatal error\n          break;\n        }\n     return (/*%& native_type %*/) (/*%& default_type %*/ *) NULL;\n}\n\nELEKTRA_UNION_GET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/, /*%& discr_native_type %*/)\n{\n   switch (discriminator)\n        {\n     /*%# fields %*/\n       case /*%& enum_value %*/:\n         return (/*%& union_type %*/) ELEKTRA_GET_ARRAY_ELEMENT (/*% type_name %*/) (elektra, keyname, index);\n     /*%/ fields %*/\n       default:\n              // TODO: fatal error\n          break;\n        }\n     return (/*%& native_type %*/) (/*%& default_type %*/ *) NULL;\n}\n\n/*%# generate_setters\? %*/\nELEKTRA_UNION_SET_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/, /*%& discr_native_type %*/)\n{\n    switch (discriminator)\n        {\n     /*%# fields %*/\n       case /*%& enum_value %*/:\n         ELEKTRA_SET (/*% type_name %*/) (elektra, keyname, value./*%& name %*/, error);\n           break;\n        /*%/ fields %*/\n       default:\n              // TODO: set error\n            break;\n        }\n}\n\nELEKTRA_UNION_SET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/, /*%& discr_native_type %*/)\n{\n       switch (discriminator)\n        {\n     /*%# fields %*/\n       case /*%& enum_value %*/:\n         ELEKTRA_SET_ARRAY_ELEMENT (/*% type_name %*/) (elektra, keyname, index, value./*%& name %*/, error);\n              break;\n        /*%/ fields %*/\n       default:\n              // TODO: set error\n            break;\n        }\n}\n/*%/ generate_setters\? %*/\n/*%/ unions %*/\n";
      16             : static const char * const _kdbgentemplate_highlevel_union_decl_h = "// clang-format off\n{{=/*% %*/=}}\n// clang-format on\n\n#define ELEKTRA_UNION_FREE(typeName) ELEKTRA_CONCAT (elektraFree, typeName)\n#define ELEKTRA_UNION_FREE_SIGNATURE(cType, typeName, discrType) void ELEKTRA_UNION_FREE (typeName) (cType * ptr, discrType discriminator)\n\n#define ELEKTRA_UNION_GET_SIGNATURE(cType, typeName, discrType)                                                                            \\\n   cType ELEKTRA_GET (typeName) (Elektra * elektra, const char * keyname, discrType discriminator)\n#define ELEKTRA_UNION_GET_ARRAY_ELEMENT_SIGNATURE(cType, typeName, discrType)                                                              \\\n        cType ELEKTRA_GET_ARRAY_ELEMENT (typeName) (Elektra * elektra, const char * keyname, kdb_long_long_t index, discrType discriminator)\n/*%# generate_setters\? %*/\n#define ELEKTRA_UNION_SET_SIGNATURE(cType, typeName, discrType)                                                                            \\\n      void ELEKTRA_SET (typeName) (Elektra * elektra, const char * keyname, cType value, discrType discriminator, ElektraError ** error)\n#define ELEKTRA_UNION_SET_ARRAY_ELEMENT_SIGNATURE(cType, typeName, discrType)                                                              \\\n     void ELEKTRA_SET_ARRAY_ELEMENT (typeName) (Elektra * elektra, const char * keyname, kdb_long_long_t index, cType value,            \\\n                                            discrType discriminator, ElektraError ** error)\n/*%/ generate_setters\? %*/\n\n/*%# unions %*/\n/*%# generate_typedef\? %*/\ntypedef union\n{\n     /*%# fields %*/\n       struct /*%& native_type %*/ * /*%& name %*/;\n  /*%/ fields %*/\n} /*%& native_type %*/;\n\n/*%/ generate_typedef\? %*/\n/*%/ unions %*/\n\n/*%# unions %*/\nELEKTRA_UNION_GET_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/, /*%& discr_native_type %*/);\nELEKTRA_UNION_GET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/, /*%& discr_native_type %*/);\n/*%# generate_setters\? %*/\nELEKTRA_UNION_SET_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/, /*%& discr_native_type %*/);\nELEKTRA_UNION_SET_ARRAY_ELEMENT_SIGNATURE (/*%& native_type %*/, /*%& type_name %*/, /*%& discr_native_type %*/);\n/*%/ generate_setters\? %*/\n\n/*%/ unions %*/\n";
      17             : 
      18       64476 : static const std::unordered_map<std::string, std::string> kdbgenTemplates = {
      19             :         { "highlevel_c", _kdbgentemplate_highlevel_c },
      20             :         { "highlevel_h", _kdbgentemplate_highlevel_h },
      21             :         { "highlevel_mount_sh", _kdbgentemplate_highlevel_mount_sh },
      22             :         { "highlevel_enum_c", _kdbgentemplate_highlevel_enum_c },
      23             :         { "highlevel_enum_decl_h", _kdbgentemplate_highlevel_enum_decl_h },
      24             :         { "highlevel_keys_fun_h", _kdbgentemplate_highlevel_keys_fun_h },
      25             :         { "highlevel_keys_fun_struct_h", _kdbgentemplate_highlevel_keys_fun_struct_h },
      26             :         { "highlevel_keys_fun_structref_h", _kdbgentemplate_highlevel_keys_fun_structref_h },
      27             :         { "highlevel_keys_tags_h", _kdbgentemplate_highlevel_keys_tags_h },
      28             :         { "highlevel_struct_alloc_fields_c", _kdbgentemplate_highlevel_struct_alloc_fields_c },
      29             :         { "highlevel_struct_c", _kdbgentemplate_highlevel_struct_c },
      30             :         { "highlevel_struct_decl_h", _kdbgentemplate_highlevel_struct_decl_h },
      31             :         { "highlevel_union_c", _kdbgentemplate_highlevel_union_c },
      32             :         { "highlevel_union_decl_h", _kdbgentemplate_highlevel_union_decl_h },
      33       50148 : };
      34             : 

Generated by: LCOV version 1.13