Skip to content

Commit 0aadffa

Browse files
Consistent macro API naming
1 parent 3231d61 commit 0aadffa

File tree

4 files changed

+68
-52
lines changed

4 files changed

+68
-52
lines changed

include/archetype/archetype.h

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,37 @@
44
#include <type_traits>
55

66

7-
// Utilities
7+
// -- Utilities
88
namespace archetype {
99

1010
class Base {
1111
public:
1212
virtual ~Base() {};
13-
1413
template <typename T> void bind(T &t) { _obj = static_cast<void *>(&t); }
15-
1614
protected:
1715
void *_obj;
1816
};
1917

20-
// pre c++ 17
21-
template <typename...>
18+
19+
template <typename...> // std::void_t - pre c++17
2220
using void_t = void;
2321

24-
// components friend this helper for use in inheritance chaining
25-
template <class C> class helper {
22+
23+
template <class C> class helper { // friend of component, used for inheritance chaining
2624
public:
2725
template <typename T = archetype::Base>
2826
using get = typename C::template component<T>;
2927
};
3028

31-
template <class BASE> class identity : public BASE {};
29+
template <class BASE> class identity : public BASE {}; // derived is the base
3230
} // namespace archetype
3331

3432

35-
// API
36-
#define DEFINE_METHOD(ret, name, ...) \
33+
// -- API
34+
#define ARCHETYPE_METHOD(ret, name, ...) \
3735
(UNIQUE_NAME(name), ret, name, __VA_ARGS__)
3836

39-
#define DEFINE_ARCHETYPE(NAME, METHODS) \
37+
#define ARCHETYPE_DEFINE(NAME, METHODS) \
4038
struct NAME { \
4139
NAME() = delete; \
4240
\
@@ -94,7 +92,7 @@ template <class BASE> class identity : public BASE {};
9492
}; \
9593
};
9694

97-
#define COMPOSE_ARCHETYPE(NAME, ...) \
95+
#define ARCHETYPE_COMPOSE(NAME, ...) \
9896
struct NAME { \
9997
NAME() = delete; \
10098
\
@@ -146,7 +144,7 @@ template <class BASE> class identity : public BASE {};
146144
EXPAND_ARCHETYPE_METHODS_IMPL METHODS
147145

148146
#define EXPAND_ARCHETYPE_METHODS_IMPL(...) \
149-
FOR_EACH(ARCHETYPE_METHOD, __VA_ARGS__)
147+
FOR_EACH(ARCHETYPE_PP_METHOD, __VA_ARGS__)
150148

151149
#define EXPAND_CALLSTUB_ASSIGNMENTS(METHODS) \
152150
EXPAND_CALLSTUB_ASSIGNMENTS_IMPL METHODS
@@ -178,7 +176,7 @@ template <class BASE> class identity : public BASE {};
178176

179177

180178
// Low level expressions
181-
#define ARCHETYPE_METHOD(unique_name, ret, name, ...) \
179+
#define ARCHETYPE_PP_METHOD(unique_name, ret, name, ...) \
182180
public: \
183181
ret name(TYPED_ARGS(M_NARGS(__VA_ARGS__), __VA_ARGS__)) { \
184182
return _##unique_name##_stub(_obj COMMA_IF_ARGS(__VA_ARGS__) ARG_NAMES( \

src/example.cpp

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@
33
#include <cstring>
44
#include <iostream>
55

6-
DEFINE_ARCHETYPE(writable, (
7-
DEFINE_METHOD(int, write, const char *, size_t)
6+
ARCHETYPE_DEFINE(writable, (
7+
ARCHETYPE_METHOD(int, write, const char *, size_t)
88
))
99

10-
DEFINE_ARCHETYPE(readable, (
11-
DEFINE_METHOD(int, read, char *, size_t)
10+
ARCHETYPE_DEFINE(readable, (
11+
ARCHETYPE_METHOD(int, read, char *, size_t)
1212
))
1313

14-
DEFINE_ARCHETYPE(testing, (
15-
DEFINE_METHOD(int, test, char *, size_t)
14+
ARCHETYPE_DEFINE(testing, (
15+
ARCHETYPE_METHOD(int, test, char *, size_t)
1616
))
1717

1818

1919

20-
COMPOSE_ARCHETYPE(readwritable, readable, writable)
20+
ARCHETYPE_COMPOSE(readwritable, readable, writable)
2121

22-
COMPOSE_ARCHETYPE(testreadwritable, testing, readwritable)
22+
ARCHETYPE_COMPOSE(testreadwritable, testing, readwritable)
2323

2424

2525

@@ -269,6 +269,23 @@ class C{
269269

270270
int main()
271271
{
272+
273+
if (__cplusplus == 202302L)
274+
std::cout << "C++23";
275+
else if (__cplusplus == 202002L)
276+
std::cout << "C++20";
277+
else if (__cplusplus == 201703L)
278+
std::cout << "C++17";
279+
else if (__cplusplus == 201402L)
280+
std::cout << "C++14";
281+
else if (__cplusplus == 201103L)
282+
std::cout << "C++11";
283+
else if (__cplusplus == 199711L)
284+
std::cout << "C++98";
285+
else
286+
std::cout << "pre-standard C++." << __cplusplus;
287+
std::cout << "\n";
288+
272289
// finder<A>::accessible<archetype::Base> instance;
273290
helper<A>::get_inaccesible<helper<B>::get_inaccesible<>> ab_chain;
274291
archetype::helper<writable>::get<archetype::helper<readable>::get<>> wr_chain;
@@ -288,7 +305,7 @@ int main()
288305

289306
writable::ptr<> wptr;
290307
wptr.bind(w);
291-
wptr->write("asdfasdfasdf", 5);
308+
wptr->write("asdf\n", 5);
292309

293310
readwritable::ptr<> rwptr;
294311
rwptr.bind(crw);

test/full_test.cpp

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
2+
23
#include "archetype/archetype.h"
34
#include <doctest/doctest.h>
45

@@ -56,25 +57,25 @@ struct ACD : public A, public C, public D {};
5657
struct BCD : public B, public C, public D {};
5758

5859
// Archetypes for use in tests
59-
DEFINE_ARCHETYPE(basic_void, (DEFINE_METHOD(void, func0)))
60+
ARCHETYPE_DEFINE(basic_void, (ARCHETYPE_METHOD(void, func0)))
6061

61-
DEFINE_ARCHETYPE(basic_int, (DEFINE_METHOD(int, func0, int)))
62+
ARCHETYPE_DEFINE(basic_int, (ARCHETYPE_METHOD(int, func0, int)))
6263

63-
DEFINE_ARCHETYPE(basic_double, (DEFINE_METHOD(double, func0, double)))
64+
ARCHETYPE_DEFINE(basic_double, (ARCHETYPE_METHOD(double, func0, double)))
6465

65-
DEFINE_ARCHETYPE(basic_multifunc, (DEFINE_METHOD(int, func0, int),
66-
DEFINE_METHOD(double, func1, double)))
66+
ARCHETYPE_DEFINE(basic_multifunc, (ARCHETYPE_METHOD(int, func0, int),
67+
ARCHETYPE_METHOD(double, func1, double)))
6768

68-
DEFINE_ARCHETYPE(basic_overload, (DEFINE_METHOD(int, func0, int),
69-
DEFINE_METHOD(double, func0, double)))
69+
ARCHETYPE_DEFINE(basic_overload, (ARCHETYPE_METHOD(int, func0, int),
70+
ARCHETYPE_METHOD(double, func0, double)))
7071

71-
DEFINE_ARCHETYPE(satisfies_a, (DEFINE_METHOD(void, do_a)))
72-
DEFINE_ARCHETYPE(satisfies_b, (DEFINE_METHOD(int, do_b, int)))
73-
DEFINE_ARCHETYPE(satisfies_c, (DEFINE_METHOD(char, do_c, char)))
74-
DEFINE_ARCHETYPE(satisfies_d, (DEFINE_METHOD(double, do_d, double)))
72+
ARCHETYPE_DEFINE(satisfies_a, (ARCHETYPE_METHOD(void, do_a)))
73+
ARCHETYPE_DEFINE(satisfies_b, (ARCHETYPE_METHOD(int, do_b, int)))
74+
ARCHETYPE_DEFINE(satisfies_c, (ARCHETYPE_METHOD(char, do_c, char)))
75+
ARCHETYPE_DEFINE(satisfies_d, (ARCHETYPE_METHOD(double, do_d, double)))
7576

76-
DEFINE_ARCHETYPE(satisfies_ab_manual,
77-
(DEFINE_METHOD(void, do_a), DEFINE_METHOD(int, do_b, int)))
77+
ARCHETYPE_DEFINE(satisfies_ab_manual,
78+
(ARCHETYPE_METHOD(void, do_a), ARCHETYPE_METHOD(int, do_b, int)))
7879

7980
TEST_CASE("ARCHETYPE_DEFINE") {
8081

@@ -165,14 +166,14 @@ TEST_CASE("ARCHETYPE_DEFINE") {
165166
}
166167

167168
// Compose them
168-
COMPOSE_ARCHETYPE(satisfies_ab, satisfies_a, satisfies_b)
169-
COMPOSE_ARCHETYPE(satisfies_ac, satisfies_a, satisfies_c)
170-
COMPOSE_ARCHETYPE(satisfies_ad, satisfies_a, satisfies_d)
169+
ARCHETYPE_COMPOSE(satisfies_ab, satisfies_a, satisfies_b)
170+
ARCHETYPE_COMPOSE(satisfies_ac, satisfies_a, satisfies_c)
171+
ARCHETYPE_COMPOSE(satisfies_ad, satisfies_a, satisfies_d)
171172

172173
// Multilevel composition
173-
COMPOSE_ARCHETYPE(satisfies_abc, satisfies_ab,
174+
ARCHETYPE_COMPOSE(satisfies_abc, satisfies_ab,
174175
satisfies_c) // compose invoked twice
175-
COMPOSE_ARCHETYPE(satisfies_abcd, satisfies_abc,
176+
ARCHETYPE_COMPOSE(satisfies_abcd, satisfies_abc,
176177
satisfies_d) // compose invoked three times
177178

178179
TEST_CASE("ARCHETYPE_COMPOSE") {

test/macro_test.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22
#include <iostream>
33
#include <vector>
44

5-
DEFINE_ARCHETYPE(basic_overload, (DEFINE_METHOD(int, func0, int),
6-
DEFINE_METHOD(double, func0, double)))
5+
ARCHETYPE_DEFINE(basic_overload, (ARCHETYPE_METHOD(int, func0, int),
6+
ARCHETYPE_METHOD(double, func0, double)))
77

8-
DEFINE_ARCHETYPE(satisfies_a, (DEFINE_METHOD(void, do_a)))
9-
DEFINE_ARCHETYPE(satisfies_b, (DEFINE_METHOD(int, do_b, int)))
10-
DEFINE_ARCHETYPE(satisfies_c, (DEFINE_METHOD(char, do_c, char)))
11-
DEFINE_ARCHETYPE(satisfies_d, (DEFINE_METHOD(double, do_d, double)))
8+
ARCHETYPE_DEFINE(satisfies_a, (ARCHETYPE_METHOD(void, do_a)))
9+
ARCHETYPE_DEFINE(satisfies_b, (ARCHETYPE_METHOD(int, do_b, int)))
10+
ARCHETYPE_DEFINE(satisfies_c, (ARCHETYPE_METHOD(char, do_c, char)))
11+
ARCHETYPE_DEFINE(satisfies_d, (ARCHETYPE_METHOD(double, do_d, double)))
1212

13-
DEFINE_ARCHETYPE(satisfies_ab_manual,
14-
(DEFINE_METHOD(void, do_a), DEFINE_METHOD(int, do_b, int)))
13+
ARCHETYPE_DEFINE(satisfies_ab_manual,
14+
(ARCHETYPE_METHOD(void, do_a), ARCHETYPE_METHOD(int, do_b, int)))
1515

16-
COMPOSE_ARCHETYPE(satisfies_ab, satisfies_a, satisfies_b)
17-
COMPOSE_ARCHETYPE(satisfies_ad, satisfies_a, satisfies_d)
16+
ARCHETYPE_COMPOSE(satisfies_ab, satisfies_a, satisfies_b)
17+
ARCHETYPE_COMPOSE(satisfies_ad, satisfies_a, satisfies_d)
1818

19-
COMPOSE_ARCHETYPE(satisfies_abc_alt, satisfies_ab, satisfies_c)
19+
ARCHETYPE_COMPOSE(satisfies_abc_alt, satisfies_ab, satisfies_c)
2020

2121
struct A {
2222
void do_a(void) {}

0 commit comments

Comments
 (0)