Skip to content

Commit 6f1fce3

Browse files
authored
-konami/simpsons.cpp: Cleaned up code. (#13312)
* Reduced literal tags and run-time tag lookups, use more descriptive tags. -konami/konami_helper.cpp: Made layer sorting functions templates, reduced dependence on preprocessor.
1 parent b128c1f commit 6f1fce3

File tree

3 files changed

+103
-123
lines changed

3 files changed

+103
-123
lines changed

src/mame/konami/konami_helper.cpp

-62
Original file line numberDiff line numberDiff line change
@@ -14,65 +14,3 @@ void konami_decode_gfx(device_gfx_interface &gfxdecode, int gfx_index, uint8_t *
1414
gl.total = total;
1515
gfxdecode.set_gfx(gfx_index, std::make_unique<gfx_element>(&palette, gl, data, 0, palette.entries() >> bpp, 0));
1616
}
17-
18-
19-
/* useful function to sort three tile layers by priority order */
20-
void konami_sortlayers3( int *layer, int *pri )
21-
{
22-
#define SWAP(a,b) \
23-
if (pri[a] < pri[b]) \
24-
{ \
25-
int t; \
26-
t = pri[a]; pri[a] = pri[b]; pri[b] = t; \
27-
t = layer[a]; layer[a] = layer[b]; layer[b] = t; \
28-
}
29-
30-
SWAP(0,1)
31-
SWAP(0,2)
32-
SWAP(1,2)
33-
#undef SWAP
34-
}
35-
36-
/* useful function to sort four tile layers by priority order */
37-
void konami_sortlayers4( int *layer, int *pri )
38-
{
39-
#define SWAP(a,b) \
40-
if (pri[a] <= pri[b]) \
41-
{ \
42-
int t; \
43-
t = pri[a]; pri[a] = pri[b]; pri[b] = t; \
44-
t = layer[a]; layer[a] = layer[b]; layer[b] = t; \
45-
}
46-
47-
SWAP(0, 1)
48-
SWAP(0, 2)
49-
SWAP(0, 3)
50-
SWAP(1, 2)
51-
SWAP(1, 3)
52-
SWAP(2, 3)
53-
#undef SWAP
54-
}
55-
56-
/* useful function to sort five tile layers by priority order */
57-
void konami_sortlayers5( int *layer, int *pri )
58-
{
59-
#define SWAP(a,b) \
60-
if (pri[a] <= pri[b]) \
61-
{ \
62-
int t; \
63-
t = pri[a]; pri[a] = pri[b]; pri[b] = t; \
64-
t = layer[a]; layer[a] = layer[b]; layer[b] = t; \
65-
}
66-
67-
SWAP(0, 1)
68-
SWAP(0, 2)
69-
SWAP(0, 3)
70-
SWAP(0, 4)
71-
SWAP(1, 2)
72-
SWAP(1, 3)
73-
SWAP(1, 4)
74-
SWAP(2, 3)
75-
SWAP(2, 4)
76-
SWAP(3, 4)
77-
#undef SWAP
78-
}

src/mame/konami/konami_helper.h

+37-3
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,47 @@
66

77
#pragma once
88

9+
#include <algorithm>
10+
#include <functional>
11+
912
void konami_decode_gfx(device_gfx_interface &gfxdecode, int gfx_index, uint8_t *data, uint32_t total, const gfx_layout *layout, int bpp);
1013

14+
// unrolled bubble sort helper
15+
template <unsigned N, unsigned A = N - 2, unsigned B = N - 1, typename C, typename T, typename U>
16+
inline void konami_sortlayers(C cmp, T *layer, U *pri)
17+
{
18+
if constexpr (B > (A + 1))
19+
konami_sortlayers<N, A, B - 1>(cmp, layer, pri);
20+
else if constexpr (A > 0)
21+
konami_sortlayers<N, A - 1, N - 1>(cmp, layer, pri);
22+
if (cmp(pri[A], pri[B]))
23+
{
24+
using std::swap;
25+
swap(pri[A], pri[B]);
26+
swap(layer[A], layer[B]);
27+
}
28+
}
29+
1130
// helper function to sort three tile layers by priority order
12-
void konami_sortlayers3(int *layer, int *pri);
31+
template <typename T, typename U>
32+
inline void konami_sortlayers3(T *layer, U *pri)
33+
{
34+
konami_sortlayers<3>(std::less<U>(), layer, pri);
35+
}
36+
1337
// helper function to sort four tile layers by priority order
14-
void konami_sortlayers4(int *layer, int *pri);
38+
template <typename T, typename U>
39+
inline void konami_sortlayers4(T *layer, U *pri)
40+
{
41+
konami_sortlayers<4>(std::less_equal<U>(), layer, pri);
42+
}
43+
1544
// helper function to sort five tile layers by priority order
16-
void konami_sortlayers5(int *layer, int *pri);
45+
template <typename T, typename U>
46+
inline void konami_sortlayers5(T *layer, U *pri)
47+
{
48+
konami_sortlayers<5>(std::less_equal<U>(), layer, pri);
49+
}
50+
1751

1852
#endif // MAME_KONAMI_KONAMI_HELPER_H

0 commit comments

Comments
 (0)