Skip to content

Commit

Permalink
Add support for compile time count of OOVPA arrays
Browse files Browse the repository at this point in the history
  • Loading branch information
RadWolfie committed Aug 12, 2021
1 parent 24e0dd1 commit 6cce128
Showing 1 changed file with 30 additions and 8 deletions.
38 changes: 30 additions & 8 deletions src/OOVPADatabase/OOVPA.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)

Expand Down

0 comments on commit 6cce128

Please sign in to comment.