00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __PLCORE_FUNC_CONSTRUCTOR_H__
00024 #define __PLCORE_FUNC_CONSTRUCTOR_H__
00025 #pragma once
00026
00027
00028
00029
00030
00031 #include "PLCore/Base/Func/Func.h"
00032
00033
00034
00035
00036
00037 namespace PLCore {
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 template <typename CLASS, typename T0 = NullType, typename T1 = NullType, typename T2 = NullType, typename T3 = NullType, typename T4 = NullType, typename T5 = NullType, typename T6 = NullType, typename T7 = NullType, typename T8 = NullType, typename T9 = NullType, typename T10 = NullType, typename T11 = NullType, typename T12 = NullType, typename T13 = NullType, typename T14 = NullType, typename T15 = NullType>
00051 class FuncConstructor : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> {
00052 public:
00053 typedef typename Type<T0> ::_Type _T0;
00054 typedef typename Type<T1> ::_Type _T1;
00055 typedef typename Type<T2> ::_Type _T2;
00056 typedef typename Type<T3> ::_Type _T3;
00057 typedef typename Type<T4> ::_Type _T4;
00058 typedef typename Type<T5> ::_Type _T5;
00059 typedef typename Type<T6> ::_Type _T6;
00060 typedef typename Type<T7> ::_Type _T7;
00061 typedef typename Type<T8> ::_Type _T8;
00062 typedef typename Type<T9> ::_Type _T9;
00063 typedef typename Type<T10>::_Type _T10;
00064 typedef typename Type<T11>::_Type _T11;
00065 typedef typename Type<T12>::_Type _T12;
00066 typedef typename Type<T13>::_Type _T13;
00067 typedef typename Type<T14>::_Type _T14;
00068 typedef typename Type<T15>::_Type _T15;
00069
00070 FuncConstructor() {
00071 }
00072
00073 virtual ~FuncConstructor() {
00074 }
00075
00076 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13, _T14 t14, _T15 t15) {
00077 return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
00078 }
00079
00080 virtual DynFunc *Clone() const override {
00081 return new FuncConstructor();
00082 }
00083 };
00084
00085
00086
00087
00088
00089
00090
00091
00092 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
00093 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> {
00094 public:
00095 typedef typename Type<T0> ::_Type _T0;
00096 typedef typename Type<T1> ::_Type _T1;
00097 typedef typename Type<T2> ::_Type _T2;
00098 typedef typename Type<T3> ::_Type _T3;
00099 typedef typename Type<T4> ::_Type _T4;
00100 typedef typename Type<T5> ::_Type _T5;
00101 typedef typename Type<T6> ::_Type _T6;
00102 typedef typename Type<T7> ::_Type _T7;
00103 typedef typename Type<T8> ::_Type _T8;
00104 typedef typename Type<T9> ::_Type _T9;
00105 typedef typename Type<T10>::_Type _T10;
00106 typedef typename Type<T11>::_Type _T11;
00107 typedef typename Type<T12>::_Type _T12;
00108 typedef typename Type<T13>::_Type _T13;
00109 typedef typename Type<T14>::_Type _T14;
00110
00111 FuncConstructor() {
00112 }
00113
00114 virtual ~FuncConstructor() {
00115 }
00116
00117 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13, _T14 t14) {
00118 return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
00119 }
00120
00121 virtual DynFunc *Clone() const override {
00122 return new FuncConstructor();
00123 }
00124 };
00125
00126
00127
00128
00129
00130
00131
00132
00133 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
00134 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> {
00135 public:
00136 typedef typename Type<T0> ::_Type _T0;
00137 typedef typename Type<T1> ::_Type _T1;
00138 typedef typename Type<T2> ::_Type _T2;
00139 typedef typename Type<T3> ::_Type _T3;
00140 typedef typename Type<T4> ::_Type _T4;
00141 typedef typename Type<T5> ::_Type _T5;
00142 typedef typename Type<T6> ::_Type _T6;
00143 typedef typename Type<T7> ::_Type _T7;
00144 typedef typename Type<T8> ::_Type _T8;
00145 typedef typename Type<T9> ::_Type _T9;
00146 typedef typename Type<T10>::_Type _T10;
00147 typedef typename Type<T11>::_Type _T11;
00148 typedef typename Type<T12>::_Type _T12;
00149 typedef typename Type<T13>::_Type _T13;
00150
00151 FuncConstructor() {
00152 }
00153
00154 virtual ~FuncConstructor() {
00155 }
00156
00157 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13) {
00158 return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
00159 }
00160
00161 virtual DynFunc *Clone() const override {
00162 return new FuncConstructor();
00163 }
00164 };
00165
00166
00167
00168
00169
00170
00171
00172
00173 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
00174 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> {
00175 public:
00176 typedef typename Type<T0> ::_Type _T0;
00177 typedef typename Type<T1> ::_Type _T1;
00178 typedef typename Type<T2> ::_Type _T2;
00179 typedef typename Type<T3> ::_Type _T3;
00180 typedef typename Type<T4> ::_Type _T4;
00181 typedef typename Type<T5> ::_Type _T5;
00182 typedef typename Type<T6> ::_Type _T6;
00183 typedef typename Type<T7> ::_Type _T7;
00184 typedef typename Type<T8> ::_Type _T8;
00185 typedef typename Type<T9> ::_Type _T9;
00186 typedef typename Type<T10>::_Type _T10;
00187 typedef typename Type<T11>::_Type _T11;
00188 typedef typename Type<T12>::_Type _T12;
00189
00190 FuncConstructor() {
00191 }
00192
00193 virtual ~FuncConstructor() {
00194 }
00195
00196 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12) {
00197 return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
00198 }
00199
00200 virtual DynFunc *Clone() const override {
00201 return new FuncConstructor();
00202 }
00203 };
00204
00205
00206
00207
00208
00209
00210
00211
00212 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
00213 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> {
00214 public:
00215 typedef typename Type<T0> ::_Type _T0;
00216 typedef typename Type<T1> ::_Type _T1;
00217 typedef typename Type<T2> ::_Type _T2;
00218 typedef typename Type<T3> ::_Type _T3;
00219 typedef typename Type<T4> ::_Type _T4;
00220 typedef typename Type<T5> ::_Type _T5;
00221 typedef typename Type<T6> ::_Type _T6;
00222 typedef typename Type<T7> ::_Type _T7;
00223 typedef typename Type<T8> ::_Type _T8;
00224 typedef typename Type<T9> ::_Type _T9;
00225 typedef typename Type<T10>::_Type _T10;
00226 typedef typename Type<T11>::_Type _T11;
00227
00228 FuncConstructor() {
00229 }
00230
00231 virtual ~FuncConstructor() {
00232 }
00233
00234 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11) {
00235 return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
00236 }
00237
00238 virtual DynFunc *Clone() const override {
00239 return new FuncConstructor();
00240 }
00241 };
00242
00243
00244
00245
00246
00247
00248
00249
00250 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
00251 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> {
00252 public:
00253 typedef typename Type<T0> ::_Type _T0;
00254 typedef typename Type<T1> ::_Type _T1;
00255 typedef typename Type<T2> ::_Type _T2;
00256 typedef typename Type<T3> ::_Type _T3;
00257 typedef typename Type<T4> ::_Type _T4;
00258 typedef typename Type<T5> ::_Type _T5;
00259 typedef typename Type<T6> ::_Type _T6;
00260 typedef typename Type<T7> ::_Type _T7;
00261 typedef typename Type<T8> ::_Type _T8;
00262 typedef typename Type<T9> ::_Type _T9;
00263 typedef typename Type<T10>::_Type _T10;
00264
00265 FuncConstructor() {
00266 }
00267
00268 virtual ~FuncConstructor() {
00269 }
00270
00271 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10) {
00272 return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
00273 }
00274
00275 virtual DynFunc *Clone() const override {
00276 return new FuncConstructor();
00277 }
00278 };
00279
00280
00281
00282
00283
00284
00285
00286
00287 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
00288 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> {
00289 public:
00290 typedef typename Type<T0> ::_Type _T0;
00291 typedef typename Type<T1> ::_Type _T1;
00292 typedef typename Type<T2> ::_Type _T2;
00293 typedef typename Type<T3> ::_Type _T3;
00294 typedef typename Type<T4> ::_Type _T4;
00295 typedef typename Type<T5> ::_Type _T5;
00296 typedef typename Type<T6> ::_Type _T6;
00297 typedef typename Type<T7> ::_Type _T7;
00298 typedef typename Type<T8> ::_Type _T8;
00299 typedef typename Type<T9> ::_Type _T9;
00300
00301 FuncConstructor() {
00302 }
00303
00304 virtual ~FuncConstructor() {
00305 }
00306
00307 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9) {
00308 return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
00309 }
00310
00311 virtual DynFunc *Clone() const override {
00312 return new FuncConstructor();
00313 }
00314 };
00315
00316
00317
00318
00319
00320
00321
00322
00323 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
00324 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8> {
00325 public:
00326 typedef typename Type<T0> ::_Type _T0;
00327 typedef typename Type<T1> ::_Type _T1;
00328 typedef typename Type<T2> ::_Type _T2;
00329 typedef typename Type<T3> ::_Type _T3;
00330 typedef typename Type<T4> ::_Type _T4;
00331 typedef typename Type<T5> ::_Type _T5;
00332 typedef typename Type<T6> ::_Type _T6;
00333 typedef typename Type<T7> ::_Type _T7;
00334 typedef typename Type<T8> ::_Type _T8;
00335
00336 FuncConstructor() {
00337 }
00338
00339 virtual ~FuncConstructor() {
00340 }
00341
00342 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8) {
00343 return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8);
00344 }
00345
00346 virtual DynFunc *Clone() const override {
00347 return new FuncConstructor();
00348 }
00349 };
00350
00351
00352
00353
00354
00355
00356
00357
00358 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
00359 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7> {
00360 public:
00361 typedef typename Type<T0> ::_Type _T0;
00362 typedef typename Type<T1> ::_Type _T1;
00363 typedef typename Type<T2> ::_Type _T2;
00364 typedef typename Type<T3> ::_Type _T3;
00365 typedef typename Type<T4> ::_Type _T4;
00366 typedef typename Type<T5> ::_Type _T5;
00367 typedef typename Type<T6> ::_Type _T6;
00368 typedef typename Type<T7> ::_Type _T7;
00369
00370 FuncConstructor() {
00371 }
00372
00373 virtual ~FuncConstructor() {
00374 }
00375
00376 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7) {
00377 return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7);
00378 }
00379
00380 virtual DynFunc *Clone() const override {
00381 return new FuncConstructor();
00382 }
00383 };
00384
00385
00386
00387
00388
00389
00390
00391
00392 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
00393 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6> {
00394 public:
00395 typedef typename Type<T0> ::_Type _T0;
00396 typedef typename Type<T1> ::_Type _T1;
00397 typedef typename Type<T2> ::_Type _T2;
00398 typedef typename Type<T3> ::_Type _T3;
00399 typedef typename Type<T4> ::_Type _T4;
00400 typedef typename Type<T5> ::_Type _T5;
00401 typedef typename Type<T6> ::_Type _T6;
00402
00403 FuncConstructor() {
00404 }
00405
00406 virtual ~FuncConstructor() {
00407 }
00408
00409 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6) {
00410 return new CLASS(t0, t1, t2, t3, t4, t5, t6);
00411 }
00412
00413 virtual DynFunc *Clone() const override {
00414 return new FuncConstructor();
00415 }
00416 };
00417
00418
00419
00420
00421
00422
00423
00424
00425 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
00426 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5> : public Func<Object*, T0, T1, T2, T3, T4, T5> {
00427 public:
00428 typedef typename Type<T0> ::_Type _T0;
00429 typedef typename Type<T1> ::_Type _T1;
00430 typedef typename Type<T2> ::_Type _T2;
00431 typedef typename Type<T3> ::_Type _T3;
00432 typedef typename Type<T4> ::_Type _T4;
00433 typedef typename Type<T5> ::_Type _T5;
00434
00435 FuncConstructor() {
00436 }
00437
00438 virtual ~FuncConstructor() {
00439 }
00440
00441 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5) {
00442 return new CLASS(t0, t1, t2, t3, t4, t5);
00443 }
00444
00445 virtual DynFunc *Clone() const override {
00446 return new FuncConstructor();
00447 }
00448 };
00449
00450
00451
00452
00453
00454
00455
00456
00457 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4>
00458 class FuncConstructor<CLASS, T0, T1, T2, T3, T4> : public Func<Object*, T0, T1, T2, T3, T4> {
00459 public:
00460 typedef typename Type<T0> ::_Type _T0;
00461 typedef typename Type<T1> ::_Type _T1;
00462 typedef typename Type<T2> ::_Type _T2;
00463 typedef typename Type<T3> ::_Type _T3;
00464 typedef typename Type<T4> ::_Type _T4;
00465
00466 FuncConstructor() {
00467 }
00468
00469 virtual ~FuncConstructor() {
00470 }
00471
00472 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4) {
00473 return new CLASS(t0, t1, t2, t3, t4);
00474 }
00475
00476 virtual DynFunc *Clone() const override {
00477 return new FuncConstructor();
00478 }
00479 };
00480
00481
00482
00483
00484
00485
00486
00487
00488 template <typename CLASS, typename T0, typename T1, typename T2, typename T3>
00489 class FuncConstructor<CLASS, T0, T1, T2, T3> : public Func<Object*, T0, T1, T2, T3> {
00490 public:
00491 typedef typename Type<T0> ::_Type _T0;
00492 typedef typename Type<T1> ::_Type _T1;
00493 typedef typename Type<T2> ::_Type _T2;
00494 typedef typename Type<T3> ::_Type _T3;
00495
00496 FuncConstructor() {
00497 }
00498
00499 virtual ~FuncConstructor() {
00500 }
00501
00502 Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3) {
00503 return new CLASS(t0, t1, t2, t3);
00504 }
00505
00506 virtual DynFunc *Clone() const override {
00507 return new FuncConstructor();
00508 }
00509 };
00510
00511
00512
00513
00514
00515
00516
00517
00518 template <typename CLASS, typename T0, typename T1, typename T2>
00519 class FuncConstructor<CLASS, T0, T1, T2> : public Func<Object*, T0, T1, T2> {
00520 public:
00521 typedef typename Type<T0> ::_Type _T0;
00522 typedef typename Type<T1> ::_Type _T1;
00523 typedef typename Type<T2> ::_Type _T2;
00524
00525 FuncConstructor() {
00526 }
00527
00528 virtual ~FuncConstructor() {
00529 }
00530
00531 Object *operator ()(_T0 t0, _T1 t1, _T2 t2) {
00532 return new CLASS(t0, t1, t2);
00533 }
00534
00535 virtual DynFunc *Clone() const override {
00536 return new FuncConstructor();
00537 }
00538 };
00539
00540
00541
00542
00543
00544
00545
00546
00547 template <typename CLASS, typename T0, typename T1>
00548 class FuncConstructor<CLASS, T0, T1> : public Func<Object*, T0, T1> {
00549 public:
00550 typedef typename Type<T0> ::_Type _T0;
00551 typedef typename Type<T1> ::_Type _T1;
00552
00553 FuncConstructor() {
00554 }
00555
00556 virtual ~FuncConstructor() {
00557 }
00558
00559 Object *operator ()(_T0 t0, _T1 t1) {
00560 return new CLASS(t0, t1);
00561 }
00562
00563 virtual DynFunc *Clone() const override {
00564 return new FuncConstructor();
00565 }
00566 };
00567
00568
00569
00570
00571
00572
00573
00574
00575 template <typename CLASS, typename T0>
00576 class FuncConstructor<CLASS, T0> : public Func<Object*, T0> {
00577 public:
00578 typedef typename Type<T0> ::_Type _T0;
00579
00580 FuncConstructor() {
00581 }
00582
00583 virtual ~FuncConstructor() {
00584 }
00585
00586 Object *operator ()(_T0 t0) {
00587 return new CLASS(t0);
00588 }
00589
00590 virtual DynFunc *Clone() const override {
00591 return new FuncConstructor();
00592 }
00593 };
00594
00595
00596
00597
00598
00599
00600
00601
00602 template <typename CLASS>
00603 class FuncConstructor<CLASS> : public Func<Object*> {
00604 public:
00605 FuncConstructor() {
00606 }
00607
00608 virtual ~FuncConstructor() {
00609 }
00610
00611 Object *operator ()() {
00612 return new CLASS();
00613 }
00614
00615 virtual DynFunc *Clone() const override {
00616 return new FuncConstructor();
00617 }
00618 };
00619
00620
00621
00622
00623
00624 }
00625
00626
00627 #endif // __PLCORE_FUNC_CONSTRUCTOR_H__