241 lines (230 with data), 8.9 kB
#ifndef TOOLS_LIB_CLASSTOOLS_MULTIPLESUBTEMPLATES_ANY
#define TOOLS_LIB_CLASSTOOLS_MULTIPLESUBTEMPLATES_ANY
/*
---
group: Utilities
topic: Class tools
descr: Utility template for calling an other class template multiple times.
---
Add `#include "<AMMR_TOOLS>/Lib/classtools/MultipleSubTemplates.any"`
To use the class template.
*/
// A generic class template which can call another class template multiple times.
//
// The sub template must follow a specific call signature in its arguments
// to be used with this generic class. Specifically it must have a `IDX`
// argument to receive its index. A number of generic arguments
// `ARG1`, `ARG2`, `ARG3`, `ARG4`, can also be defined to pass from the outer
// to the internal template that is wrapped.
//
// :::{rubric} Usage
// :::
//
// :::{code-block} AnyScript
// /// Template which we want to evoke multiple times
// #class_template SubTemplate (IDX=0, ARG1="", ARG2="", ARG3="", ARG4="") = { };
// };
//
// MultipleSubTemplates WrapSubTemplates(
// NUM=3,
// CLASS_TEMPLATE = "SubTemplate",
// NAME_PREFIX=SubFolder,
// ) = { };
// :::
//
// The example above will create a folder structure like this:
//
// :::{code-block} AnyScript
// WrapSubTemplates = {
// SubFolder_000 = { };
// SubFolder_001 = { };
// SubFolder_002 = { };
// };
// :::
//
#class_template MultipleSubTemplates(
NUM,
CLASS_TEMPLATE,
_PRE="",
NAME_PREFIX=ELEM,
ARG1=0,
ARG2=0,
ARG3=0,
ARG4=0
) {
// Arguments:
// ----------------------
//MultipleSubTemplates#NUM
// Specifies the number of times the sub template should be called.
//MultipleSubTemplates#CLASS_TEMPLATE
// Specifies the name of the sub template to call.
//MultipleSubTemplates#NAME_PREFIX
// Specifies the name prefix of the sub template which will be created. The final name will
// be NAME_PREFIX_000, NAME_PREFIX_001, NAME_PREFIX_002, etc.
//MultipleSubTemplates#ARG1
// A generic argument which will be passed to the sub template.
//MultipleSubTemplates#ARG2
// A generic argument which will be passed to the sub template.
//MultipleSubTemplates#ARG3
// A generic argument which will be passed to the sub template.
//MultipleSubTemplates#ARG4
// A generic argument which will be passed to the sub template.
_PRE##CLASS_TEMPLATE NAME_PREFIX##_000(IDX=0, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#if NUM > 1
_PRE##CLASS_TEMPLATE NAME_PREFIX##_001(IDX=1, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 2
_PRE##CLASS_TEMPLATE NAME_PREFIX##_002(IDX=2, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 3
_PRE##CLASS_TEMPLATE NAME_PREFIX##_003(IDX=3, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 4
_PRE##CLASS_TEMPLATE NAME_PREFIX##_004(IDX=4, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 5
_PRE##CLASS_TEMPLATE NAME_PREFIX##_005(IDX=5, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 6
_PRE##CLASS_TEMPLATE NAME_PREFIX##_006(IDX=6, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 7
_PRE##CLASS_TEMPLATE NAME_PREFIX##_007(IDX=7, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 8
_PRE##CLASS_TEMPLATE NAME_PREFIX##_008(IDX=8, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 9
_PRE##CLASS_TEMPLATE NAME_PREFIX##_009(IDX=9, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 10
_PRE##CLASS_TEMPLATE NAME_PREFIX##_010(IDX=10, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 11
_PRE##CLASS_TEMPLATE NAME_PREFIX##_011(IDX=11, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 12
_PRE##CLASS_TEMPLATE NAME_PREFIX##_012(IDX=12, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 13
_PRE##CLASS_TEMPLATE NAME_PREFIX##_0013(IDX=13, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 14
_PRE##CLASS_TEMPLATE NAME_PREFIX##_014(IDX=14, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 15
_PRE##CLASS_TEMPLATE NAME_PREFIX##_015(IDX=15, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 16
_PRE##CLASS_TEMPLATE NAME_PREFIX##_016(IDX=16, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 17
_PRE##CLASS_TEMPLATE NAME_PREFIX##_017(IDX=17, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 18
_PRE##CLASS_TEMPLATE NAME_PREFIX##_018(IDX=18, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 19
_PRE##CLASS_TEMPLATE NAME_PREFIX##_019(IDX=19, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 20
_PRE##CLASS_TEMPLATE NAME_PREFIX##_020(IDX=20, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 21
_PRE##CLASS_TEMPLATE NAME_PREFIX##_021(IDX=21, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 22
_PRE##CLASS_TEMPLATE NAME_PREFIX##_022(IDX=22, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 23
_PRE##CLASS_TEMPLATE NAME_PREFIX##_023(IDX=23, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 24
_PRE##CLASS_TEMPLATE NAME_PREFIX##_024(IDX=24, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 25
_PRE##CLASS_TEMPLATE NAME_PREFIX##_025(IDX=25, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 26
_PRE##CLASS_TEMPLATE NAME_PREFIX##_026(IDX=26, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 27
_PRE##CLASS_TEMPLATE NAME_PREFIX##_027(IDX=27, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 28
_PRE##CLASS_TEMPLATE NAME_PREFIX##_028(IDX=28, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 29
_PRE##CLASS_TEMPLATE NAME_PREFIX##_029(IDX=29, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 30
_PRE##CLASS_TEMPLATE NAME_PREFIX##_030(IDX=30, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 31
_PRE##CLASS_TEMPLATE NAME_PREFIX##_031(IDX=31, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 32
_PRE##CLASS_TEMPLATE NAME_PREFIX##_032(IDX=32, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 33
_PRE##CLASS_TEMPLATE NAME_PREFIX##_033(IDX=33, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 34
_PRE##CLASS_TEMPLATE NAME_PREFIX##_034(IDX=34, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 35
_PRE##CLASS_TEMPLATE NAME_PREFIX##_035(IDX=35, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 36
_PRE##CLASS_TEMPLATE NAME_PREFIX##_036(IDX=36, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 37
_PRE##CLASS_TEMPLATE NAME_PREFIX##_037(IDX=37, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 38
_PRE##CLASS_TEMPLATE NAME_PREFIX##_038(IDX=38, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 31
_PRE##CLASS_TEMPLATE NAME_PREFIX##_031(IDX=31, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 39
_PRE##CLASS_TEMPLATE NAME_PREFIX##_039(IDX=39, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 40
_PRE##CLASS_TEMPLATE NAME_PREFIX##_040(IDX=40, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 41
_PRE##CLASS_TEMPLATE NAME_PREFIX##_041(IDX=41, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 42
_PRE##CLASS_TEMPLATE NAME_PREFIX##_042(IDX=42, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 43
_PRE##CLASS_TEMPLATE NAME_PREFIX##_043(IDX=43, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 44
_PRE##CLASS_TEMPLATE NAME_PREFIX##_044(IDX=44, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 45
_PRE##CLASS_TEMPLATE NAME_PREFIX##_045(IDX=45, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 46
_PRE##CLASS_TEMPLATE NAME_PREFIX##_046(IDX=46, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 47
_PRE##CLASS_TEMPLATE NAME_PREFIX##_047(IDX=47, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 48
_PRE##CLASS_TEMPLATE NAME_PREFIX##_048(IDX=48, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 49
_PRE##CLASS_TEMPLATE NAME_PREFIX##_049(IDX=49, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 50
_PRE##CLASS_TEMPLATE NAME_PREFIX##_050(IDX=50, ARG1=ARG1,ARG2=ARG2,ARG3=ARG3,ARG4=ARG4) = {};
#endif
#if NUM > 51
#ERROR_Not_implemented_for_more_than_50_elements
#endif
};
#endif