From e5df76ab1db5d87a945e9ed302a9c099d32d5ae9 Mon Sep 17 00:00:00 2001 From: peri4 Date: Fri, 19 Sep 2025 17:39:39 +0300 Subject: [PATCH] decompose PRIVATE_DEFINITION_END(c) to PRIVATE_DEFINITION_FINISH(c) and RIVATE_DEFINITION_INITIALIZE(c) now you can define private in separate file and initialize it in main cpp --- .clang-format | 2 +- libs/main/core/pibase_macros.h | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.clang-format b/.clang-format index ab89af92..26a8b84b 100644 --- a/.clang-format +++ b/.clang-format @@ -135,7 +135,7 @@ JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: false LambdaBodyIndentation: Signature MacroBlockBegin: "PRIVATE_DEFINITION_START|STATIC_INITIALIZER_BEGIN" -MacroBlockEnd: "PRIVATE_DEFINITION_END|STATIC_INITIALIZER_END" +MacroBlockEnd: "PRIVATE_DEFINITION_END|PRIVATE_DEFINITION_FINISH|STATIC_INITIALIZER_END" MaxEmptyLinesToKeep: 2 NamespaceIndentation: None ObjCBinPackProtocolList: Auto diff --git a/libs/main/core/pibase_macros.h b/libs/main/core/pibase_macros.h index 3f597634..6dc84470 100644 --- a/libs/main/core/pibase_macros.h +++ b/libs/main/core/pibase_macros.h @@ -12,7 +12,7 @@ */ /* PIP - Platform Independent Primitives - Base macros + Base macros Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify @@ -333,9 +333,10 @@ typedef long long ssize_t; __PrivateInitializer__ __privateinitializer__; # define PRIVATE_DEFINITION_START(c) struct c::__Private__ { -# define PRIVATE_DEFINITION_END(c) \ - } \ - ; \ +# define PRIVATE_DEFINITION_FINISH(c) \ + } \ + ; +# define PRIVATE_DEFINITION_INITIALIZE(c) \ c::__PrivateInitializer__::__PrivateInitializer__() { \ p = new c::__Private__(); \ } \ @@ -350,6 +351,10 @@ typedef long long ssize_t; p = new c::__Private__(); \ return *this; \ } +# define PRIVATE_DEFINITION_END(c) \ + PRIVATE_DEFINITION_FINISH(c) \ + PRIVATE_DEFINITION_INITIALIZE(c) + # define PRIVATE (__privateinitializer__.p) # define PRIVATEWB __privateinitializer__.p