ROOT logo
// @(#)root/reflex:$Id$
// Author: Stefan Roiser 2004

// Copyright CERN, CH-1211 Geneva 23, 2004-2006, All rights reserved.
//
// Permission to use, copy, modify, and distribute this software for any
// purpose is hereby granted without fee, provided that this copyright and
// permissions notice appear in all copies and derivatives.
//
// This software is provided "as is" without express or implied warranty.

#ifndef Reflex_TypeTemplate
#define Reflex_TypeTemplate

// Include files
#include "Reflex/Kernel.h"

namespace Reflex {
// forward declarations
class Type;
class TypeTemplateName;

/**
 * @class TypeTemplate TypeTemplate.h Reflex/TypeTemplate.h
 * @author Stefan Roiser
 * @date 2005-02-03
 * @ingroup Ref
 */
class RFLX_API TypeTemplate {
public:
   /** default constructor */
   TypeTemplate(const TypeTemplateName * typeTemplateName = 0);


   /** copy constructor */
   TypeTemplate(const TypeTemplate &rh);


   /** destructor */
   ~TypeTemplate();


   /** assignment op */
   TypeTemplate& operator=(const TypeTemplate &rh);


   /**
    * operator bool will return true if the type template is resolved
    * @return true if type template is resolved
    */
   operator bool() const;


   /**
    * operator == will return true if two type templates are the same
    * @return true if type templates match
    */
   bool operator ==(const TypeTemplate& rh) const;


   /**
    * ByName will return a type template corresponding to the argument name
    * @param type template name to lookup
    * @param nTemplateParams looks up the template family with this number of template parameters
    *        if it is set to 0, the first occurence of the template family name will be returned
    * @return corresponding type template to name
    */
   static TypeTemplate ByName(const std::string& name,
                              size_t nTemplateParams = 0);


   /**
    * Id will return a memory address which is a unique id for this type template
    * @return unique id of this type template
    */
   void* Id() const;


   /**
    * Name will return the Name of the template family and a list of
    * all currently available instantiations
    * @return template family Name with all instantiantion
    */
   std::string Name(unsigned int mod = 0) const;


   /**
    * TemplateInstance_Begin returns the begin iterator of the instance container
    * @return the begin iterator of the instance container
    */
   Type_Iterator TemplateInstance_Begin() const;


   /**
    * TemplateInstance_End returns the end iterator of the instance container
    * @return the end iterator of the instance container
    */
   Type_Iterator TemplateInstance_End() const;


   /**
    * TemplateInstance_RBegin returns the rbegin iterator of the instance container
    * @return the rbegin iterator of the instance container
    */
   Reverse_Type_Iterator TemplateInstance_RBegin() const;


   /**
    * TemplateInstance_Rend returns the rend iterator of the instance container
    * @return the rend iterator of the instance container
    */
   Reverse_Type_Iterator TemplateInstance_REnd() const;


   /**
    * TemplateInstanceAt will return a pointer to the nth template instantion
    * @param  nth template instantion
    * @return pointer to nth template instantion
    */
   Type TemplateInstanceAt(size_t nth) const;


   /**
    * TemplateInstanceSize will return the number of template instantions for
    * this template family
    * @return number of template instantions
    */
   size_t TemplateInstanceSize() const;


   /**
    * TemplateParameterDefaultAt will return the nth TemplateParameterAt default value as string
    * @param nth template TemplateParameterAt
    * @return default value of nth template TemplateParameterAt
    */
   std::string TemplateParameterDefaultAt(size_t nth) const;


   /**
    * TemplateParameterDefault_Begin returns the begin of the container of template parameter default names
    * @return begin of container of template parameter default names
    */
   StdString_Iterator TemplateParameterDefault_Begin() const;


   /**
    * TemplateParameterDefault_End returns the end of the container of template parameter default names
    * @return end of container of template parameter default names
    */
   StdString_Iterator TemplateParameterDefault_End() const;


   /**
    * TemplateParameterDefault_RBegin returns the reverse begin of the container of template parameter default names
    * @return reverse begin of container of template parameter default names
    */
   Reverse_StdString_Iterator TemplateParameterDefault_RBegin() const;


   /**
    * TemplateParameterDefault_REnd returns the reverse end of the container of template parameter default names
    * @return reverse end of container of template parameter default names
    */
   Reverse_StdString_Iterator TemplateParameterDefault_REnd() const;


   /**
    * TemplateParameterNameAt will the Name of the nth TemplateParameterAt
    * @param  nth template TemplateParameterAt
    * @return Name of nth template TemplateParameterAt
    */
   std::string TemplateParameterNameAt(size_t nth) const;


   /**
    * TemplateParameterName_Begin returns the begin of the container of template parameter names
    * @return begin of container of template parameter names
    */
   StdString_Iterator TemplateParameterName_Begin() const;


   /**
    * TemplateParameterName_End returns the end of the container of template parameter names
    * @return end of container of template parameter names
    */
   StdString_Iterator TemplateParameterName_End() const;


   /**
    * TemplateParameterName_RBegin returns the reverse begin of the container of template parameter names
    * @return reverse begin of container of template parameter names
    */
   Reverse_StdString_Iterator TemplateParameterName_RBegin() const;


   /**
    * TemplateParameterName_REnd returns the reverse end of the container of template parameter names
    * @return reverse end of container of template parameter names
    */
   Reverse_StdString_Iterator TemplateParameterName_REnd() const;


   /**
    * TemplateParameterSize will return the number of template parameters
    * @return number of template parameters
    */
   size_t TemplateParameterSize() const;


   /**
    * TypeTemplateAt will return the nth type template defined
    * @param nth type template
    * @return nth type template
    */
   static TypeTemplate TypeTemplateAt(size_t nth);


   /**
    * TypeTemplateSize will return the number of type templates defined
    * @return number of defined type templates
    */
   static size_t TypeTemplateSize();


   /**
    * TypeTemplate_Begin returns the begin iterator of the type template container
    * @return begin iterator of type template container
    */
   static TypeTemplate_Iterator TypeTemplate_Begin();


   /**
    * TypeTemplate_End returns the end iterator of the type template container
    * @return end iterator of type template container
    */
   static TypeTemplate_Iterator TypeTemplate_End();


   /**
    * TypeTemplate_Rbegin returns the rbegin iterator of the type template container
    * @return rbegin iterator of type template container
    */
   static Reverse_TypeTemplate_Iterator TypeTemplate_RBegin();


   /**
    * TypeTemplate_Rend returns the rend iterator of the type template container
    * @return rend iterator of type template container
    */
   static Reverse_TypeTemplate_Iterator TypeTemplate_REnd();


   /**
    * Unload will unload the dictionary information of a type template
    */
   void Unload() const;

public:
   /**
    * AddTemplateInstance adds one TemplateInstanceAt of the template to the local container
    * @param templateInstance the template TemplateInstanceAt
    */
   void AddTemplateInstance(const Type& templateInstance) const;

private:
   /**
    * pointer to the type template implementation
    * @link aggregation
    * @supplierCardinality 1
    * @clientCardinality 1
    * @label type template impl
    */
   const TypeTemplateName* fTypeTemplateName;

};    // class TypeTemplate

} // namespace Reflex

#include "Reflex/internal/TypeTemplateName.h"
#include "Reflex/internal/TypeTemplateImpl.h"

//-------------------------------------------------------------------------------
inline Reflex::TypeTemplate::TypeTemplate(const TypeTemplateName* typeTemplateName)
//-------------------------------------------------------------------------------
   : fTypeTemplateName(typeTemplateName) {
}


//-------------------------------------------------------------------------------
inline Reflex::TypeTemplate::TypeTemplate(const TypeTemplate& rh)
//-------------------------------------------------------------------------------
   : fTypeTemplateName(rh.fTypeTemplateName) {
}


//-------------------------------------------------------------------------------
inline Reflex::TypeTemplate::~TypeTemplate() {
}

//-------------------------------------------------------------------------------


//-------------------------------------------------------------------------------
inline
Reflex::TypeTemplate&
Reflex::TypeTemplate::operator=(const TypeTemplate& rh) {
//-------------------------------------------------------------------------------
   if (&rh != this) {
      fTypeTemplateName = rh.fTypeTemplateName;
   }
   return *this;
}


//-------------------------------------------------------------------------------
inline
Reflex::TypeTemplate::operator bool() const {
//-------------------------------------------------------------------------------
   if (this->fTypeTemplateName && this->fTypeTemplateName->fTypeTemplateImpl) {
      return true;
   }
   return false;
}


//-------------------------------------------------------------------------------
inline bool
Reflex::TypeTemplate::operator ==(const TypeTemplate& rh) const {
//-------------------------------------------------------------------------------
   return fTypeTemplateName == rh.fTypeTemplateName;
}


//-------------------------------------------------------------------------------
inline void*
Reflex::TypeTemplate::Id() const {
//-------------------------------------------------------------------------------
   return (void*) fTypeTemplateName;
}


//-------------------------------------------------------------------------------
inline size_t
Reflex::TypeTemplate::TemplateInstanceSize() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateInstanceSize();
   }
   return 0;
}


//-------------------------------------------------------------------------------
inline size_t
Reflex::TypeTemplate::TemplateParameterSize() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterSize();
   }
   return 0;
}


//-------------------------------------------------------------------------------
inline std::string
Reflex::TypeTemplate::TemplateParameterDefaultAt(size_t nth) const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterDefaultAt(nth);
   }
   return "";
}


//-------------------------------------------------------------------------------
inline Reflex::StdString_Iterator
Reflex::TypeTemplate::TemplateParameterDefault_Begin() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterDefault_Begin();
   }
   return Dummy::StdStringCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::StdString_Iterator
Reflex::TypeTemplate::TemplateParameterDefault_End() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterDefault_End();
   }
   return Dummy::StdStringCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_StdString_Iterator
Reflex::TypeTemplate::TemplateParameterDefault_RBegin() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterDefault_RBegin();
   }
   return Dummy::StdStringCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_StdString_Iterator
Reflex::TypeTemplate::TemplateParameterDefault_REnd() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterDefault_REnd();
   }
   return Dummy::StdStringCont().rend();
}


//-------------------------------------------------------------------------------
inline std::string
Reflex::TypeTemplate::TemplateParameterNameAt(size_t nth) const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterNameAt(nth);
   }
   return "";
}


//-------------------------------------------------------------------------------
inline Reflex::StdString_Iterator
Reflex::TypeTemplate::TemplateParameterName_Begin() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterName_Begin();
   }
   return Dummy::StdStringCont().begin();
}


//-------------------------------------------------------------------------------
inline Reflex::StdString_Iterator
Reflex::TypeTemplate::TemplateParameterName_End() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterName_End();
   }
   return Dummy::StdStringCont().end();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_StdString_Iterator
Reflex::TypeTemplate::TemplateParameterName_RBegin() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterName_RBegin();
   }
   return Dummy::StdStringCont().rbegin();
}


//-------------------------------------------------------------------------------
inline Reflex::Reverse_StdString_Iterator
Reflex::TypeTemplate::TemplateParameterName_REnd() const {
//-------------------------------------------------------------------------------
   if (*this) {
      return fTypeTemplateName->fTypeTemplateImpl->TemplateParameterName_REnd();
   }
   return Dummy::StdStringCont().rend();
}


//-------------------------------------------------------------------------------
inline size_t
Reflex::TypeTemplate::TypeTemplateSize() {
//-------------------------------------------------------------------------------
   return TypeTemplateName::TypeTemplateSize();
}


#endif // Reflex_TypeTemplate
 TypeTemplate.h:1
 TypeTemplate.h:2
 TypeTemplate.h:3
 TypeTemplate.h:4
 TypeTemplate.h:5
 TypeTemplate.h:6
 TypeTemplate.h:7
 TypeTemplate.h:8
 TypeTemplate.h:9
 TypeTemplate.h:10
 TypeTemplate.h:11
 TypeTemplate.h:12
 TypeTemplate.h:13
 TypeTemplate.h:14
 TypeTemplate.h:15
 TypeTemplate.h:16
 TypeTemplate.h:17
 TypeTemplate.h:18
 TypeTemplate.h:19
 TypeTemplate.h:20
 TypeTemplate.h:21
 TypeTemplate.h:22
 TypeTemplate.h:23
 TypeTemplate.h:24
 TypeTemplate.h:25
 TypeTemplate.h:26
 TypeTemplate.h:27
 TypeTemplate.h:28
 TypeTemplate.h:29
 TypeTemplate.h:30
 TypeTemplate.h:31
 TypeTemplate.h:32
 TypeTemplate.h:33
 TypeTemplate.h:34
 TypeTemplate.h:35
 TypeTemplate.h:36
 TypeTemplate.h:37
 TypeTemplate.h:38
 TypeTemplate.h:39
 TypeTemplate.h:40
 TypeTemplate.h:41
 TypeTemplate.h:42
 TypeTemplate.h:43
 TypeTemplate.h:44
 TypeTemplate.h:45
 TypeTemplate.h:46
 TypeTemplate.h:47
 TypeTemplate.h:48
 TypeTemplate.h:49
 TypeTemplate.h:50
 TypeTemplate.h:51
 TypeTemplate.h:52
 TypeTemplate.h:53
 TypeTemplate.h:54
 TypeTemplate.h:55
 TypeTemplate.h:56
 TypeTemplate.h:57
 TypeTemplate.h:58
 TypeTemplate.h:59
 TypeTemplate.h:60
 TypeTemplate.h:61
 TypeTemplate.h:62
 TypeTemplate.h:63
 TypeTemplate.h:64
 TypeTemplate.h:65
 TypeTemplate.h:66
 TypeTemplate.h:67
 TypeTemplate.h:68
 TypeTemplate.h:69
 TypeTemplate.h:70
 TypeTemplate.h:71
 TypeTemplate.h:72
 TypeTemplate.h:73
 TypeTemplate.h:74
 TypeTemplate.h:75
 TypeTemplate.h:76
 TypeTemplate.h:77
 TypeTemplate.h:78
 TypeTemplate.h:79
 TypeTemplate.h:80
 TypeTemplate.h:81
 TypeTemplate.h:82
 TypeTemplate.h:83
 TypeTemplate.h:84
 TypeTemplate.h:85
 TypeTemplate.h:86
 TypeTemplate.h:87
 TypeTemplate.h:88
 TypeTemplate.h:89
 TypeTemplate.h:90
 TypeTemplate.h:91
 TypeTemplate.h:92
 TypeTemplate.h:93
 TypeTemplate.h:94
 TypeTemplate.h:95
 TypeTemplate.h:96
 TypeTemplate.h:97
 TypeTemplate.h:98
 TypeTemplate.h:99
 TypeTemplate.h:100
 TypeTemplate.h:101
 TypeTemplate.h:102
 TypeTemplate.h:103
 TypeTemplate.h:104
 TypeTemplate.h:105
 TypeTemplate.h:106
 TypeTemplate.h:107
 TypeTemplate.h:108
 TypeTemplate.h:109
 TypeTemplate.h:110
 TypeTemplate.h:111
 TypeTemplate.h:112
 TypeTemplate.h:113
 TypeTemplate.h:114
 TypeTemplate.h:115
 TypeTemplate.h:116
 TypeTemplate.h:117
 TypeTemplate.h:118
 TypeTemplate.h:119
 TypeTemplate.h:120
 TypeTemplate.h:121
 TypeTemplate.h:122
 TypeTemplate.h:123
 TypeTemplate.h:124
 TypeTemplate.h:125
 TypeTemplate.h:126
 TypeTemplate.h:127
 TypeTemplate.h:128
 TypeTemplate.h:129
 TypeTemplate.h:130
 TypeTemplate.h:131
 TypeTemplate.h:132
 TypeTemplate.h:133
 TypeTemplate.h:134
 TypeTemplate.h:135
 TypeTemplate.h:136
 TypeTemplate.h:137
 TypeTemplate.h:138
 TypeTemplate.h:139
 TypeTemplate.h:140
 TypeTemplate.h:141
 TypeTemplate.h:142
 TypeTemplate.h:143
 TypeTemplate.h:144
 TypeTemplate.h:145
 TypeTemplate.h:146
 TypeTemplate.h:147
 TypeTemplate.h:148
 TypeTemplate.h:149
 TypeTemplate.h:150
 TypeTemplate.h:151
 TypeTemplate.h:152
 TypeTemplate.h:153
 TypeTemplate.h:154
 TypeTemplate.h:155
 TypeTemplate.h:156
 TypeTemplate.h:157
 TypeTemplate.h:158
 TypeTemplate.h:159
 TypeTemplate.h:160
 TypeTemplate.h:161
 TypeTemplate.h:162
 TypeTemplate.h:163
 TypeTemplate.h:164
 TypeTemplate.h:165
 TypeTemplate.h:166
 TypeTemplate.h:167
 TypeTemplate.h:168
 TypeTemplate.h:169
 TypeTemplate.h:170
 TypeTemplate.h:171
 TypeTemplate.h:172
 TypeTemplate.h:173
 TypeTemplate.h:174
 TypeTemplate.h:175
 TypeTemplate.h:176
 TypeTemplate.h:177
 TypeTemplate.h:178
 TypeTemplate.h:179
 TypeTemplate.h:180
 TypeTemplate.h:181
 TypeTemplate.h:182
 TypeTemplate.h:183
 TypeTemplate.h:184
 TypeTemplate.h:185
 TypeTemplate.h:186
 TypeTemplate.h:187
 TypeTemplate.h:188
 TypeTemplate.h:189
 TypeTemplate.h:190
 TypeTemplate.h:191
 TypeTemplate.h:192
 TypeTemplate.h:193
 TypeTemplate.h:194
 TypeTemplate.h:195
 TypeTemplate.h:196
 TypeTemplate.h:197
 TypeTemplate.h:198
 TypeTemplate.h:199
 TypeTemplate.h:200
 TypeTemplate.h:201
 TypeTemplate.h:202
 TypeTemplate.h:203
 TypeTemplate.h:204
 TypeTemplate.h:205
 TypeTemplate.h:206
 TypeTemplate.h:207
 TypeTemplate.h:208
 TypeTemplate.h:209
 TypeTemplate.h:210
 TypeTemplate.h:211
 TypeTemplate.h:212
 TypeTemplate.h:213
 TypeTemplate.h:214
 TypeTemplate.h:215
 TypeTemplate.h:216
 TypeTemplate.h:217
 TypeTemplate.h:218
 TypeTemplate.h:219
 TypeTemplate.h:220
 TypeTemplate.h:221
 TypeTemplate.h:222
 TypeTemplate.h:223
 TypeTemplate.h:224
 TypeTemplate.h:225
 TypeTemplate.h:226
 TypeTemplate.h:227
 TypeTemplate.h:228
 TypeTemplate.h:229
 TypeTemplate.h:230
 TypeTemplate.h:231
 TypeTemplate.h:232
 TypeTemplate.h:233
 TypeTemplate.h:234
 TypeTemplate.h:235
 TypeTemplate.h:236
 TypeTemplate.h:237
 TypeTemplate.h:238
 TypeTemplate.h:239
 TypeTemplate.h:240
 TypeTemplate.h:241
 TypeTemplate.h:242
 TypeTemplate.h:243
 TypeTemplate.h:244
 TypeTemplate.h:245
 TypeTemplate.h:246
 TypeTemplate.h:247
 TypeTemplate.h:248
 TypeTemplate.h:249
 TypeTemplate.h:250
 TypeTemplate.h:251
 TypeTemplate.h:252
 TypeTemplate.h:253
 TypeTemplate.h:254
 TypeTemplate.h:255
 TypeTemplate.h:256
 TypeTemplate.h:257
 TypeTemplate.h:258
 TypeTemplate.h:259
 TypeTemplate.h:260
 TypeTemplate.h:261
 TypeTemplate.h:262
 TypeTemplate.h:263
 TypeTemplate.h:264
 TypeTemplate.h:265
 TypeTemplate.h:266
 TypeTemplate.h:267
 TypeTemplate.h:268
 TypeTemplate.h:269
 TypeTemplate.h:270
 TypeTemplate.h:271
 TypeTemplate.h:272
 TypeTemplate.h:273
 TypeTemplate.h:274
 TypeTemplate.h:275
 TypeTemplate.h:276
 TypeTemplate.h:277
 TypeTemplate.h:278
 TypeTemplate.h:279
 TypeTemplate.h:280
 TypeTemplate.h:281
 TypeTemplate.h:282
 TypeTemplate.h:283
 TypeTemplate.h:284
 TypeTemplate.h:285
 TypeTemplate.h:286
 TypeTemplate.h:287
 TypeTemplate.h:288
 TypeTemplate.h:289
 TypeTemplate.h:290
 TypeTemplate.h:291
 TypeTemplate.h:292
 TypeTemplate.h:293
 TypeTemplate.h:294
 TypeTemplate.h:295
 TypeTemplate.h:296
 TypeTemplate.h:297
 TypeTemplate.h:298
 TypeTemplate.h:299
 TypeTemplate.h:300
 TypeTemplate.h:301
 TypeTemplate.h:302
 TypeTemplate.h:303
 TypeTemplate.h:304
 TypeTemplate.h:305
 TypeTemplate.h:306
 TypeTemplate.h:307
 TypeTemplate.h:308
 TypeTemplate.h:309
 TypeTemplate.h:310
 TypeTemplate.h:311
 TypeTemplate.h:312
 TypeTemplate.h:313
 TypeTemplate.h:314
 TypeTemplate.h:315
 TypeTemplate.h:316
 TypeTemplate.h:317
 TypeTemplate.h:318
 TypeTemplate.h:319
 TypeTemplate.h:320
 TypeTemplate.h:321
 TypeTemplate.h:322
 TypeTemplate.h:323
 TypeTemplate.h:324
 TypeTemplate.h:325
 TypeTemplate.h:326
 TypeTemplate.h:327
 TypeTemplate.h:328
 TypeTemplate.h:329
 TypeTemplate.h:330
 TypeTemplate.h:331
 TypeTemplate.h:332
 TypeTemplate.h:333
 TypeTemplate.h:334
 TypeTemplate.h:335
 TypeTemplate.h:336
 TypeTemplate.h:337
 TypeTemplate.h:338
 TypeTemplate.h:339
 TypeTemplate.h:340
 TypeTemplate.h:341
 TypeTemplate.h:342
 TypeTemplate.h:343
 TypeTemplate.h:344
 TypeTemplate.h:345
 TypeTemplate.h:346
 TypeTemplate.h:347
 TypeTemplate.h:348
 TypeTemplate.h:349
 TypeTemplate.h:350
 TypeTemplate.h:351
 TypeTemplate.h:352
 TypeTemplate.h:353
 TypeTemplate.h:354
 TypeTemplate.h:355
 TypeTemplate.h:356
 TypeTemplate.h:357
 TypeTemplate.h:358
 TypeTemplate.h:359
 TypeTemplate.h:360
 TypeTemplate.h:361
 TypeTemplate.h:362
 TypeTemplate.h:363
 TypeTemplate.h:364
 TypeTemplate.h:365
 TypeTemplate.h:366
 TypeTemplate.h:367
 TypeTemplate.h:368
 TypeTemplate.h:369
 TypeTemplate.h:370
 TypeTemplate.h:371
 TypeTemplate.h:372
 TypeTemplate.h:373
 TypeTemplate.h:374
 TypeTemplate.h:375
 TypeTemplate.h:376
 TypeTemplate.h:377
 TypeTemplate.h:378
 TypeTemplate.h:379
 TypeTemplate.h:380
 TypeTemplate.h:381
 TypeTemplate.h:382
 TypeTemplate.h:383
 TypeTemplate.h:384
 TypeTemplate.h:385
 TypeTemplate.h:386
 TypeTemplate.h:387
 TypeTemplate.h:388
 TypeTemplate.h:389
 TypeTemplate.h:390
 TypeTemplate.h:391
 TypeTemplate.h:392
 TypeTemplate.h:393
 TypeTemplate.h:394
 TypeTemplate.h:395
 TypeTemplate.h:396
 TypeTemplate.h:397
 TypeTemplate.h:398
 TypeTemplate.h:399
 TypeTemplate.h:400
 TypeTemplate.h:401
 TypeTemplate.h:402
 TypeTemplate.h:403
 TypeTemplate.h:404
 TypeTemplate.h:405
 TypeTemplate.h:406
 TypeTemplate.h:407
 TypeTemplate.h:408
 TypeTemplate.h:409
 TypeTemplate.h:410
 TypeTemplate.h:411
 TypeTemplate.h:412
 TypeTemplate.h:413
 TypeTemplate.h:414
 TypeTemplate.h:415
 TypeTemplate.h:416
 TypeTemplate.h:417
 TypeTemplate.h:418
 TypeTemplate.h:419
 TypeTemplate.h:420
 TypeTemplate.h:421
 TypeTemplate.h:422
 TypeTemplate.h:423
 TypeTemplate.h:424
 TypeTemplate.h:425
 TypeTemplate.h:426
 TypeTemplate.h:427
 TypeTemplate.h:428
 TypeTemplate.h:429
 TypeTemplate.h:430
 TypeTemplate.h:431
 TypeTemplate.h:432
 TypeTemplate.h:433
 TypeTemplate.h:434
 TypeTemplate.h:435
 TypeTemplate.h:436
 TypeTemplate.h:437
 TypeTemplate.h:438
 TypeTemplate.h:439
 TypeTemplate.h:440
 TypeTemplate.h:441
 TypeTemplate.h:442
 TypeTemplate.h:443
 TypeTemplate.h:444
 TypeTemplate.h:445
 TypeTemplate.h:446
 TypeTemplate.h:447
 TypeTemplate.h:448
 TypeTemplate.h:449
 TypeTemplate.h:450
 TypeTemplate.h:451
 TypeTemplate.h:452
 TypeTemplate.h:453
 TypeTemplate.h:454
 TypeTemplate.h:455
 TypeTemplate.h:456
 TypeTemplate.h:457
 TypeTemplate.h:458
 TypeTemplate.h:459
 TypeTemplate.h:460
 TypeTemplate.h:461
 TypeTemplate.h:462
 TypeTemplate.h:463
 TypeTemplate.h:464
 TypeTemplate.h:465
 TypeTemplate.h:466
 TypeTemplate.h:467
 TypeTemplate.h:468
 TypeTemplate.h:469
 TypeTemplate.h:470
 TypeTemplate.h:471
 TypeTemplate.h:472
 TypeTemplate.h:473
 TypeTemplate.h:474
 TypeTemplate.h:475
 TypeTemplate.h:476
 TypeTemplate.h:477
 TypeTemplate.h:478
 TypeTemplate.h:479
 TypeTemplate.h:480
 TypeTemplate.h:481
 TypeTemplate.h:482