From e9a0595fce6d00e50513a89be64a6350ed47e975 Mon Sep 17 00:00:00 2001 From: RadWolfie Date: Sun, 1 Aug 2021 12:20:22 -0500 Subject: [PATCH 1/3] forward OOVPA_XREF_DETECT to OOVPA_XREF_EXTEND, both are identical --- src/OOVPADatabase/OOVPA.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/OOVPADatabase/OOVPA.h b/src/OOVPADatabase/OOVPA.h index 9b632528..72e02260 100644 --- a/src/OOVPADatabase/OOVPA.h +++ b/src/OOVPADatabase/OOVPA.h @@ -153,8 +153,7 @@ typedef struct _LOOVPA { #define OOVPA_XREF_EXTEND(Name, Version, Count, XRefSaveIndex, XRefCount, DetectSelect) \ LOOVPA Name##_##Version = { Count, XRefCount, XRefSaveIndex, DetectSelect, VARPADSET, VARPADSET, VARPADSET, -#define OOVPA_XREF_DETECT(Name, Version, Count, XRefSaveIndex, XRefCount, DetectSelect) \ - OOVPA_XREF_EXTEND(Name, Version, Count, XRefSaveIndex, XRefCount, DetectSelect) +#define OOVPA_XREF_DETECT OOVPA_XREF_EXTEND #define OOVPA_NO_XREF_DETECT(Name, Version, Count, DetectSelect) \ OOVPA_XREF_EXTEND(Name, Version, Count, XRefNoSaveIndex, XRefZero, DetectSelect) From 24e0dd1b342e4fbb3128d6d82c2ebb3232ea8892 Mon Sep 17 00:00:00 2001 From: RadWolfie Date: Sun, 7 Feb 2021 05:46:21 -0600 Subject: [PATCH 2/3] Setup .clang-format for compile time count of OOVPA arrays support --- src/OOVPADatabase/.clang-format | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OOVPADatabase/.clang-format b/src/OOVPADatabase/.clang-format index 87567fbd..e6801694 100644 --- a/src/OOVPADatabase/.clang-format +++ b/src/OOVPADatabase/.clang-format @@ -13,8 +13,8 @@ ColumnLimit: '0' Cpp11BracedListStyle: 'false' IndentCaseLabels: 'true' IndentWidth: '4' -MacroBlockBegin: ^OOVPA_XREF$|^OOVPA_NO_XREF$|^OOVPA_XREF_DETECT$|^OOVPA_NO_XREF_DETECT$|^OOVPA_XREF_EXTEND$ -MacroBlockEnd: ^OOVPA_END$ +MacroBlockBegin: ^OOVPA_XREF$|^OOVPA_NO_XREF$|^OOVPA_XREF_DETECT$|^OOVPA_NO_XREF_DETECT$|^OOVPA_XREF_EXTEND$|^OOVPA_SIG_HEADER_XREF$|^OOVPA_SIG_HEADER_NO_XREF$|^OOVPA_SIG_HEADER_XREF_DETECT$|^OOVPA_SIG_HEADER_NO_XREF_DETECT$|^OOVPA_SIG_HEADER_XREF_EXTEND$ +MacroBlockEnd: ^OOVPA_END$|^OOVPA_SIG_MATCH$ MaxEmptyLinesToKeep: '2' PointerAlignment: Left SortIncludes: 'false' From 6cce12814cad083a644302e39d0d5e8bda5ec347 Mon Sep 17 00:00:00 2001 From: RadWolfie Date: Sun, 7 Feb 2021 05:26:29 -0600 Subject: [PATCH 3/3] Add support for compile time count of OOVPA arrays --- src/OOVPADatabase/OOVPA.h | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/OOVPADatabase/OOVPA.h b/src/OOVPADatabase/OOVPA.h index 72e02260..1593eb28 100644 --- a/src/OOVPADatabase/OOVPA.h +++ b/src/OOVPADatabase/OOVPA.h @@ -40,12 +40,8 @@ // * Optimized (Offset, Value)-Pair Array // ****************************************************************** typedef struct _OOVPA { - // This OOVPA field, Count, indicates the number of - // {Offset, Value}-pairs present in the Lovp array, - // available after casting this OOVPA to LOOVPA. - // (This Count INCLUDES optional leading {Offset, XREF_*-enum}- - // pairs - see comment at XRefCount.) - unsigned char Count; + + unsigned char Padding; // This OOVPA field, XRefCount, contains the number of // {Offset, XREF_*-enum}-pairs that come before all other @@ -61,7 +57,14 @@ typedef struct _OOVPA { unsigned char DetectSelect; - unsigned char Padding[3]; + unsigned char Padding2[2]; + + // This OOVPA field, Count, indicates the number of + // {Offset, Value}-pairs present in the Lovp array, + // available after casting this OOVPA to LOOVPA. + // (This Count INCLUDES optional leading {Offset, XREF_*-enum}- + // pairs - see comment at XRefCount.) + unsigned char Count; // Define LOVP here to reduce type definition complexity. // (Otherwise, if defined in the template classes, that would mean @@ -150,17 +153,36 @@ typedef struct _LOOVPA { } LOOVPA; #pragma warning(pop) +#define COUNTARGS_LOVP(...) (sizeof((LOVP[]){ __VA_ARGS__ }) / sizeof(LOVP)) +// clang-format off +#define OOVPA_SIG_MATCH(...) MSVC_EXPAND(COUNTARGS_LOVP(__VA_ARGS__)), { __VA_ARGS__ } } +// clang-format on + +#define OOVPA_SIG_HEADER_XREF_EXTEND(Name, Version, XRefSaveIndex, XRefCount, DetectSelect) \ + LOOVPA Name##_##Version = { VARPADSET, XRefCount, XRefSaveIndex, DetectSelect, VARPADSET, VARPADSET, + #define OOVPA_XREF_EXTEND(Name, Version, Count, XRefSaveIndex, XRefCount, DetectSelect) \ - LOOVPA Name##_##Version = { Count, XRefCount, XRefSaveIndex, DetectSelect, VARPADSET, VARPADSET, VARPADSET, + LOOVPA Name##_##Version = { VARPADSET, XRefCount, XRefSaveIndex, DetectSelect, VARPADSET, VARPADSET, Count, + +#define OOVPA_SIG_HEADER_XREF_DETECT OOVPA_SIG_HEADER_XREF_EXTEND #define OOVPA_XREF_DETECT OOVPA_XREF_EXTEND +#define OOVPA_SIG_HEADER_NO_XREF_DETECT(Name, Version, DetectSelect) \ + OOVPA_SIG_HEADER_XREF_EXTEND(Name, Version, XRefNoSaveIndex, XRefZero, DetectSelect) + #define OOVPA_NO_XREF_DETECT(Name, Version, Count, DetectSelect) \ OOVPA_XREF_EXTEND(Name, Version, Count, XRefNoSaveIndex, XRefZero, DetectSelect) +#define OOVPA_SIG_HEADER_XREF(Name, Version, XRefSaveIndex, XRefCount) \ + OOVPA_SIG_HEADER_XREF_EXTEND(Name, Version, XRefSaveIndex, XRefCount, DetectDefault) + #define OOVPA_XREF(Name, Version, Count, XRefSaveIndex, XRefCount) \ OOVPA_XREF_EXTEND(Name, Version, Count, XRefSaveIndex, XRefCount, DetectDefault) +#define OOVPA_SIG_HEADER_NO_XREF(Name, Version) \ + OOVPA_SIG_HEADER_XREF_EXTEND(Name, Version, XRefNoSaveIndex, XRefZero, DetectDefault) + #define OOVPA_NO_XREF(Name, Version, Count) \ OOVPA_XREF_EXTEND(Name, Version, Count, XRefNoSaveIndex, XRefZero, DetectDefault)