--- a +++ b/Tools/Lib/classtools/MultipleSubTemplates.any @@ -0,0 +1,240 @@ +#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 +