Skip to content
This repository has been archived by the owner on Dec 5, 2019. It is now read-only.

Commit

Permalink
Rewrote metamacro_inc() and metamacro_dec() in terms of metamacro_at()
Browse files Browse the repository at this point in the history
  • Loading branch information
jspahrsummers committed Jun 23, 2012
1 parent 8108f93 commit aa40e08
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 48 deletions.
52 changes: 4 additions & 48 deletions include/metamacros.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,22 +134,22 @@
metamacro_concat(metamacro_drop, N)(__VA_ARGS__)

/**
* Decrements VAL, which must be a number between one and twenty, inclusive.
* Decrements VAL, which must be a number between zero and twenty, inclusive.
*
* This is primarily useful when dealing with indexes and counts in
* metaprogramming.
*/
#define metamacro_dec(VAL) \
metamacro_concat(metamacro_dec, VAL)
metamacro_at(VAL, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)

/**
* Increments VAL, which must be a number between zero and nineteen, inclusive.
* Increments VAL, which must be a number between zero and twenty, inclusive.
*
* This is primarily useful when dealing with indexes and counts in
* metaprogramming.
*/
#define metamacro_inc(VAL) \
metamacro_concat(metamacro_inc, VAL)
metamacro_at(VAL, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)

/**
* If A is equal to B, the next argument list is expanded; otherwise, the
Expand Down Expand Up @@ -522,50 +522,6 @@ metamacro_if_eq(0, 1)(true)(false)
SEP \
MACRO(19, CONTEXT)

// metamacro_dec expansions
#define metamacro_dec1 0
#define metamacro_dec2 1
#define metamacro_dec3 2
#define metamacro_dec4 3
#define metamacro_dec5 4
#define metamacro_dec6 5
#define metamacro_dec7 6
#define metamacro_dec8 7
#define metamacro_dec9 8
#define metamacro_dec10 9
#define metamacro_dec11 10
#define metamacro_dec12 11
#define metamacro_dec13 12
#define metamacro_dec14 13
#define metamacro_dec15 14
#define metamacro_dec16 15
#define metamacro_dec17 16
#define metamacro_dec18 17
#define metamacro_dec19 18
#define metamacro_dec20 19

// metamacro_inc expansions
#define metamacro_inc0 1
#define metamacro_inc1 2
#define metamacro_inc2 3
#define metamacro_inc3 4
#define metamacro_inc4 5
#define metamacro_inc5 6
#define metamacro_inc6 7
#define metamacro_inc7 8
#define metamacro_inc8 9
#define metamacro_inc9 10
#define metamacro_inc10 11
#define metamacro_inc11 12
#define metamacro_inc12 13
#define metamacro_inc13 14
#define metamacro_inc14 15
#define metamacro_inc15 16
#define metamacro_inc16 17
#define metamacro_inc17 18
#define metamacro_inc18 19
#define metamacro_inc19 20

// metamacro_if_eq expansions
#define metamacro_if_eq0(VALUE) \
metamacro_concat(metamacro_if_eq0_, VALUE)
Expand Down
2 changes: 2 additions & 0 deletions tests/metamacros_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,12 @@ void metamacros_test (void) {
assert(metamacro_inc(5) == 6);
assert(metamacro_inc(0) == 1);
assert(metamacro_inc(19) == 20);
assert(metamacro_inc(20) == 21);
assert(metamacro_inc(metamacro_inc(5)) == 7);

assert(metamacro_dec(5) == 4);
assert(metamacro_dec(1) == 0);
assert(metamacro_dec(0) == -1);
assert(metamacro_dec(20) == 19);
assert(metamacro_dec(metamacro_dec(5)) == 3);

Expand Down

0 comments on commit aa40e08

Please sign in to comment.