|
1 | 1 | #pragma once
|
| 2 | + |
2 | 3 | #include "Units.hpp"
|
3 |
| -// ------------------------------------------------------------------------------------- |
4 |
| -// ------------------------------------------------------------------------------------- |
| 4 | + |
5 | 5 | #include <cstring>
|
6 |
| -// ------------------------------------------------------------------------------------- |
| 6 | + |
7 | 7 | // TODO: Works only for update same size
|
8 | 8 | #define DELTA_COPY
|
9 | 9 | #ifdef DELTA_XOR
|
10 | 10 | // Obsolete
|
11 |
| -#define beforeBody(Type, Attribute, tuple, entry) \ |
12 |
| - const auto Attribute##_offset = offsetof(Type, Attribute); \ |
13 |
| - const auto Attribute##_size = sizeof(Type::Attribute); \ |
14 |
| - *reinterpret_cast<u16*>(entry) = Attribute##_offset; \ |
15 |
| - entry += sizeof(u16); \ |
16 |
| - *reinterpret_cast<u16*>(entry) = Attribute##_size; \ |
17 |
| - entry += sizeof(u16); \ |
18 |
| - std::memcpy(entry, tuple + Attribute##_offset, Attribute##_size); \ |
19 |
| - entry += Attribute##_size; |
| 11 | +#define beforeBody(Type, Attribute, tuple, entry) \ |
| 12 | + const auto Attribute##_offset = offsetof(Type, Attribute); \ |
| 13 | + const auto Attribute##_size = sizeof(Type::Attribute); \ |
| 14 | + *reinterpret_cast<u16*>(entry) = Attribute##_offset; \ |
| 15 | + entry += sizeof(u16); \ |
| 16 | + *reinterpret_cast<u16*>(entry) = Attribute##_size; \ |
| 17 | + entry += sizeof(u16); \ |
| 18 | + std::memcpy(entry, tuple + Attribute##_offset, Attribute##_size); \ |
| 19 | + entry += Attribute##_size; |
20 | 20 |
|
21 |
| -#define afterBody(Type, Attribute, tuple, entry) \ |
22 |
| - const auto Attribute##_offset = offsetof(Type, Attribute); \ |
23 |
| - const auto Attribute##_size = sizeof(Type::Attribute); \ |
24 |
| - entry += (sizeof(u16) * 2); \ |
25 |
| - for (u64 b_i = 0; b_i < Attribute##_size; b_i++) { \ |
26 |
| - *(entry + b_i) ^= *(tuple + Attribute##_offset + b_i); \ |
27 |
| - } \ |
28 |
| - entry += Attribute##_size; |
| 21 | +#define afterBody(Type, Attribute, tuple, entry) \ |
| 22 | + const auto Attribute##_offset = offsetof(Type, Attribute); \ |
| 23 | + const auto Attribute##_size = sizeof(Type::Attribute); \ |
| 24 | + entry += (sizeof(u16) * 2); \ |
| 25 | + for (u64 b_i = 0; b_i < Attribute##_size; b_i++) { \ |
| 26 | + *(entry + b_i) ^= *(tuple + Attribute##_offset + b_i); \ |
| 27 | + } \ |
| 28 | + entry += Attribute##_size; |
29 | 29 | #endif
|
30 | 30 | #ifdef DELTA_COPY
|
31 |
| -#define beforeBody(Type, Attribute, tuple, entry) \ |
32 |
| - const auto Attribute##_offset = offsetof(Type, Attribute); \ |
33 |
| - const auto Attribute##_size = sizeof(Type::Attribute); \ |
34 |
| - *reinterpret_cast<u16*>(entry) = Attribute##_offset; \ |
35 |
| - entry += sizeof(u16); \ |
36 |
| - *reinterpret_cast<u16*>(entry) = Attribute##_size; \ |
37 |
| - entry += sizeof(u16); \ |
38 |
| - std::memcpy(entry, tuple + Attribute##_offset, Attribute##_size); \ |
39 |
| - entry += 2 * Attribute##_size; |
| 31 | +#define beforeBody(Type, Attribute, tuple, entry) \ |
| 32 | + const auto Attribute##_offset = offsetof(Type, Attribute); \ |
| 33 | + const auto Attribute##_size = sizeof(Type::Attribute); \ |
| 34 | + *reinterpret_cast<u16*>(entry) = Attribute##_offset; \ |
| 35 | + entry += sizeof(u16); \ |
| 36 | + *reinterpret_cast<u16*>(entry) = Attribute##_size; \ |
| 37 | + entry += sizeof(u16); \ |
| 38 | + std::memcpy(entry, tuple + Attribute##_offset, Attribute##_size); \ |
| 39 | + entry += 2 * Attribute##_size; |
40 | 40 |
|
41 |
| -#define afterBody(Type, Attribute, tuple, entry) \ |
42 |
| - const auto Attribute##_offset = offsetof(Type, Attribute); \ |
43 |
| - const auto Attribute##_size = sizeof(Type::Attribute); \ |
44 |
| - entry += (sizeof(u16) * 2); \ |
45 |
| - entry += Attribute##_size; \ |
46 |
| - std::memcpy(entry, tuple + Attribute##_offset, Attribute##_size); \ |
47 |
| - entry += 1 * Attribute##_size; |
| 41 | +#define afterBody(Type, Attribute, tuple, entry) \ |
| 42 | + const auto Attribute##_offset = offsetof(Type, Attribute); \ |
| 43 | + const auto Attribute##_size = sizeof(Type::Attribute); \ |
| 44 | + entry += (sizeof(u16) * 2); \ |
| 45 | + entry += Attribute##_size; \ |
| 46 | + std::memcpy(entry, tuple + Attribute##_offset, Attribute##_size); \ |
| 47 | + entry += 1 * Attribute##_size; |
48 | 48 | #endif
|
49 | 49 |
|
50 |
| -#define beforeWrapper1(Type, A1) [](u8* tuple, u8* entry) { beforeBody(Type, A1, tuple, entry); } |
51 |
| -#define beforeWrapper2(Type, A1, A2) \ |
52 |
| - [](u8* tuple, u8* entry) { \ |
53 |
| - beforeBody(Type, A1, tuple, entry); \ |
54 |
| - beforeBody(Type, A2, tuple, entry); \ |
55 |
| - } |
56 |
| -#define beforeWrapper3(Type, A1, A2, A3) \ |
57 |
| - [](u8* tuple, u8* entry) { \ |
58 |
| - beforeBody(Type, A1, tuple, entry); \ |
59 |
| - beforeBody(Type, A2, tuple, entry); \ |
60 |
| - beforeBody(Type, A3, tuple, entry); \ |
61 |
| - } |
62 |
| -#define beforeWrapper4(Type, A1, A2, A3, A4) \ |
63 |
| - [](u8* tuple, u8* entry) { \ |
64 |
| - beforeBody(Type, A1, tuple, entry); \ |
65 |
| - beforeBody(Type, A2, tuple, entry); \ |
66 |
| - beforeBody(Type, A3, tuple, entry); \ |
67 |
| - beforeBody(Type, A4, tuple, entry); \ |
68 |
| - } |
| 50 | +#define beforeWrapper1(Type, A1) \ |
| 51 | + [](u8* tuple, u8* entry) { beforeBody(Type, A1, tuple, entry); } |
| 52 | +#define beforeWrapper2(Type, A1, A2) \ |
| 53 | + [](u8* tuple, u8* entry) { \ |
| 54 | + beforeBody(Type, A1, tuple, entry); \ |
| 55 | + beforeBody(Type, A2, tuple, entry); \ |
| 56 | + } |
| 57 | +#define beforeWrapper3(Type, A1, A2, A3) \ |
| 58 | + [](u8* tuple, u8* entry) { \ |
| 59 | + beforeBody(Type, A1, tuple, entry); \ |
| 60 | + beforeBody(Type, A2, tuple, entry); \ |
| 61 | + beforeBody(Type, A3, tuple, entry); \ |
| 62 | + } |
| 63 | +#define beforeWrapper4(Type, A1, A2, A3, A4) \ |
| 64 | + [](u8* tuple, u8* entry) { \ |
| 65 | + beforeBody(Type, A1, tuple, entry); \ |
| 66 | + beforeBody(Type, A2, tuple, entry); \ |
| 67 | + beforeBody(Type, A3, tuple, entry); \ |
| 68 | + beforeBody(Type, A4, tuple, entry); \ |
| 69 | + } |
69 | 70 |
|
70 |
| -#define afterWrapper1(Type, A1) [](u8* tuple, u8* entry) { afterBody(Type, A1, tuple, entry); } |
71 |
| -#define afterWrapper2(Type, A1, A2) \ |
72 |
| - [](u8* tuple, u8* entry) { \ |
73 |
| - afterBody(Type, A1, tuple, entry); \ |
74 |
| - afterBody(Type, A2, tuple, entry); \ |
75 |
| - } |
| 71 | +#define afterWrapper1(Type, A1) \ |
| 72 | + [](u8* tuple, u8* entry) { afterBody(Type, A1, tuple, entry); } |
| 73 | +#define afterWrapper2(Type, A1, A2) \ |
| 74 | + [](u8* tuple, u8* entry) { \ |
| 75 | + afterBody(Type, A1, tuple, entry); \ |
| 76 | + afterBody(Type, A2, tuple, entry); \ |
| 77 | + } |
76 | 78 |
|
77 |
| -#define afterWrapper3(Type, A1, A2, A3) \ |
78 |
| - [](u8* tuple, u8* entry) { \ |
79 |
| - afterBody(Type, A1, tuple, entry); \ |
80 |
| - afterBody(Type, A2, tuple, entry); \ |
81 |
| - afterBody(Type, A3, tuple, entry); \ |
82 |
| - } |
| 79 | +#define afterWrapper3(Type, A1, A2, A3) \ |
| 80 | + [](u8* tuple, u8* entry) { \ |
| 81 | + afterBody(Type, A1, tuple, entry); \ |
| 82 | + afterBody(Type, A2, tuple, entry); \ |
| 83 | + afterBody(Type, A3, tuple, entry); \ |
| 84 | + } |
83 | 85 |
|
84 |
| -#define afterWrapper4(Type, A1, A2, A3, A4) \ |
85 |
| - [](u8* tuple, u8* entry) { \ |
86 |
| - afterBody(Type, A1, tuple, entry); \ |
87 |
| - afterBody(Type, A2, tuple, entry); \ |
88 |
| - afterBody(Type, A3, tuple, entry); \ |
89 |
| - afterBody(Type, A4, tuple, entry); \ |
90 |
| - } |
| 86 | +#define afterWrapper4(Type, A1, A2, A3, A4) \ |
| 87 | + [](u8* tuple, u8* entry) { \ |
| 88 | + afterBody(Type, A1, tuple, entry); \ |
| 89 | + afterBody(Type, A2, tuple, entry); \ |
| 90 | + afterBody(Type, A3, tuple, entry); \ |
| 91 | + afterBody(Type, A4, tuple, entry); \ |
| 92 | + } |
91 | 93 |
|
92 | 94 | #ifdef DELTA_XOR
|
93 | 95 | #define entrySize1(Type, A1) ((2 * sizeof(u16)) + (1 * sizeof(Type::A1)))
|
|
96 | 98 | #define entrySize1(Type, A1) ((2 * sizeof(u16)) + (2 * sizeof(Type::A1)))
|
97 | 99 | #endif
|
98 | 100 | #define entrySize2(Type, A1, A2) entrySize1(Type, A1) + entrySize1(Type, A2)
|
99 |
| -#define entrySize3(Type, A1, A2, A3) entrySize1(Type, A1) + entrySize1(Type, A2) + entrySize1(Type, A3) |
100 |
| -#define entrySize4(Type, A1, A2, A3, A4) entrySize1(Type, A1) + entrySize1(Type, A2) + entrySize1(Type, A3) + entrySize1(Type, A4) |
| 101 | +#define entrySize3(Type, A1, A2, A3) \ |
| 102 | + entrySize1(Type, A1) + entrySize1(Type, A2) + entrySize1(Type, A3) |
| 103 | +#define entrySize4(Type, A1, A2, A3, A4) \ |
| 104 | + entrySize1(Type, A1) + entrySize1(Type, A2) + entrySize1(Type, A3) + \ |
| 105 | + entrySize1(Type, A4) |
101 | 106 |
|
102 |
| -#define WALUpdate1(Type, A1) \ |
103 |
| - { \ |
104 |
| - beforeWrapper1(Type, A1), afterWrapper1(Type, A1), entrySize1(Type, A1) \ |
105 |
| - } |
106 |
| -#define WALUpdate2(Type, A1, A2) \ |
107 |
| - { \ |
108 |
| - beforeWrapper2(Type, A1, A2), afterWrapper2(Type, A1, A2), entrySize2(Type, A1, A2) \ |
109 |
| - } |
110 |
| -#define WALUpdate3(Type, A1, A2, A3) \ |
111 |
| - { \ |
112 |
| - beforeWrapper3(Type, A1, A2, A3), afterWrapper3(Type, A1, A2, A3), entrySize3(Type, A1, A2, A3) \ |
113 |
| - } |
114 |
| -#define WALUpdate4(Type, A1, A2, A3, A4) \ |
115 |
| - { \ |
116 |
| - beforeWrapper4(Type, A1, A2, A3, A4), afterWrapper4(Type, A1, A2, A3, A4), entrySize4(Type, A1, A2, A3, A4) \ |
117 |
| - } |
| 107 | +#define WALUpdate1(Type, A1) \ |
| 108 | + { beforeWrapper1(Type, A1), afterWrapper1(Type, A1), entrySize1(Type, A1) } |
| 109 | +#define WALUpdate2(Type, A1, A2) \ |
| 110 | + { \ |
| 111 | + beforeWrapper2(Type, A1, A2), afterWrapper2(Type, A1, A2), \ |
| 112 | + entrySize2(Type, A1, A2) \ |
| 113 | + } |
| 114 | +#define WALUpdate3(Type, A1, A2, A3) \ |
| 115 | + { \ |
| 116 | + beforeWrapper3(Type, A1, A2, A3), afterWrapper3(Type, A1, A2, A3), \ |
| 117 | + entrySize3(Type, A1, A2, A3) \ |
| 118 | + } |
| 119 | +#define WALUpdate4(Type, A1, A2, A3, A4) \ |
| 120 | + { \ |
| 121 | + beforeWrapper4(Type, A1, A2, A3, A4), afterWrapper4(Type, A1, A2, A3, A4), \ |
| 122 | + entrySize4(Type, A1, A2, A3, A4) \ |
| 123 | + } |
0 commit comments