Tools.h

Go to the documentation of this file.
00001 // @(#)root/reflex:$Id: Tools.h 32228 2010-02-05 16:13:09Z axel $
00002 // Author: Stefan Roiser 2004
00003 
00004 // Copyright CERN, CH-1211 Geneva 23, 2004-2010, All rights reserved.
00005 //
00006 // Permission to use, copy, modify, and distribute this software for any
00007 // purpose is hereby granted without fee, provided that this copyright and
00008 // permissions notice appear in all copies and derivatives.
00009 //
00010 // This software is provided "as is" without express or implied warranty.
00011 
00012 #ifndef Reflex_Tools
00013 #define Reflex_Tools
00014 
00015 // Include files
00016 #include "Reflex/Kernel.h"
00017 #include <vector>
00018 #include <typeinfo>
00019 #include <string>
00020 
00021 namespace Reflex {
00022 // forward declarations
00023 class Function;
00024 class Type;
00025 
00026 enum EFUNDAMENTALTYPE {
00027    kCHAR,
00028    kSIGNED_CHAR,
00029    kSHORT_INT,
00030    kINT,
00031    kLONG_INT,
00032    kUNSIGNED_CHAR,
00033    kUNSIGNED_SHORT_INT,
00034    kUNSIGNED_INT,
00035    kUNSIGNED_LONG_INT,
00036    kBOOL,
00037    kFLOAT,
00038    kDOUBLE,
00039    kLONG_DOUBLE,
00040    kVOID,
00041    kLONGLONG,
00042    kULONGLONG,
00043    kNOTFUNDAMENTAL
00044 };
00045 
00046 
00047 namespace Tools {
00048 /**
00049  * GetFundamentalType will return an enum representing the
00050  * fundamental type which was passed in, or NOFUNDAMENTALTYPE
00051  * @param typ the type passed into the system
00052  * @return enum representing kind of fundamental type
00053  */
00054 RFLX_API EFUNDAMENTALTYPE FundamentalType(const Type& typ);
00055 
00056 
00057 /**
00058  * Demangle will call the internal demangling routines and
00059  * return the demangled string of a At
00060  * @param ti the mangled At string
00061  * @return the demangled string
00062  */
00063 RFLX_API std::string Demangle(const std::type_info& ti);
00064 
00065 
00066 /**
00067  * StringSplit will return a vector of splitted strings
00068  * @param  splitValues returns the vector with splitted strings
00069  * @param  str the input string
00070  * @param  delim the delimiter on which to split
00071  */
00072 RFLX_API void StringSplit(std::vector<std::string>& splitValues,
00073                           const std::string& str,
00074                           const std::string& delim = ",");
00075 
00076 
00077 /**
00078  * StringSplitPair will return two values which are split
00079  * @param  val1 returns the first value
00080  * @param  val2 returns the second value
00081  * @param  str the string to be split
00082  * @param  delim the delimiter on which to split
00083  */
00084 RFLX_API void StringSplitPair(std::string& val1,
00085                               std::string& val2,
00086                               const std::string& str,
00087                               const std::string& delim = ",");
00088 
00089 
00090 /**
00091  * StringStrip will strip off Empty spaces of a string
00092  * @param str a reference to a string to be stripped
00093  */
00094 RFLX_API void StringStrip(std::string& str);
00095 
00096 
00097 /**
00098  * StringVec2String will take a vector of strings and return the
00099  * vector containees concatenated by commas
00100  * @param vec the vector to be converted
00101  * @return string of comma concatenated containees
00102  */
00103 RFLX_API std::string StringVec2String(const std::vector<std::string>& vec);
00104 
00105 
00106 RFLX_API std::string BuildTypeName(Type& t,
00107                                    unsigned int modifiers);
00108 
00109 
00110 RFLX_API std::vector<std::string> GenTemplateArgVec(const std::string& name);
00111 
00112 /**
00113  * GetTemplateComponents extract from 'Name' a template name and a vector containing its argument.
00114  *
00115  */
00116 RFLX_API void GetTemplateComponents(const std::string& Name,
00117                                     std::string& templatename,
00118                                     std::vector<std::string>& args);
00119 
00120 /**
00121  * GetBasePosition will return the position in a
00122  * string where the unscoped At begins
00123  */
00124 RFLX_API size_t GetBasePosition(const std::string& name);
00125 
00126 
00127 RFLX_API size_t GetFirstScopePosition(const std::string& name, size_t& start);
00128 
00129 
00130 /**
00131  * Get the At part of a given At/member Name
00132  */
00133 RFLX_API std::string GetScopeName(const std::string& name,
00134                                   bool startFromLeft = false);
00135 
00136 
00137 /**
00138  * Get the BaseAt (unscoped) Name of a At/member Name
00139  */
00140 RFLX_API std::string GetBaseName(const std::string& name,
00141                                  bool startFromLeft = false);
00142 
00143 
00144 /**
00145  * IsTemplated returns true if the At (class) is templated
00146  * @param Name the At Name
00147  * @return true if At is templated
00148  */
00149 RFLX_API bool IsTemplated(const char* name);
00150 
00151 
00152 /**
00153  * templateArguments returns a string containing the template arguments
00154  * of a templated At (including outer angular brackets)
00155  * @param Name the Name of the templated At
00156  * @return template arguments of the templated At
00157  */
00158 RFLX_API std::string GetTemplateArguments(const char* name);
00159 
00160 
00161 /**
00162  * GetTemplateName returns the Name of the template At (without arguments)
00163  * @param Name the Name of the template At
00164  * @return template Name
00165  */
00166 RFLX_API std::string GetTemplateName(const char* name);
00167 
00168 
00169 RFLX_API std::string NormalizeName(const std::string& name);
00170 
00171 
00172 RFLX_API std::string NormalizeName(const char* name);
00173 
00174 
00175 /**
00176  * MakeVector is a utility function to create and initialize a std::vector of
00177  * number of items
00178  * @param t1 vector element
00179  * @return output vector
00180  */
00181 template <typename T>
00182 inline std::vector<T>
00183 MakeVector(T t0) {
00184    std::vector<T> v;
00185    v.reserve(1);
00186    v.push_back(t0);
00187    return v;
00188 }
00189 
00190 
00191 template <typename T>
00192 inline std::vector<T>
00193 MakeVector(T t0,
00194            T t1) {
00195    std::vector<T> v;
00196    v.reserve(2);
00197    v.push_back(t0); v.push_back(t1);
00198    return v;
00199 }
00200 
00201 
00202 template <typename T>
00203 inline std::vector<T>
00204 MakeVector(T t0,
00205            T t1,
00206            T t2) {
00207    std::vector<T> v;
00208    v.reserve(3);
00209    v.push_back(t0); v.push_back(t1); v.push_back(t2);
00210    return v;
00211 }
00212 
00213 
00214 template <typename T>
00215 inline std::vector<T>
00216 MakeVector(T t0,
00217            T t1,
00218            T t2,
00219            T t3) {
00220    std::vector<T> v;
00221    v.reserve(4);
00222    v.push_back(t0); v.push_back(t1); v.push_back(t2); v.push_back(t3);
00223    return v;
00224 }
00225 
00226 
00227 template <typename T>
00228 inline std::vector<T>
00229 MakeVector(T t0,
00230            T t1,
00231            T t2,
00232            T t3,
00233            T t4) {
00234    std::vector<T> v;
00235    v.reserve(5);
00236    v.push_back(t0); v.push_back(t1); v.push_back(t2); v.push_back(t3); v.push_back(t4);
00237    return v;
00238 }
00239 
00240 
00241 template <typename T>
00242 inline std::vector<T>
00243 MakeVector(T t0,
00244            T t1,
00245            T t2,
00246            T t3,
00247            T t4,
00248            T t5) {
00249    std::vector<T> v;
00250    v.reserve(6);
00251    v.push_back(t0); v.push_back(t1); v.push_back(t2); v.push_back(t3); v.push_back(t4);
00252    v.push_back(t5);
00253    return v;
00254 }
00255 
00256 
00257 template <typename T>
00258 inline std::vector<T>
00259 MakeVector(T t0,
00260            T t1,
00261            T t2,
00262            T t3,
00263            T t4,
00264            T t5,
00265            T t6) {
00266    std::vector<T> v;
00267    v.reserve(7);
00268    v.push_back(t0); v.push_back(t1); v.push_back(t2); v.push_back(t3); v.push_back(t4);
00269    v.push_back(t5); v.push_back(t6);
00270    return v;
00271 }
00272 
00273 
00274 template <typename T>
00275 inline std::vector<T>
00276 MakeVector(T t0,
00277            T t1,
00278            T t2,
00279            T t3,
00280            T t4,
00281            T t5,
00282            T t6,
00283            T t7) {
00284    std::vector<T> v;
00285    v.reserve(8);
00286    v.push_back(t0); v.push_back(t1); v.push_back(t2); v.push_back(t3); v.push_back(t4);
00287    v.push_back(t5); v.push_back(t6); v.push_back(t7);
00288    return v;
00289 }
00290 
00291 
00292 template <typename T>
00293 inline std::vector<T>
00294 MakeVector(T t0,
00295            T t1,
00296            T t2,
00297            T t3,
00298            T t4,
00299            T t5,
00300            T t6,
00301            T t7,
00302            T t8) {
00303    std::vector<T> v;
00304    v.reserve(9);
00305    v.push_back(t0); v.push_back(t1); v.push_back(t2); v.push_back(t3); v.push_back(t4);
00306    v.push_back(t5); v.push_back(t6); v.push_back(t7), v.push_back(t8);
00307    return v;
00308 }
00309 
00310 
00311 template <typename T>
00312 inline std::vector<T>
00313 MakeVector(T t0,
00314            T t1,
00315            T t2,
00316            T t3,
00317            T t4,
00318            T t5,
00319            T t6,
00320            T t7,
00321            T t8,
00322            T t9) {
00323    std::vector<T> v;
00324    v.reserve(10);
00325    v.push_back(t0); v.push_back(t1); v.push_back(t2); v.push_back(t3); v.push_back(t4);
00326    v.push_back(t5); v.push_back(t6); v.push_back(t7), v.push_back(t8); v.push_back(t9);
00327    return v;
00328 }
00329 
00330 
00331 template <typename T>
00332 inline std::vector<T>
00333 MakeVector(T t0,
00334            T t1,
00335            T t2,
00336            T t3,
00337            T t4,
00338            T t5,
00339            T t6,
00340            T t7,
00341            T t8,
00342            T t9,
00343            T t10) {
00344    std::vector<T> v;
00345    v.reserve(11);
00346    v.push_back(t0); v.push_back(t1); v.push_back(t2); v.push_back(t3); v.push_back(t4);
00347    v.push_back(t5); v.push_back(t6); v.push_back(t7), v.push_back(t8); v.push_back(t9);
00348    v.push_back(t10);
00349    return v;
00350 }
00351 
00352 
00353 template <typename T>
00354 inline std::vector<T>
00355 MakeVector(T t0,
00356            T t1,
00357            T t2,
00358            T t3,
00359            T t4,
00360            T t5,
00361            T t6,
00362            T t7,
00363            T t8,
00364            T t9,
00365            T t10,
00366            T t11) {
00367    std::vector<T> v;
00368    v.reserve(12);
00369    v.push_back(t0);  v.push_back(t1); v.push_back(t2); v.push_back(t3); v.push_back(t4);
00370    v.push_back(t5);  v.push_back(t6); v.push_back(t7), v.push_back(t8); v.push_back(t9);
00371    v.push_back(t10); v.push_back(t11);
00372    return v;
00373 }
00374 
00375 
00376 template <typename T>
00377 inline std::vector<T>
00378 MakeVector(T t0,
00379            T t1,
00380            T t2,
00381            T t3,
00382            T t4,
00383            T t5,
00384            T t6,
00385            T t7,
00386            T t8,
00387            T t9,
00388            T t10,
00389            T t11,
00390            T t12) {
00391    std::vector<T> v;
00392    v.reserve(13);
00393    v.push_back(t0);  v.push_back(t1);  v.push_back(t2); v.push_back(t3); v.push_back(t4);
00394    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8); v.push_back(t9);
00395    v.push_back(t10); v.push_back(t11); v.push_back(t12);
00396    return v;
00397 }
00398 
00399 
00400 template <typename T>
00401 inline std::vector<T>
00402 MakeVector(T t0,
00403            T t1,
00404            T t2,
00405            T t3,
00406            T t4,
00407            T t5,
00408            T t6,
00409            T t7,
00410            T t8,
00411            T t9,
00412            T t10,
00413            T t11,
00414            T t12,
00415            T t13) {
00416    std::vector<T> v;
00417    v.reserve(14);
00418    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3); v.push_back(t4);
00419    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8); v.push_back(t9);
00420    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13);
00421    return v;
00422 }
00423 
00424 
00425 template <typename T>
00426 inline std::vector<T>
00427 MakeVector(T t0,
00428            T t1,
00429            T t2,
00430            T t3,
00431            T t4,
00432            T t5,
00433            T t6,
00434            T t7,
00435            T t8,
00436            T t9,
00437            T t10,
00438            T t11,
00439            T t12,
00440            T t13,
00441            T t14) {
00442    std::vector<T> v;
00443    v.reserve(15);
00444    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00445    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00446    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00447    return v;
00448 }
00449 
00450 
00451 template <typename T>
00452 inline std::vector<T>
00453 MakeVector(T t0,
00454            T t1,
00455            T t2,
00456            T t3,
00457            T t4,
00458            T t5,
00459            T t6,
00460            T t7,
00461            T t8,
00462            T t9,
00463            T t10,
00464            T t11,
00465            T t12,
00466            T t13,
00467            T t14,
00468            T t15) {
00469    std::vector<T> v;
00470    v.reserve(16);
00471    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00472    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00473    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00474    v.push_back(t15);
00475    return v;
00476 }
00477 
00478 
00479 template <typename T>
00480 inline std::vector<T>
00481 MakeVector(T t0,
00482            T t1,
00483            T t2,
00484            T t3,
00485            T t4,
00486            T t5,
00487            T t6,
00488            T t7,
00489            T t8,
00490            T t9,
00491            T t10,
00492            T t11,
00493            T t12,
00494            T t13,
00495            T t14,
00496            T t15,
00497            T t16) {
00498    std::vector<T> v;
00499    v.reserve(17);
00500    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00501    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00502    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00503    v.push_back(t15); v.push_back(t16);
00504    return v;
00505 }
00506 
00507 
00508 template <typename T>
00509 inline std::vector<T>
00510 MakeVector(T t0,
00511            T t1,
00512            T t2,
00513            T t3,
00514            T t4,
00515            T t5,
00516            T t6,
00517            T t7,
00518            T t8,
00519            T t9,
00520            T t10,
00521            T t11,
00522            T t12,
00523            T t13,
00524            T t14,
00525            T t15,
00526            T t16,
00527            T t17) {
00528    std::vector<T> v;
00529    v.reserve(18);
00530    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00531    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00532    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00533    v.push_back(t15); v.push_back(t16); v.push_back(t17);
00534    return v;
00535 }
00536 
00537 
00538 template <typename T>
00539 inline std::vector<T>
00540 MakeVector(T t0,
00541            T t1,
00542            T t2,
00543            T t3,
00544            T t4,
00545            T t5,
00546            T t6,
00547            T t7,
00548            T t8,
00549            T t9,
00550            T t10,
00551            T t11,
00552            T t12,
00553            T t13,
00554            T t14,
00555            T t15,
00556            T t16,
00557            T t17,
00558            T t18) {
00559    std::vector<T> v;
00560    v.reserve(19);
00561    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00562    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00563    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00564    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18);
00565    return v;
00566 }
00567 
00568 
00569 template <typename T>
00570 inline std::vector<T>
00571 MakeVector(T t0,
00572            T t1,
00573            T t2,
00574            T t3,
00575            T t4,
00576            T t5,
00577            T t6,
00578            T t7,
00579            T t8,
00580            T t9,
00581            T t10,
00582            T t11,
00583            T t12,
00584            T t13,
00585            T t14,
00586            T t15,
00587            T t16,
00588            T t17,
00589            T t18,
00590            T t19) {
00591    std::vector<T> v;
00592    v.reserve(20);
00593    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00594    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00595    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00596    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00597    return v;
00598 }
00599 
00600 
00601 template <typename T>
00602 inline std::vector<T>
00603 MakeVector(T t0,
00604            T t1,
00605            T t2,
00606            T t3,
00607            T t4,
00608            T t5,
00609            T t6,
00610            T t7,
00611            T t8,
00612            T t9,
00613            T t10,
00614            T t11,
00615            T t12,
00616            T t13,
00617            T t14,
00618            T t15,
00619            T t16,
00620            T t17,
00621            T t18,
00622            T t19,
00623            T t20) {
00624    std::vector<T> v;
00625    v.reserve(21);
00626    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00627    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00628    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00629    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00630    v.push_back(t20);
00631    return v;
00632 }
00633 
00634 
00635 template <typename T>
00636 inline std::vector<T>
00637 MakeVector(T t0,
00638            T t1,
00639            T t2,
00640            T t3,
00641            T t4,
00642            T t5,
00643            T t6,
00644            T t7,
00645            T t8,
00646            T t9,
00647            T t10,
00648            T t11,
00649            T t12,
00650            T t13,
00651            T t14,
00652            T t15,
00653            T t16,
00654            T t17,
00655            T t18,
00656            T t19,
00657            T t20,
00658            T t21) {
00659    std::vector<T> v;
00660    v.reserve(22);
00661    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00662    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00663    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00664    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00665    v.push_back(t20); v.push_back(t21);
00666    return v;
00667 }
00668 
00669 
00670 template <typename T>
00671 inline std::vector<T>
00672 MakeVector(T t0,
00673            T t1,
00674            T t2,
00675            T t3,
00676            T t4,
00677            T t5,
00678            T t6,
00679            T t7,
00680            T t8,
00681            T t9,
00682            T t10,
00683            T t11,
00684            T t12,
00685            T t13,
00686            T t14,
00687            T t15,
00688            T t16,
00689            T t17,
00690            T t18,
00691            T t19,
00692            T t20,
00693            T t21,
00694            T t22) {
00695    std::vector<T> v;
00696    v.reserve(23);
00697    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00698    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00699    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00700    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00701    v.push_back(t20); v.push_back(t21); v.push_back(t22);
00702    return v;
00703 }
00704 
00705 
00706 template <typename T>
00707 inline std::vector<T>
00708 MakeVector(T t0,
00709            T t1,
00710            T t2,
00711            T t3,
00712            T t4,
00713            T t5,
00714            T t6,
00715            T t7,
00716            T t8,
00717            T t9,
00718            T t10,
00719            T t11,
00720            T t12,
00721            T t13,
00722            T t14,
00723            T t15,
00724            T t16,
00725            T t17,
00726            T t18,
00727            T t19,
00728            T t20,
00729            T t21,
00730            T t22,
00731            T t23) {
00732    std::vector<T> v;
00733    v.reserve(24);
00734    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00735    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00736    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00737    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00738    v.push_back(t20); v.push_back(t21); v.push_back(t22); v.push_back(t23);
00739    return v;
00740 }
00741 
00742 
00743 template <typename T>
00744 inline std::vector<T>
00745 MakeVector(T t0,
00746            T t1,
00747            T t2,
00748            T t3,
00749            T t4,
00750            T t5,
00751            T t6,
00752            T t7,
00753            T t8,
00754            T t9,
00755            T t10,
00756            T t11,
00757            T t12,
00758            T t13,
00759            T t14,
00760            T t15,
00761            T t16,
00762            T t17,
00763            T t18,
00764            T t19,
00765            T t20,
00766            T t21,
00767            T t22,
00768            T t23,
00769            T t24) {
00770    std::vector<T> v;
00771    v.reserve(25);
00772    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00773    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00774    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00775    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00776    v.push_back(t20); v.push_back(t21); v.push_back(t22); v.push_back(t23); v.push_back(t24);
00777    return v;
00778 }
00779 
00780 
00781 template <typename T>
00782 inline std::vector<T>
00783 MakeVector(T t0,
00784            T t1,
00785            T t2,
00786            T t3,
00787            T t4,
00788            T t5,
00789            T t6,
00790            T t7,
00791            T t8,
00792            T t9,
00793            T t10,
00794            T t11,
00795            T t12,
00796            T t13,
00797            T t14,
00798            T t15,
00799            T t16,
00800            T t17,
00801            T t18,
00802            T t19,
00803            T t20,
00804            T t21,
00805            T t22,
00806            T t23,
00807            T t24,
00808            T t25) {
00809    std::vector<T> v;
00810    v.reserve(26);
00811    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00812    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00813    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00814    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00815    v.push_back(t20); v.push_back(t21); v.push_back(t22); v.push_back(t23); v.push_back(t24);
00816    v.push_back(t25);
00817    return v;
00818 }
00819 
00820 
00821 template <typename T>
00822 inline std::vector<T>
00823 MakeVector(T t0,
00824            T t1,
00825            T t2,
00826            T t3,
00827            T t4,
00828            T t5,
00829            T t6,
00830            T t7,
00831            T t8,
00832            T t9,
00833            T t10,
00834            T t11,
00835            T t12,
00836            T t13,
00837            T t14,
00838            T t15,
00839            T t16,
00840            T t17,
00841            T t18,
00842            T t19,
00843            T t20,
00844            T t21,
00845            T t22,
00846            T t23,
00847            T t24,
00848            T t25,
00849            T t26) {
00850    std::vector<T> v;
00851    v.reserve(27);
00852    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00853    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00854    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00855    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00856    v.push_back(t20); v.push_back(t21); v.push_back(t22); v.push_back(t23); v.push_back(t24);
00857    v.push_back(t25); v.push_back(t26);
00858    return v;
00859 }
00860 
00861 
00862 template <typename T>
00863 inline std::vector<T>
00864 MakeVector(T t0,
00865            T t1,
00866            T t2,
00867            T t3,
00868            T t4,
00869            T t5,
00870            T t6,
00871            T t7,
00872            T t8,
00873            T t9,
00874            T t10,
00875            T t11,
00876            T t12,
00877            T t13,
00878            T t14,
00879            T t15,
00880            T t16,
00881            T t17,
00882            T t18,
00883            T t19,
00884            T t20,
00885            T t21,
00886            T t22,
00887            T t23,
00888            T t24,
00889            T t25,
00890            T t26,
00891            T t27) {
00892    std::vector<T> v;
00893    v.reserve(28);
00894    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00895    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00896    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00897    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00898    v.push_back(t20); v.push_back(t21); v.push_back(t22); v.push_back(t23); v.push_back(t24);
00899    v.push_back(t25); v.push_back(t26); v.push_back(t27);
00900    return v;
00901 }
00902 
00903 
00904 template <typename T>
00905 inline std::vector<T>
00906 MakeVector(T t0,
00907            T t1,
00908            T t2,
00909            T t3,
00910            T t4,
00911            T t5,
00912            T t6,
00913            T t7,
00914            T t8,
00915            T t9,
00916            T t10,
00917            T t11,
00918            T t12,
00919            T t13,
00920            T t14,
00921            T t15,
00922            T t16,
00923            T t17,
00924            T t18,
00925            T t19,
00926            T t20,
00927            T t21,
00928            T t22,
00929            T t23,
00930            T t24,
00931            T t25,
00932            T t26,
00933            T t27,
00934            T t28) {
00935    std::vector<T> v;
00936    v.reserve(29);
00937    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00938    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00939    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00940    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00941    v.push_back(t20); v.push_back(t21); v.push_back(t22); v.push_back(t23); v.push_back(t24);
00942    v.push_back(t25); v.push_back(t26); v.push_back(t27); v.push_back(t28);
00943    return v;
00944 }
00945 
00946 
00947 template <typename T>
00948 inline std::vector<T>
00949 MakeVector(T t0,
00950            T t1,
00951            T t2,
00952            T t3,
00953            T t4,
00954            T t5,
00955            T t6,
00956            T t7,
00957            T t8,
00958            T t9,
00959            T t10,
00960            T t11,
00961            T t12,
00962            T t13,
00963            T t14,
00964            T t15,
00965            T t16,
00966            T t17,
00967            T t18,
00968            T t19,
00969            T t20,
00970            T t21,
00971            T t22,
00972            T t23,
00973            T t24,
00974            T t25,
00975            T t26,
00976            T t27,
00977            T t28,
00978            T t29) {
00979    std::vector<T> v;
00980    v.reserve(30);
00981    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
00982    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
00983    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
00984    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
00985    v.push_back(t20); v.push_back(t21); v.push_back(t22); v.push_back(t23); v.push_back(t24);
00986    v.push_back(t25); v.push_back(t26); v.push_back(t27); v.push_back(t28); v.push_back(t29);
00987    return v;
00988 }
00989 
00990 
00991 template <typename T>
00992 inline std::vector<T>
00993 MakeVector(T t0,
00994            T t1,
00995            T t2,
00996            T t3,
00997            T t4,
00998            T t5,
00999            T t6,
01000            T t7,
01001            T t8,
01002            T t9,
01003            T t10,
01004            T t11,
01005            T t12,
01006            T t13,
01007            T t14,
01008            T t15,
01009            T t16,
01010            T t17,
01011            T t18,
01012            T t19,
01013            T t20,
01014            T t21,
01015            T t22,
01016            T t23,
01017            T t24,
01018            T t25,
01019            T t26,
01020            T t27,
01021            T t28,
01022            T t29,
01023            T t30) {
01024    std::vector<T> v;
01025    v.reserve(31);
01026    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
01027    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
01028    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
01029    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
01030    v.push_back(t20); v.push_back(t21); v.push_back(t22); v.push_back(t23); v.push_back(t24);
01031    v.push_back(t25); v.push_back(t26); v.push_back(t27); v.push_back(t28); v.push_back(t29);
01032    v.push_back(t30);
01033    return v;
01034 }
01035 
01036 
01037 template <typename T>
01038 inline std::vector<T>
01039 MakeVector(T t0,
01040            T t1,
01041            T t2,
01042            T t3,
01043            T t4,
01044            T t5,
01045            T t6,
01046            T t7,
01047            T t8,
01048            T t9,
01049            T t10,
01050            T t11,
01051            T t12,
01052            T t13,
01053            T t14,
01054            T t15,
01055            T t16,
01056            T t17,
01057            T t18,
01058            T t19,
01059            T t20,
01060            T t21,
01061            T t22,
01062            T t23,
01063            T t24,
01064            T t25,
01065            T t26,
01066            T t27,
01067            T t28,
01068            T t29,
01069            T t30,
01070            T t31) {
01071    std::vector<T> v;
01072    v.reserve(32);
01073    v.push_back(t0);  v.push_back(t1);  v.push_back(t2);  v.push_back(t3);  v.push_back(t4);
01074    v.push_back(t5);  v.push_back(t6);  v.push_back(t7), v.push_back(t8);  v.push_back(t9);
01075    v.push_back(t10); v.push_back(t11); v.push_back(t12); v.push_back(t13); v.push_back(t14);
01076    v.push_back(t15); v.push_back(t16); v.push_back(t17); v.push_back(t18); v.push_back(t19);
01077    v.push_back(t20); v.push_back(t21); v.push_back(t22); v.push_back(t23); v.push_back(t24);
01078    v.push_back(t25); v.push_back(t26); v.push_back(t27); v.push_back(t28); v.push_back(t29);
01079    v.push_back(t30); v.push_back(t31);
01080    return v;
01081 }
01082 
01083 
01084 template <typename T> class CheckPointer {
01085 public:
01086    static void*
01087    Get(const T& value) { return (void*) &value; }
01088 
01089 };
01090 
01091 template <typename T> class CheckPointer<T*> {
01092 public:
01093    static void*
01094    Get(const T& value) { return (void*) value; }
01095 
01096 };
01097 
01098 }    // namespace Tools
01099 } // namespace Reflex
01100 
01101 #endif // Reflex_Tools

Generated on Tue Jul 5 14:25:54 2011 for ROOT_528-00b_version by  doxygen 1.5.1