ROOT logo
// @(#)root/reflex:$Id: TypeTemplate.cxx 23738 2008-05-08 05:18:25Z brun $
// 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_BUILD
#define REFLEX_BUILD
#endif

#include "Reflex/TypeTemplate.h"
#include "Reflex/Type.h"
#include "Reflex/internal/OwnedMember.h"
#include "Reflex/internal/TypeTemplateName.h"                                                             

///-------------------------------------------------------------------------------
std::string Reflex::TypeTemplate::Name( unsigned int mod ) const {
//-------------------------------------------------------------------------------
   // Return the name of this type template.
   if ( fTypeTemplateName ) return fTypeTemplateName->Name( mod );
   else                     return "";
}


//-------------------------------------------------------------------------------
Reflex::TypeTemplate Reflex::TypeTemplate::ByName( const std::string & name,
                                                               size_t nTemplateParams ) {
//-------------------------------------------------------------------------------
   // Lookup a type template by name.
   return TypeTemplateName::ByName( name, nTemplateParams );
}


//-------------------------------------------------------------------------------
Reflex::TypeTemplate Reflex::TypeTemplate::TypeTemplateAt( size_t nth ) {
//-------------------------------------------------------------------------------
   // Return the nth type template defined.
   return TypeTemplateName::TypeTemplateAt( nth );
}


//-------------------------------------------------------------------------------
Reflex::TypeTemplate_Iterator Reflex::TypeTemplate::TypeTemplate_Begin() {
//-------------------------------------------------------------------------------
   // Return the begin iterator of the type template container.
   return TypeTemplateName::TypeTemplate_Begin();
}
 
                                             
//-------------------------------------------------------------------------------
Reflex::TypeTemplate_Iterator Reflex::TypeTemplate::TypeTemplate_End() {
//-------------------------------------------------------------------------------
   // Return the end iterator of the type template container.
   return TypeTemplateName::TypeTemplate_End();
}
 
                                             
//-------------------------------------------------------------------------------
Reflex::Reverse_TypeTemplate_Iterator Reflex::TypeTemplate::TypeTemplate_RBegin() {
//-------------------------------------------------------------------------------
   // Return the rbegin iterator of the type template container.
   return TypeTemplateName::TypeTemplate_RBegin();
}
 
                                             
//-------------------------------------------------------------------------------
Reflex::Reverse_TypeTemplate_Iterator Reflex::TypeTemplate::TypeTemplate_REnd() {
//-------------------------------------------------------------------------------
   // Return the rend iterator of the type template container.
   return TypeTemplateName::TypeTemplate_REnd();
}
 

//-------------------------------------------------------------------------------
Reflex::Type_Iterator Reflex::TypeTemplate::TemplateInstance_Begin() const {
//-------------------------------------------------------------------------------
   // Return the begin iterator of the instances container of this type template.
   if ( * this ) return fTypeTemplateName->fTypeTemplateImpl->TemplateInstance_Begin();
   return Dummy::TypeCont().begin();
}

                                             
//-------------------------------------------------------------------------------
Reflex::Type_Iterator Reflex::TypeTemplate::TemplateInstance_End() const {
//-------------------------------------------------------------------------------
   // Return the end iterator of the instances container of this type template.
   if ( * this ) return fTypeTemplateName->fTypeTemplateImpl->TemplateInstance_End();
   return Dummy::TypeCont().end();
}

                                             
//-------------------------------------------------------------------------------
Reflex::Reverse_Type_Iterator Reflex::TypeTemplate::TemplateInstance_RBegin() const {
//-------------------------------------------------------------------------------
   // Return the rbegin iterator of the instances container of this type template.
   if ( * this ) return fTypeTemplateName->fTypeTemplateImpl->TemplateInstance_RBegin();
   return Dummy::TypeCont().rbegin();
}

                                             
//-------------------------------------------------------------------------------
Reflex::Reverse_Type_Iterator Reflex::TypeTemplate::TemplateInstance_REnd() const {
//-------------------------------------------------------------------------------
   // Return the rend iterator of the instances container of this type template.
   if ( * this ) return fTypeTemplateName->fTypeTemplateImpl->TemplateInstance_REnd();
   return Dummy::TypeCont().rend();
}

                                             
//-------------------------------------------------------------------------------
Reflex::Type Reflex::TypeTemplate::TemplateInstanceAt( size_t nth ) const {
//-------------------------------------------------------------------------------
   // Return the nth template instance of this family.
   if ( * this ) return fTypeTemplateName->fTypeTemplateImpl->TemplateInstanceAt( nth );
   return Dummy::Type();
}


//-------------------------------------------------------------------------------
void Reflex::TypeTemplate::AddTemplateInstance( const Type & templateInstance ) const {
//-------------------------------------------------------------------------------
   // Add template instance to this template family.
   if ( * this ) fTypeTemplateName->fTypeTemplateImpl->AddTemplateInstance( templateInstance );
}


//-------------------------------------------------------------------------------
void Reflex::TypeTemplate::Unload() const {
//-------------------------------------------------------------------------------
//  Unload a type template, i.e. delete the TypeTemplateName's TypeTemaplteImpl object.
   if ( * this ) delete fTypeTemplateName->fTypeTemplateImpl;
}
 TypeTemplate.cxx:1
 TypeTemplate.cxx:2
 TypeTemplate.cxx:3
 TypeTemplate.cxx:4
 TypeTemplate.cxx:5
 TypeTemplate.cxx:6
 TypeTemplate.cxx:7
 TypeTemplate.cxx:8
 TypeTemplate.cxx:9
 TypeTemplate.cxx:10
 TypeTemplate.cxx:11
 TypeTemplate.cxx:12
 TypeTemplate.cxx:13
 TypeTemplate.cxx:14
 TypeTemplate.cxx:15
 TypeTemplate.cxx:16
 TypeTemplate.cxx:17
 TypeTemplate.cxx:18
 TypeTemplate.cxx:19
 TypeTemplate.cxx:20
 TypeTemplate.cxx:21
 TypeTemplate.cxx:22
 TypeTemplate.cxx:23
 TypeTemplate.cxx:24
 TypeTemplate.cxx:25
 TypeTemplate.cxx:26
 TypeTemplate.cxx:27
 TypeTemplate.cxx:28
 TypeTemplate.cxx:29
 TypeTemplate.cxx:30
 TypeTemplate.cxx:31
 TypeTemplate.cxx:32
 TypeTemplate.cxx:33
 TypeTemplate.cxx:34
 TypeTemplate.cxx:35
 TypeTemplate.cxx:36
 TypeTemplate.cxx:37
 TypeTemplate.cxx:38
 TypeTemplate.cxx:39
 TypeTemplate.cxx:40
 TypeTemplate.cxx:41
 TypeTemplate.cxx:42
 TypeTemplate.cxx:43
 TypeTemplate.cxx:44
 TypeTemplate.cxx:45
 TypeTemplate.cxx:46
 TypeTemplate.cxx:47
 TypeTemplate.cxx:48
 TypeTemplate.cxx:49
 TypeTemplate.cxx:50
 TypeTemplate.cxx:51
 TypeTemplate.cxx:52
 TypeTemplate.cxx:53
 TypeTemplate.cxx:54
 TypeTemplate.cxx:55
 TypeTemplate.cxx:56
 TypeTemplate.cxx:57
 TypeTemplate.cxx:58
 TypeTemplate.cxx:59
 TypeTemplate.cxx:60
 TypeTemplate.cxx:61
 TypeTemplate.cxx:62
 TypeTemplate.cxx:63
 TypeTemplate.cxx:64
 TypeTemplate.cxx:65
 TypeTemplate.cxx:66
 TypeTemplate.cxx:67
 TypeTemplate.cxx:68
 TypeTemplate.cxx:69
 TypeTemplate.cxx:70
 TypeTemplate.cxx:71
 TypeTemplate.cxx:72
 TypeTemplate.cxx:73
 TypeTemplate.cxx:74
 TypeTemplate.cxx:75
 TypeTemplate.cxx:76
 TypeTemplate.cxx:77
 TypeTemplate.cxx:78
 TypeTemplate.cxx:79
 TypeTemplate.cxx:80
 TypeTemplate.cxx:81
 TypeTemplate.cxx:82
 TypeTemplate.cxx:83
 TypeTemplate.cxx:84
 TypeTemplate.cxx:85
 TypeTemplate.cxx:86
 TypeTemplate.cxx:87
 TypeTemplate.cxx:88
 TypeTemplate.cxx:89
 TypeTemplate.cxx:90
 TypeTemplate.cxx:91
 TypeTemplate.cxx:92
 TypeTemplate.cxx:93
 TypeTemplate.cxx:94
 TypeTemplate.cxx:95
 TypeTemplate.cxx:96
 TypeTemplate.cxx:97
 TypeTemplate.cxx:98
 TypeTemplate.cxx:99
 TypeTemplate.cxx:100
 TypeTemplate.cxx:101
 TypeTemplate.cxx:102
 TypeTemplate.cxx:103
 TypeTemplate.cxx:104
 TypeTemplate.cxx:105
 TypeTemplate.cxx:106
 TypeTemplate.cxx:107
 TypeTemplate.cxx:108
 TypeTemplate.cxx:109
 TypeTemplate.cxx:110
 TypeTemplate.cxx:111
 TypeTemplate.cxx:112
 TypeTemplate.cxx:113
 TypeTemplate.cxx:114
 TypeTemplate.cxx:115
 TypeTemplate.cxx:116
 TypeTemplate.cxx:117
 TypeTemplate.cxx:118
 TypeTemplate.cxx:119
 TypeTemplate.cxx:120
 TypeTemplate.cxx:121
 TypeTemplate.cxx:122
 TypeTemplate.cxx:123
 TypeTemplate.cxx:124
 TypeTemplate.cxx:125
 TypeTemplate.cxx:126
 TypeTemplate.cxx:127
 TypeTemplate.cxx:128
 TypeTemplate.cxx:129
 TypeTemplate.cxx:130
 TypeTemplate.cxx:131
 TypeTemplate.cxx:132
 TypeTemplate.cxx:133
 TypeTemplate.cxx:134
 TypeTemplate.cxx:135
 TypeTemplate.cxx:136
 TypeTemplate.cxx:137