Skip to content

Commit 398167f

Browse files
committed
Reduced C++ 98 macros verbosity by combining then with each other
1 parent 2f9335a commit 398167f

File tree

1 file changed

+123
-75
lines changed

1 file changed

+123
-75
lines changed

tinyformat.h

Lines changed: 123 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -389,102 +389,150 @@ TINYFORMAT_DEFINE_FORMATVALUE_CHAR(unsigned char)
389389
// extra versions by hand.
390390

391391
/*[[[cog
392-
maxParams = 16
392+
maxParams = 24
393393
394394
def makeCommaSepLists(lineTemplate, elemTemplate, startInd=1):
395-
for j in range(startInd,maxParams+1):
396-
list = ', '.join([elemTemplate % {'i':i} for i in range(startInd,j+1)])
397-
cog.outl(lineTemplate % {'j':j, 'list':list})
395+
for line in range(startInd,maxParams+1):
396+
elements = elemTemplate % { 'last': line - 1, 'line': line }
397+
cog.outl(lineTemplate % {'line': line, 'list': elements})
398398
399-
makeCommaSepLists('#define TINYFORMAT_ARGTYPES_%(j)d %(list)s',
400-
'class T%(i)d')
399+
cog.outl()
400+
cog.outl('#define TINYFORMAT_ARGTYPES_1 typename T1')
401+
makeCommaSepLists('#define TINYFORMAT_ARGTYPES_%(line)d %(list)s',
402+
'TINYFORMAT_ARGTYPES_%(last)d, typename T%(line)d',
403+
startInd = 2)
401404
402405
cog.outl()
403-
makeCommaSepLists('#define TINYFORMAT_VARARGS_%(j)d %(list)s',
404-
'const T%(i)d& v%(i)d')
406+
cog.outl('#define TINYFORMAT_VARARGS_1 const T1& v1')
407+
makeCommaSepLists('#define TINYFORMAT_VARARGS_%(line)d %(list)s',
408+
'TINYFORMAT_VARARGS_%(last)d, const T%(line)d& v%(line)d',
409+
startInd = 2)
405410
406411
cog.outl()
407-
makeCommaSepLists('#define TINYFORMAT_PASSARGS_%(j)d %(list)s', 'v%(i)d')
412+
cog.outl('#define TINYFORMAT_PASSARGS_1 v1')
413+
makeCommaSepLists('#define TINYFORMAT_PASSARGS_%(line)d %(list)s',
414+
'TINYFORMAT_PASSARGS_%(last)d, v%(line)d',
415+
startInd = 2)
408416
409417
cog.outl()
410418
cog.outl('#define TINYFORMAT_PASSARGS_TAIL_1')
411-
makeCommaSepLists('#define TINYFORMAT_PASSARGS_TAIL_%(j)d , %(list)s',
412-
'v%(i)d', startInd = 2)
419+
makeCommaSepLists('#define TINYFORMAT_PASSARGS_TAIL_%(line)d %(list)s',
420+
'TINYFORMAT_PASSARGS_TAIL_%(last)d, v%(line)d',
421+
startInd = 2)
422+
423+
lines = []
424+
newline = " \\\n "
425+
for line in range(1,maxParams+1):
426+
lines.append(' m(%d)' % (line,))
427+
if line % 15 == 0: lines.append(newline)
413428
414429
cog.outl()
415-
cog.outl('#define TINYFORMAT_FOREACH_ARGNUM(m) \\\n ' +
416-
' '.join(['m(%d)' % (j,) for j in range(1,maxParams+1)]))
430+
cog.outl('#define TINYFORMAT_FOREACH_ARGNUM(m)' + newline + ''.join(lines))
417431
]]]*/
418-
#define TINYFORMAT_ARGTYPES_1 class T1
419-
#define TINYFORMAT_ARGTYPES_2 class T1, class T2
420-
#define TINYFORMAT_ARGTYPES_3 class T1, class T2, class T3
421-
#define TINYFORMAT_ARGTYPES_4 class T1, class T2, class T3, class T4
422-
#define TINYFORMAT_ARGTYPES_5 class T1, class T2, class T3, class T4, class T5
423-
#define TINYFORMAT_ARGTYPES_6 class T1, class T2, class T3, class T4, class T5, class T6
424-
#define TINYFORMAT_ARGTYPES_7 class T1, class T2, class T3, class T4, class T5, class T6, class T7
425-
#define TINYFORMAT_ARGTYPES_8 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8
426-
#define TINYFORMAT_ARGTYPES_9 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9
427-
#define TINYFORMAT_ARGTYPES_10 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10
428-
#define TINYFORMAT_ARGTYPES_11 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11
429-
#define TINYFORMAT_ARGTYPES_12 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12
430-
#define TINYFORMAT_ARGTYPES_13 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13
431-
#define TINYFORMAT_ARGTYPES_14 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14
432-
#define TINYFORMAT_ARGTYPES_15 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15
433-
#define TINYFORMAT_ARGTYPES_16 class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16
432+
433+
#define TINYFORMAT_ARGTYPES_1 typename T1
434+
#define TINYFORMAT_ARGTYPES_2 TINYFORMAT_ARGTYPES_1, typename T2
435+
#define TINYFORMAT_ARGTYPES_3 TINYFORMAT_ARGTYPES_2, typename T3
436+
#define TINYFORMAT_ARGTYPES_4 TINYFORMAT_ARGTYPES_3, typename T4
437+
#define TINYFORMAT_ARGTYPES_5 TINYFORMAT_ARGTYPES_4, typename T5
438+
#define TINYFORMAT_ARGTYPES_6 TINYFORMAT_ARGTYPES_5, typename T6
439+
#define TINYFORMAT_ARGTYPES_7 TINYFORMAT_ARGTYPES_6, typename T7
440+
#define TINYFORMAT_ARGTYPES_8 TINYFORMAT_ARGTYPES_7, typename T8
441+
#define TINYFORMAT_ARGTYPES_9 TINYFORMAT_ARGTYPES_8, typename T9
442+
#define TINYFORMAT_ARGTYPES_10 TINYFORMAT_ARGTYPES_9, typename T10
443+
#define TINYFORMAT_ARGTYPES_11 TINYFORMAT_ARGTYPES_10, typename T11
444+
#define TINYFORMAT_ARGTYPES_12 TINYFORMAT_ARGTYPES_11, typename T12
445+
#define TINYFORMAT_ARGTYPES_13 TINYFORMAT_ARGTYPES_12, typename T13
446+
#define TINYFORMAT_ARGTYPES_14 TINYFORMAT_ARGTYPES_13, typename T14
447+
#define TINYFORMAT_ARGTYPES_15 TINYFORMAT_ARGTYPES_14, typename T15
448+
#define TINYFORMAT_ARGTYPES_16 TINYFORMAT_ARGTYPES_15, typename T16
449+
#define TINYFORMAT_ARGTYPES_17 TINYFORMAT_ARGTYPES_16, typename T17
450+
#define TINYFORMAT_ARGTYPES_18 TINYFORMAT_ARGTYPES_17, typename T18
451+
#define TINYFORMAT_ARGTYPES_19 TINYFORMAT_ARGTYPES_18, typename T19
452+
#define TINYFORMAT_ARGTYPES_20 TINYFORMAT_ARGTYPES_19, typename T20
453+
#define TINYFORMAT_ARGTYPES_21 TINYFORMAT_ARGTYPES_20, typename T21
454+
#define TINYFORMAT_ARGTYPES_22 TINYFORMAT_ARGTYPES_21, typename T22
455+
#define TINYFORMAT_ARGTYPES_23 TINYFORMAT_ARGTYPES_22, typename T23
456+
#define TINYFORMAT_ARGTYPES_24 TINYFORMAT_ARGTYPES_23, typename T24
434457

435458
#define TINYFORMAT_VARARGS_1 const T1& v1
436-
#define TINYFORMAT_VARARGS_2 const T1& v1, const T2& v2
437-
#define TINYFORMAT_VARARGS_3 const T1& v1, const T2& v2, const T3& v3
438-
#define TINYFORMAT_VARARGS_4 const T1& v1, const T2& v2, const T3& v3, const T4& v4
439-
#define TINYFORMAT_VARARGS_5 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5
440-
#define TINYFORMAT_VARARGS_6 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6
441-
#define TINYFORMAT_VARARGS_7 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7
442-
#define TINYFORMAT_VARARGS_8 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8
443-
#define TINYFORMAT_VARARGS_9 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9
444-
#define TINYFORMAT_VARARGS_10 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10
445-
#define TINYFORMAT_VARARGS_11 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11
446-
#define TINYFORMAT_VARARGS_12 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12
447-
#define TINYFORMAT_VARARGS_13 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13
448-
#define TINYFORMAT_VARARGS_14 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13, const T14& v14
449-
#define TINYFORMAT_VARARGS_15 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13, const T14& v14, const T15& v15
450-
#define TINYFORMAT_VARARGS_16 const T1& v1, const T2& v2, const T3& v3, const T4& v4, const T5& v5, const T6& v6, const T7& v7, const T8& v8, const T9& v9, const T10& v10, const T11& v11, const T12& v12, const T13& v13, const T14& v14, const T15& v15, const T16& v16
459+
#define TINYFORMAT_VARARGS_2 TINYFORMAT_VARARGS_1, const T2& v2
460+
#define TINYFORMAT_VARARGS_3 TINYFORMAT_VARARGS_2, const T3& v3
461+
#define TINYFORMAT_VARARGS_4 TINYFORMAT_VARARGS_3, const T4& v4
462+
#define TINYFORMAT_VARARGS_5 TINYFORMAT_VARARGS_4, const T5& v5
463+
#define TINYFORMAT_VARARGS_6 TINYFORMAT_VARARGS_5, const T6& v6
464+
#define TINYFORMAT_VARARGS_7 TINYFORMAT_VARARGS_6, const T7& v7
465+
#define TINYFORMAT_VARARGS_8 TINYFORMAT_VARARGS_7, const T8& v8
466+
#define TINYFORMAT_VARARGS_9 TINYFORMAT_VARARGS_8, const T9& v9
467+
#define TINYFORMAT_VARARGS_10 TINYFORMAT_VARARGS_9, const T10& v10
468+
#define TINYFORMAT_VARARGS_11 TINYFORMAT_VARARGS_10, const T11& v11
469+
#define TINYFORMAT_VARARGS_12 TINYFORMAT_VARARGS_11, const T12& v12
470+
#define TINYFORMAT_VARARGS_13 TINYFORMAT_VARARGS_12, const T13& v13
471+
#define TINYFORMAT_VARARGS_14 TINYFORMAT_VARARGS_13, const T14& v14
472+
#define TINYFORMAT_VARARGS_15 TINYFORMAT_VARARGS_14, const T15& v15
473+
#define TINYFORMAT_VARARGS_16 TINYFORMAT_VARARGS_15, const T16& v16
474+
#define TINYFORMAT_VARARGS_17 TINYFORMAT_VARARGS_16, const T17& v17
475+
#define TINYFORMAT_VARARGS_18 TINYFORMAT_VARARGS_17, const T18& v18
476+
#define TINYFORMAT_VARARGS_19 TINYFORMAT_VARARGS_18, const T19& v19
477+
#define TINYFORMAT_VARARGS_20 TINYFORMAT_VARARGS_19, const T20& v20
478+
#define TINYFORMAT_VARARGS_21 TINYFORMAT_VARARGS_20, const T21& v21
479+
#define TINYFORMAT_VARARGS_22 TINYFORMAT_VARARGS_21, const T22& v22
480+
#define TINYFORMAT_VARARGS_23 TINYFORMAT_VARARGS_22, const T23& v23
481+
#define TINYFORMAT_VARARGS_24 TINYFORMAT_VARARGS_23, const T24& v24
451482

452483
#define TINYFORMAT_PASSARGS_1 v1
453-
#define TINYFORMAT_PASSARGS_2 v1, v2
454-
#define TINYFORMAT_PASSARGS_3 v1, v2, v3
455-
#define TINYFORMAT_PASSARGS_4 v1, v2, v3, v4
456-
#define TINYFORMAT_PASSARGS_5 v1, v2, v3, v4, v5
457-
#define TINYFORMAT_PASSARGS_6 v1, v2, v3, v4, v5, v6
458-
#define TINYFORMAT_PASSARGS_7 v1, v2, v3, v4, v5, v6, v7
459-
#define TINYFORMAT_PASSARGS_8 v1, v2, v3, v4, v5, v6, v7, v8
460-
#define TINYFORMAT_PASSARGS_9 v1, v2, v3, v4, v5, v6, v7, v8, v9
461-
#define TINYFORMAT_PASSARGS_10 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10
462-
#define TINYFORMAT_PASSARGS_11 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11
463-
#define TINYFORMAT_PASSARGS_12 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12
464-
#define TINYFORMAT_PASSARGS_13 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13
465-
#define TINYFORMAT_PASSARGS_14 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14
466-
#define TINYFORMAT_PASSARGS_15 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15
467-
#define TINYFORMAT_PASSARGS_16 v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16
484+
#define TINYFORMAT_PASSARGS_2 TINYFORMAT_PASSARGS_1, v2
485+
#define TINYFORMAT_PASSARGS_3 TINYFORMAT_PASSARGS_2, v3
486+
#define TINYFORMAT_PASSARGS_4 TINYFORMAT_PASSARGS_3, v4
487+
#define TINYFORMAT_PASSARGS_5 TINYFORMAT_PASSARGS_4, v5
488+
#define TINYFORMAT_PASSARGS_6 TINYFORMAT_PASSARGS_5, v6
489+
#define TINYFORMAT_PASSARGS_7 TINYFORMAT_PASSARGS_6, v7
490+
#define TINYFORMAT_PASSARGS_8 TINYFORMAT_PASSARGS_7, v8
491+
#define TINYFORMAT_PASSARGS_9 TINYFORMAT_PASSARGS_8, v9
492+
#define TINYFORMAT_PASSARGS_10 TINYFORMAT_PASSARGS_9, v10
493+
#define TINYFORMAT_PASSARGS_11 TINYFORMAT_PASSARGS_10, v11
494+
#define TINYFORMAT_PASSARGS_12 TINYFORMAT_PASSARGS_11, v12
495+
#define TINYFORMAT_PASSARGS_13 TINYFORMAT_PASSARGS_12, v13
496+
#define TINYFORMAT_PASSARGS_14 TINYFORMAT_PASSARGS_13, v14
497+
#define TINYFORMAT_PASSARGS_15 TINYFORMAT_PASSARGS_14, v15
498+
#define TINYFORMAT_PASSARGS_16 TINYFORMAT_PASSARGS_15, v16
499+
#define TINYFORMAT_PASSARGS_17 TINYFORMAT_PASSARGS_16, v17
500+
#define TINYFORMAT_PASSARGS_18 TINYFORMAT_PASSARGS_17, v18
501+
#define TINYFORMAT_PASSARGS_19 TINYFORMAT_PASSARGS_18, v19
502+
#define TINYFORMAT_PASSARGS_20 TINYFORMAT_PASSARGS_19, v20
503+
#define TINYFORMAT_PASSARGS_21 TINYFORMAT_PASSARGS_20, v21
504+
#define TINYFORMAT_PASSARGS_22 TINYFORMAT_PASSARGS_21, v22
505+
#define TINYFORMAT_PASSARGS_23 TINYFORMAT_PASSARGS_22, v23
506+
#define TINYFORMAT_PASSARGS_24 TINYFORMAT_PASSARGS_23, v24
468507

469508
#define TINYFORMAT_PASSARGS_TAIL_1
470-
#define TINYFORMAT_PASSARGS_TAIL_2 , v2
471-
#define TINYFORMAT_PASSARGS_TAIL_3 , v2, v3
472-
#define TINYFORMAT_PASSARGS_TAIL_4 , v2, v3, v4
473-
#define TINYFORMAT_PASSARGS_TAIL_5 , v2, v3, v4, v5
474-
#define TINYFORMAT_PASSARGS_TAIL_6 , v2, v3, v4, v5, v6
475-
#define TINYFORMAT_PASSARGS_TAIL_7 , v2, v3, v4, v5, v6, v7
476-
#define TINYFORMAT_PASSARGS_TAIL_8 , v2, v3, v4, v5, v6, v7, v8
477-
#define TINYFORMAT_PASSARGS_TAIL_9 , v2, v3, v4, v5, v6, v7, v8, v9
478-
#define TINYFORMAT_PASSARGS_TAIL_10 , v2, v3, v4, v5, v6, v7, v8, v9, v10
479-
#define TINYFORMAT_PASSARGS_TAIL_11 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11
480-
#define TINYFORMAT_PASSARGS_TAIL_12 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12
481-
#define TINYFORMAT_PASSARGS_TAIL_13 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13
482-
#define TINYFORMAT_PASSARGS_TAIL_14 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14
483-
#define TINYFORMAT_PASSARGS_TAIL_15 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15
484-
#define TINYFORMAT_PASSARGS_TAIL_16 , v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16
509+
#define TINYFORMAT_PASSARGS_TAIL_2 TINYFORMAT_PASSARGS_TAIL_1, v2
510+
#define TINYFORMAT_PASSARGS_TAIL_3 TINYFORMAT_PASSARGS_TAIL_2, v3
511+
#define TINYFORMAT_PASSARGS_TAIL_4 TINYFORMAT_PASSARGS_TAIL_3, v4
512+
#define TINYFORMAT_PASSARGS_TAIL_5 TINYFORMAT_PASSARGS_TAIL_4, v5
513+
#define TINYFORMAT_PASSARGS_TAIL_6 TINYFORMAT_PASSARGS_TAIL_5, v6
514+
#define TINYFORMAT_PASSARGS_TAIL_7 TINYFORMAT_PASSARGS_TAIL_6, v7
515+
#define TINYFORMAT_PASSARGS_TAIL_8 TINYFORMAT_PASSARGS_TAIL_7, v8
516+
#define TINYFORMAT_PASSARGS_TAIL_9 TINYFORMAT_PASSARGS_TAIL_8, v9
517+
#define TINYFORMAT_PASSARGS_TAIL_10 TINYFORMAT_PASSARGS_TAIL_9, v10
518+
#define TINYFORMAT_PASSARGS_TAIL_11 TINYFORMAT_PASSARGS_TAIL_10, v11
519+
#define TINYFORMAT_PASSARGS_TAIL_12 TINYFORMAT_PASSARGS_TAIL_11, v12
520+
#define TINYFORMAT_PASSARGS_TAIL_13 TINYFORMAT_PASSARGS_TAIL_12, v13
521+
#define TINYFORMAT_PASSARGS_TAIL_14 TINYFORMAT_PASSARGS_TAIL_13, v14
522+
#define TINYFORMAT_PASSARGS_TAIL_15 TINYFORMAT_PASSARGS_TAIL_14, v15
523+
#define TINYFORMAT_PASSARGS_TAIL_16 TINYFORMAT_PASSARGS_TAIL_15, v16
524+
#define TINYFORMAT_PASSARGS_TAIL_17 TINYFORMAT_PASSARGS_TAIL_16, v17
525+
#define TINYFORMAT_PASSARGS_TAIL_18 TINYFORMAT_PASSARGS_TAIL_17, v18
526+
#define TINYFORMAT_PASSARGS_TAIL_19 TINYFORMAT_PASSARGS_TAIL_18, v19
527+
#define TINYFORMAT_PASSARGS_TAIL_20 TINYFORMAT_PASSARGS_TAIL_19, v20
528+
#define TINYFORMAT_PASSARGS_TAIL_21 TINYFORMAT_PASSARGS_TAIL_20, v21
529+
#define TINYFORMAT_PASSARGS_TAIL_22 TINYFORMAT_PASSARGS_TAIL_21, v22
530+
#define TINYFORMAT_PASSARGS_TAIL_23 TINYFORMAT_PASSARGS_TAIL_22, v23
531+
#define TINYFORMAT_PASSARGS_TAIL_24 TINYFORMAT_PASSARGS_TAIL_23, v24
485532

486533
#define TINYFORMAT_FOREACH_ARGNUM(m) \
487-
m(1) m(2) m(3) m(4) m(5) m(6) m(7) m(8) m(9) m(10) m(11) m(12) m(13) m(14) m(15) m(16)
534+
m(1) m(2) m(3) m(4) m(5) m(6) m(7) m(8) m(9) m(10) m(11) m(12) m(13) m(14) m(15) \
535+
m(16) m(17) m(18) m(19) m(20) m(21) m(22) m(23) m(24)
488536
//[[[end]]]
489537

490538

0 commit comments

Comments
 (0)