traceable.h

Go to the documentation of this file.
00001 
00016 #ifndef _DLR_COMMON_TRACEABLE_H_
00017 #define _DLR_COMMON_TRACEABLE_H_
00018 
00019 #include <iostream>
00020 #include <sstream>
00021 #include <vector>
00022 #include <dlrCommon/argumentDescription.h>
00023 #include <dlrCommon/exception.h>
00024 
00025 // This file defines some preprocessor macros.  The definitions of
00026 // these macros depend on whether or not we want to generate traces.
00027 // We test here to find out which definitions to use.
00028 #ifndef _DLRCOMMON_USE_TRACEABLE_
00029 
00030 // Looks like we're not supposed to generate traces.  Define the
00031 // macros to do nothing.
00032 
00046 #define BEGIN_TRACEABLE
00047 
00048 
00062 #define END_TRACEABLE(functionName, argumentList)
00063 
00064 
00065 #else /* #ifndef _DLRCOMMON_USE_TRACEABLE_ */
00066 
00080 #define BEGIN_TRACEABLE \
00081   try {
00082 
00083 
00097 #define END_TRACEABLE(functionName, argumentList) \
00098   } catch(dlr::Exception& caughtException) { \
00099     try { \
00100       std::ostringstream dlr_end_traceable_message; \
00101       dlr_end_traceable_message \
00102         << "\n\n  (" << __FILE__ << ", " << __LINE__ << "): " \
00103         << #functionName << "()"; \
00104       dlr_end_traceable_message \
00105         << dlr::describeArguments argumentList; \
00106       caughtException.addTrace(dlr_end_traceable_message.str().c_str()); \
00107     } catch(...) { \
00108       /* Empty. The most likely reason to get here is std::bad_alloc */ \
00109       /* during the call to describeArguments() or during the call to */ \
00110       /* Exception::addTrace(). */ \
00111     } \
00112     /* This throw statment should rethrow the dlr::Exception instance, */ \
00113     /* _not_ any exception caught by the catch(...) statement above. */ \
00114     throw; \
00115   }
00116 
00117 #endif /* #ifndef _DLRCOMMON_USE_TRACEABLE_ */
00118 
00119 
00120 namespace dlr {
00121 
00122   namespace common {
00123     
00132   inline std::string
00133   describeArguments()
00134   {
00135     return std::string("");
00136   }
00137 
00138 
00149   template <class Type0>
00150     std::string
00151     describeArguments(const Type0& argument0)
00152     {
00153       std::ostringstream message;
00154       message << "\n    (arg0): ";
00155       addArgumentDescription(message, argument0);
00156       return message.str();
00157     }
00158 
00159 
00173   template <class Type0, class Type1>
00174     std::string
00175     describeArguments(const Type0& argument0,
00176                       const Type1& argument1)
00177     {
00178       std::ostringstream message;
00179       message << "\n    (arg0): ";
00180       addArgumentDescription(message, argument0);
00181       message << "\n    (arg1): ";
00182       addArgumentDescription(message, argument1);
00183       return message.str();
00184     }
00185 
00186 
00203   template <class Type0, class Type1, class Type2>
00204     std::string
00205     describeArguments(const Type0& argument0,
00206                       const Type1& argument1,
00207                       const Type2& argument2)
00208     {
00209       std::ostringstream message;
00210       message << "\n    (arg0): ";
00211       addArgumentDescription(message, argument0);
00212       message << "\n    (arg1): ";
00213       addArgumentDescription(message, argument1);
00214       message << "\n    (arg2): ";
00215       addArgumentDescription(message, argument2);
00216       return message.str();
00217     }
00218 
00219 
00239   template <class Type0, class Type1, class Type2, class Type3>
00240     std::string
00241     describeArguments(const Type0& argument0,
00242                       const Type1& argument1,
00243                       const Type2& argument2,
00244                       const Type3& argument3)
00245     {
00246       std::ostringstream message;
00247       message << "\n    (arg0): ";
00248       addArgumentDescription(message, argument0);
00249       message << "\n    (arg1): ";
00250       addArgumentDescription(message, argument1);
00251       message << "\n    (arg2): ";
00252       addArgumentDescription(message, argument2);
00253       message << "\n    (arg3): ";
00254       addArgumentDescription(message, argument3);
00255       return message.str();
00256     }
00257 
00258 
00281   template <class Type0, class Type1, class Type2, class Type3, class Type4>
00282     std::string
00283     describeArguments(const Type0& argument0,
00284                       const Type1& argument1,
00285                       const Type2& argument2,
00286                       const Type3& argument3,
00287                       const Type4& argument4)
00288     {
00289       std::ostringstream message;
00290       message << "\n    (arg0): ";
00291       addArgumentDescription(message, argument0);
00292       message << "\n    (arg1): ";
00293       addArgumentDescription(message, argument1);
00294       message << "\n    (arg2): ";
00295       addArgumentDescription(message, argument2);
00296       message << "\n    (arg3): ";
00297       addArgumentDescription(message, argument3);
00298       message << "\n    (arg4): ";
00299       addArgumentDescription(message, argument4);
00300       return message.str();
00301     }
00302 
00303 
00329   template <class Type0, class Type1, class Type2, class Type3, class Type4,
00330     class Type5>
00331     std::string
00332     describeArguments(const Type0& argument0,
00333                       const Type1& argument1,
00334                       const Type2& argument2,
00335                       const Type3& argument3,
00336                       const Type4& argument4,
00337                       const Type5& argument5)
00338     {
00339       std::ostringstream message;
00340       message << "\n    (arg0): ";
00341       addArgumentDescription(message, argument0);
00342       message << "\n    (arg1): ";
00343       addArgumentDescription(message, argument1);
00344       message << "\n    (arg2): ";
00345       addArgumentDescription(message, argument2);
00346       message << "\n    (arg3): ";
00347       addArgumentDescription(message, argument3);
00348       message << "\n    (arg4): ";
00349       addArgumentDescription(message, argument4);
00350       message << "\n    (arg5): ";
00351       addArgumentDescription(message, argument5);
00352       return message.str();
00353     }
00354 
00355 
00384   template <class Type0, class Type1, class Type2, class Type3, class Type4,
00385     class Type5, class Type6>
00386     std::string
00387     describeArguments(const Type0& argument0,
00388                       const Type1& argument1,
00389                       const Type2& argument2,
00390                       const Type3& argument3,
00391                       const Type4& argument4,
00392                       const Type5& argument5,
00393                       const Type6& argument6)
00394     {
00395       std::ostringstream message;
00396       message << "\n    (arg0): ";
00397       addArgumentDescription(message, argument0);
00398       message << "\n    (arg1): ";
00399       addArgumentDescription(message, argument1);
00400       message << "\n    (arg2): ";
00401       addArgumentDescription(message, argument2);
00402       message << "\n    (arg3): ";
00403       addArgumentDescription(message, argument3);
00404       message << "\n    (arg4): ";
00405       addArgumentDescription(message, argument4);
00406       message << "\n    (arg5): ";
00407       addArgumentDescription(message, argument5);
00408       message << "\n    (arg6): ";
00409       addArgumentDescription(message, argument6);
00410       return message.str();
00411     }
00412 
00413 
00445   template <class Type0, class Type1, class Type2, class Type3, class Type4,
00446     class Type5, class Type6, class Type7>          
00447     std::string
00448     describeArguments(const Type0& argument0,
00449                       const Type1& argument1,
00450                       const Type2& argument2,
00451                       const Type3& argument3,
00452                       const Type4& argument4,
00453                       const Type5& argument5,
00454                       const Type6& argument6,
00455                       const Type7& argument7)
00456     {
00457       std::ostringstream message;
00458       message << "\n    (arg0): ";
00459       addArgumentDescription(message, argument0);
00460       message << "\n    (arg1): ";
00461       addArgumentDescription(message, argument1);
00462       message << "\n    (arg2): ";
00463       addArgumentDescription(message, argument2);
00464       message << "\n    (arg3): ";
00465       addArgumentDescription(message, argument3);
00466       message << "\n    (arg4): ";
00467       addArgumentDescription(message, argument4);
00468       message << "\n    (arg5): ";
00469       addArgumentDescription(message, argument5);
00470       message << "\n    (arg6): ";
00471       addArgumentDescription(message, argument6);
00472       message << "\n    (arg7): ";
00473       addArgumentDescription(message, argument7);
00474       return message.str();
00475     }
00476 
00477 
00512   template <class Type0, class Type1, class Type2, class Type3, class Type4,
00513     class Type5, class Type6, class Type7, class Type8>
00514     std::string
00515     describeArguments(const Type0& argument0,
00516                       const Type1& argument1,
00517                       const Type2& argument2,
00518                       const Type3& argument3,
00519                       const Type4& argument4,
00520                       const Type5& argument5,
00521                       const Type6& argument6,
00522                       const Type7& argument7,
00523                       const Type8& argument8)
00524     {
00525       std::ostringstream message;
00526       message << "\n    (arg0): ";
00527       addArgumentDescription(message, argument0);
00528       message << "\n    (arg1): ";
00529       addArgumentDescription(message, argument1);
00530       message << "\n    (arg2): ";
00531       addArgumentDescription(message, argument2);
00532       message << "\n    (arg3): ";
00533       addArgumentDescription(message, argument3);
00534       message << "\n    (arg4): ";
00535       addArgumentDescription(message, argument4);
00536       message << "\n    (arg5): ";
00537       addArgumentDescription(message, argument5);
00538       message << "\n    (arg6): ";
00539       addArgumentDescription(message, argument6);
00540       message << "\n    (arg7): ";
00541       addArgumentDescription(message, argument7);
00542       message << "\n    (arg8): ";
00543       addArgumentDescription(message, argument8);
00544       return message.str();
00545     }
00546 
00547 
00585   template <class Type0, class Type1, class Type2, class Type3, class Type4,
00586     class Type5, class Type6, class Type7, class Type8, class Type9>
00587     std::string
00588     describeArguments(const Type0& argument0,
00589                       const Type1& argument1,
00590                       const Type2& argument2,
00591                       const Type3& argument3,
00592                       const Type4& argument4,
00593                       const Type5& argument5,
00594                       const Type6& argument6,
00595                       const Type7& argument7,
00596                       const Type8& argument8,
00597                       const Type9& argument9)
00598     {
00599       std::ostringstream message;
00600       message << "\n    (arg0): ";
00601       addArgumentDescription(message, argument0);
00602       message << "\n    (arg1): ";
00603       addArgumentDescription(message, argument1);
00604       message << "\n    (arg2): ";
00605       addArgumentDescription(message, argument2);
00606       message << "\n    (arg3): ";
00607       addArgumentDescription(message, argument3);
00608       message << "\n    (arg4): ";
00609       addArgumentDescription(message, argument4);
00610       message << "\n    (arg5): ";
00611       addArgumentDescription(message, argument5);
00612       message << "\n    (arg6): ";
00613       addArgumentDescription(message, argument6);
00614       message << "\n    (arg7): ";
00615       addArgumentDescription(message, argument7);
00616       message << "\n    (arg8): ";
00617       addArgumentDescription(message, argument8);
00618       message << "\n    (arg9): ";
00619       addArgumentDescription(message, argument9);
00620       return message.str();
00621     }
00622 
00623 
00664   template <class Type0, class Type1, class Type2, class Type3, class Type4,
00665     class Type5, class Type6, class Type7, class Type8, class Type9,
00666     class Type10>
00667     std::string
00668     describeArguments(const Type0& argument0,
00669                       const Type1& argument1,
00670                       const Type2& argument2,
00671                       const Type3& argument3,
00672                       const Type4& argument4,
00673                       const Type5& argument5,
00674                       const Type6& argument6,
00675                       const Type7& argument7,
00676                       const Type8& argument8,
00677                       const Type9& argument9,
00678                       const Type10& argument10)
00679     {
00680       std::ostringstream message;
00681       message << "\n    (arg0): ";
00682       addArgumentDescription(message, argument0);
00683       message << "\n    (arg1): ";
00684       addArgumentDescription(message, argument1);
00685       message << "\n    (arg2): ";
00686       addArgumentDescription(message, argument2);
00687       message << "\n    (arg3): ";
00688       addArgumentDescription(message, argument3);
00689       message << "\n    (arg4): ";
00690       addArgumentDescription(message, argument4);
00691       message << "\n    (arg5): ";
00692       addArgumentDescription(message, argument5);
00693       message << "\n    (arg6): ";
00694       addArgumentDescription(message, argument6);
00695       message << "\n    (arg7): ";
00696       addArgumentDescription(message, argument7);
00697       message << "\n    (arg8): ";
00698       addArgumentDescription(message, argument8);
00699       message << "\n    (arg9): ";
00700       addArgumentDescription(message, argument9);
00701       message << "\n    (arg10): ";
00702       addArgumentDescription(message, argument10);
00703       return message.str();
00704     }
00705 
00706 
00750   template <class Type0, class Type1, class Type2, class Type3, class Type4,
00751     class Type5, class Type6, class Type7, class Type8, class Type9,
00752     class Type10, class Type11>
00753     std::string
00754     describeArguments(const Type0& argument0,
00755                       const Type1& argument1,
00756                       const Type2& argument2,
00757                       const Type3& argument3,
00758                       const Type4& argument4,
00759                       const Type5& argument5,
00760                       const Type6& argument6,
00761                       const Type7& argument7,
00762                       const Type8& argument8,
00763                       const Type9& argument9,
00764                       const Type10& argument10,
00765                       const Type11& argument11)
00766     {
00767       std::ostringstream message;
00768       message << "\n    (arg0): ";
00769       addArgumentDescription(message, argument0);
00770       message << "\n    (arg1): ";
00771       addArgumentDescription(message, argument1);
00772       message << "\n    (arg2): ";
00773       addArgumentDescription(message, argument2);
00774       message << "\n    (arg3): ";
00775       addArgumentDescription(message, argument3);
00776       message << "\n    (arg4): ";
00777       addArgumentDescription(message, argument4);
00778       message << "\n    (arg5): ";
00779       addArgumentDescription(message, argument5);
00780       message << "\n    (arg6): ";
00781       addArgumentDescription(message, argument6);
00782       message << "\n    (arg7): ";
00783       addArgumentDescription(message, argument7);
00784       message << "\n    (arg8): ";
00785       addArgumentDescription(message, argument8);
00786       message << "\n    (arg9): ";
00787       addArgumentDescription(message, argument9);
00788       message << "\n    (arg10): ";
00789       addArgumentDescription(message, argument10);
00790       message << "\n    (arg11): ";
00791       addArgumentDescription(message, argument11);
00792       return message.str();
00793     }
00794 
00795 
00842   template <class Type0, class Type1, class Type2, class Type3, class Type4,
00843     class Type5, class Type6, class Type7, class Type8, class Type9,
00844     class Type10, class Type11, class Type12>
00845     std::string
00846     describeArguments(const Type0& argument0,
00847                       const Type1& argument1,
00848                       const Type2& argument2,
00849                       const Type3& argument3,
00850                       const Type4& argument4,
00851                       const Type5& argument5,
00852                       const Type6& argument6,
00853                       const Type7& argument7,
00854                       const Type8& argument8,
00855                       const Type9& argument9,
00856                       const Type10& argument10,
00857                       const Type11& argument11,
00858                       const Type12& argument12)
00859     {
00860       std::ostringstream message;
00861       message << "\n    (arg0): ";
00862       addArgumentDescription(message, argument0);
00863       message << "\n    (arg1): ";
00864       addArgumentDescription(message, argument1);
00865       message << "\n    (arg2): ";
00866       addArgumentDescription(message, argument2);
00867       message << "\n    (arg3): ";
00868       addArgumentDescription(message, argument3);
00869       message << "\n    (arg4): ";
00870       addArgumentDescription(message, argument4);
00871       message << "\n    (arg5): ";
00872       addArgumentDescription(message, argument5);
00873       message << "\n    (arg6): ";
00874       addArgumentDescription(message, argument6);
00875       message << "\n    (arg7): ";
00876       addArgumentDescription(message, argument7);
00877       message << "\n    (arg8): ";
00878       addArgumentDescription(message, argument8);
00879       message << "\n    (arg9): ";
00880       addArgumentDescription(message, argument9);
00881       message << "\n    (arg10): ";
00882       addArgumentDescription(message, argument10);
00883       message << "\n    (arg11): ";
00884       addArgumentDescription(message, argument11);
00885       message << "\n    (arg12): ";
00886       addArgumentDescription(message, argument12);
00887       return message.str();
00888     }
00889 
00890 
00940   template <class Type0, class Type1, class Type2, class Type3, class Type4,
00941     class Type5, class Type6, class Type7, class Type8, class Type9,
00942     class Type10, class Type11, class Type12, class Type13>
00943     std::string
00944     describeArguments(const Type0& argument0,
00945                       const Type1& argument1,
00946                       const Type2& argument2,
00947                       const Type3& argument3,
00948                       const Type4& argument4,
00949                       const Type5& argument5,
00950                       const Type6& argument6,
00951                       const Type7& argument7,
00952                       const Type8& argument8,
00953                       const Type9& argument9,
00954                       const Type10& argument10,
00955                       const Type11& argument11,
00956                       const Type12& argument12,
00957                       const Type13& argument13)
00958     {
00959       std::ostringstream message;
00960       message << "\n    (arg0): ";
00961       addArgumentDescription(message, argument0);
00962       message << "\n    (arg1): ";
00963       addArgumentDescription(message, argument1);
00964       message << "\n    (arg2): ";
00965       addArgumentDescription(message, argument2);
00966       message << "\n    (arg3): ";
00967       addArgumentDescription(message, argument3);
00968       message << "\n    (arg4): ";
00969       addArgumentDescription(message, argument4);
00970       message << "\n    (arg5): ";
00971       addArgumentDescription(message, argument5);
00972       message << "\n    (arg6): ";
00973       addArgumentDescription(message, argument6);
00974       message << "\n    (arg7): ";
00975       addArgumentDescription(message, argument7);
00976       message << "\n    (arg8): ";
00977       addArgumentDescription(message, argument8);
00978       message << "\n    (arg9): ";
00979       addArgumentDescription(message, argument9);
00980       message << "\n    (arg10): ";
00981       addArgumentDescription(message, argument10);
00982       message << "\n    (arg11): ";
00983       addArgumentDescription(message, argument11);
00984       message << "\n    (arg12): ";
00985       addArgumentDescription(message, argument12);
00986       message << "\n    (arg13): ";
00987       addArgumentDescription(message, argument13);
00988       return message.str();
00989     }
00990 
00991 
01044   template <class Type0, class Type1, class Type2, class Type3, class Type4,
01045     class Type5, class Type6, class Type7, class Type8, class Type9,
01046     class Type10, class Type11, class Type12, class Type13, class Type14>
01047     std::string
01048     describeArguments(const Type0& argument0,
01049                       const Type1& argument1,
01050                       const Type2& argument2,
01051                       const Type3& argument3,
01052                       const Type4& argument4,
01053                       const Type5& argument5,
01054                       const Type6& argument6,
01055                       const Type7& argument7,
01056                       const Type8& argument8,
01057                       const Type9& argument9,
01058                       const Type10& argument10,
01059                       const Type11& argument11,
01060                       const Type12& argument12,
01061                       const Type13& argument13,
01062                       const Type14& argument14)
01063     {
01064       std::ostringstream message;
01065       message << "\n    (arg0): ";
01066       addArgumentDescription(message, argument0);
01067       message << "\n    (arg1): ";
01068       addArgumentDescription(message, argument1);
01069       message << "\n    (arg2): ";
01070       addArgumentDescription(message, argument2);
01071       message << "\n    (arg3): ";
01072       addArgumentDescription(message, argument3);
01073       message << "\n    (arg4): ";
01074       addArgumentDescription(message, argument4);
01075       message << "\n    (arg5): ";
01076       addArgumentDescription(message, argument5);
01077       message << "\n    (arg6): ";
01078       addArgumentDescription(message, argument6);
01079       message << "\n    (arg7): ";
01080       addArgumentDescription(message, argument7);
01081       message << "\n    (arg8): ";
01082       addArgumentDescription(message, argument8);
01083       message << "\n    (arg9): ";
01084       addArgumentDescription(message, argument9);
01085       message << "\n    (arg10): ";
01086       addArgumentDescription(message, argument10);
01087       message << "\n    (arg11): ";
01088       addArgumentDescription(message, argument11);
01089       message << "\n    (arg12): ";
01090       addArgumentDescription(message, argument12);
01091       message << "\n    (arg13): ";
01092       addArgumentDescription(message, argument13);
01093       message << "\n    (arg14): ";
01094       addArgumentDescription(message, argument14);
01095       return message.str();
01096     }
01097 
01098 
01154   template <class Type0, class Type1, class Type2, class Type3, class Type4,
01155     class Type5, class Type6, class Type7, class Type8, class Type9,
01156     class Type10, class Type11, class Type12, class Type13, class Type14,
01157     class Type15>
01158     std::string
01159     describeArguments(const Type0& argument0,
01160                       const Type1& argument1,
01161                       const Type2& argument2,
01162                       const Type3& argument3,
01163                       const Type4& argument4,
01164                       const Type5& argument5,
01165                       const Type6& argument6,
01166                       const Type7& argument7,
01167                       const Type8& argument8,
01168                       const Type9& argument9,
01169                       const Type10& argument10,
01170                       const Type11& argument11,
01171                       const Type12& argument12,
01172                       const Type13& argument13,
01173                       const Type14& argument14,
01174                       const Type15& argument15)
01175     {
01176       std::ostringstream message;
01177       message << "\n    (arg0): ";
01178       addArgumentDescription(message, argument0);
01179       message << "\n    (arg1): ";
01180       addArgumentDescription(message, argument1);
01181       message << "\n    (arg2): ";
01182       addArgumentDescription(message, argument2);
01183       message << "\n    (arg3): ";
01184       addArgumentDescription(message, argument3);
01185       message << "\n    (arg4): ";
01186       addArgumentDescription(message, argument4);
01187       message << "\n    (arg5): ";
01188       addArgumentDescription(message, argument5);
01189       message << "\n    (arg6): ";
01190       addArgumentDescription(message, argument6);
01191       message << "\n    (arg7): ";
01192       addArgumentDescription(message, argument7);
01193       message << "\n    (arg8): ";
01194       addArgumentDescription(message, argument8);
01195       message << "\n    (arg9): ";
01196       addArgumentDescription(message, argument9);
01197       message << "\n    (arg10): ";
01198       addArgumentDescription(message, argument10);
01199       message << "\n    (arg11): ";
01200       addArgumentDescription(message, argument11);
01201       message << "\n    (arg12): ";
01202       addArgumentDescription(message, argument12);
01203       message << "\n    (arg13): ";
01204       addArgumentDescription(message, argument13);
01205       message << "\n    (arg14): ";
01206       addArgumentDescription(message, argument14);
01207       message << "\n    (arg15): ";
01208       addArgumentDescription(message, argument15);
01209       return message.str();
01210     }
01211 
01212 
01271   template <class Type0, class Type1, class Type2, class Type3, class Type4,
01272     class Type5, class Type6, class Type7, class Type8, class Type9,
01273     class Type10, class Type11, class Type12, class Type13, class Type14,
01274     class Type15, class Type16>
01275     std::string
01276     describeArguments(const Type0& argument0,
01277                       const Type1& argument1,
01278                       const Type2& argument2,
01279                       const Type3& argument3,
01280                       const Type4& argument4,
01281                       const Type5& argument5,
01282                       const Type6& argument6,
01283                       const Type7& argument7,
01284                       const Type8& argument8,
01285                       const Type9& argument9,
01286                       const Type10& argument10,
01287                       const Type11& argument11,
01288                       const Type12& argument12,
01289                       const Type13& argument13,
01290                       const Type14& argument14,
01291                       const Type15& argument15,
01292                       const Type16& argument16)
01293     {
01294       std::ostringstream message;
01295       message << "\n    (arg0): ";
01296       addArgumentDescription(message, argument0);
01297       message << "\n    (arg1): ";
01298       addArgumentDescription(message, argument1);
01299       message << "\n    (arg2): ";
01300       addArgumentDescription(message, argument2);
01301       message << "\n    (arg3): ";
01302       addArgumentDescription(message, argument3);
01303       message << "\n    (arg4): ";
01304       addArgumentDescription(message, argument4);
01305       message << "\n    (arg5): ";
01306       addArgumentDescription(message, argument5);
01307       message << "\n    (arg6): ";
01308       addArgumentDescription(message, argument6);
01309       message << "\n    (arg7): ";
01310       addArgumentDescription(message, argument7);
01311       message << "\n    (arg8): ";
01312       addArgumentDescription(message, argument8);
01313       message << "\n    (arg9): ";
01314       addArgumentDescription(message, argument9);
01315       message << "\n    (arg10): ";
01316       addArgumentDescription(message, argument10);
01317       message << "\n    (arg11): ";
01318       addArgumentDescription(message, argument11);
01319       message << "\n    (arg12): ";
01320       addArgumentDescription(message, argument12);
01321       message << "\n    (arg13): ";
01322       addArgumentDescription(message, argument13);
01323       message << "\n    (arg14): ";
01324       addArgumentDescription(message, argument14);
01325       message << "\n    (arg15): ";
01326       addArgumentDescription(message, argument15);
01327       message << "\n    (arg16): ";
01328       addArgumentDescription(message, argument16);
01329       return message.str();
01330     }
01331 
01332 
01394   template <class Type0, class Type1, class Type2, class Type3, class Type4,
01395     class Type5, class Type6, class Type7, class Type8, class Type9,
01396     class Type10, class Type11, class Type12, class Type13, class Type14,
01397     class Type15, class Type16, class Type17>
01398     std::string
01399     describeArguments(const Type0& argument0,
01400                       const Type1& argument1,
01401                       const Type2& argument2,
01402                       const Type3& argument3,
01403                       const Type4& argument4,
01404                       const Type5& argument5,
01405                       const Type6& argument6,
01406                       const Type7& argument7,
01407                       const Type8& argument8,
01408                       const Type9& argument9,
01409                       const Type10& argument10,
01410                       const Type11& argument11,
01411                       const Type12& argument12,
01412                       const Type13& argument13,
01413                       const Type14& argument14,
01414                       const Type15& argument15,
01415                       const Type16& argument16,
01416                       const Type17& argument17)
01417     {
01418       std::ostringstream message;
01419       message << "\n    (arg0): ";
01420       addArgumentDescription(message, argument0);
01421       message << "\n    (arg1): ";
01422       addArgumentDescription(message, argument1);
01423       message << "\n    (arg2): ";
01424       addArgumentDescription(message, argument2);
01425       message << "\n    (arg3): ";
01426       addArgumentDescription(message, argument3);
01427       message << "\n    (arg4): ";
01428       addArgumentDescription(message, argument4);
01429       message << "\n    (arg5): ";
01430       addArgumentDescription(message, argument5);
01431       message << "\n    (arg6): ";
01432       addArgumentDescription(message, argument6);
01433       message << "\n    (arg7): ";
01434       addArgumentDescription(message, argument7);
01435       message << "\n    (arg8): ";
01436       addArgumentDescription(message, argument8);
01437       message << "\n    (arg9): ";
01438       addArgumentDescription(message, argument9);
01439       message << "\n    (arg10): ";
01440       addArgumentDescription(message, argument10);
01441       message << "\n    (arg11): ";
01442       addArgumentDescription(message, argument11);
01443       message << "\n    (arg12): ";
01444       addArgumentDescription(message, argument12);
01445       message << "\n    (arg13): ";
01446       addArgumentDescription(message, argument13);
01447       message << "\n    (arg14): ";
01448       addArgumentDescription(message, argument14);
01449       message << "\n    (arg15): ";
01450       addArgumentDescription(message, argument15);
01451       message << "\n    (arg16): ";
01452       addArgumentDescription(message, argument16);
01453       message << "\n    (arg17): ";
01454       addArgumentDescription(message, argument17);
01455       return message.str();
01456     }
01457 
01458 
01523   template <class Type0, class Type1, class Type2, class Type3, class Type4,
01524     class Type5, class Type6, class Type7, class Type8, class Type9,
01525     class Type10, class Type11, class Type12, class Type13, class Type14,
01526     class Type15, class Type16, class Type17, class Type18>
01527     std::string
01528     describeArguments(const Type0& argument0,
01529                       const Type1& argument1,
01530                       const Type2& argument2,
01531                       const Type3& argument3,
01532                       const Type4& argument4,
01533                       const Type5& argument5,
01534                       const Type6& argument6,
01535                       const Type7& argument7,
01536                       const Type8& argument8,
01537                       const Type9& argument9,
01538                       const Type10& argument10,
01539                       const Type11& argument11,
01540                       const Type12& argument12,
01541                       const Type13& argument13,
01542                       const Type14& argument14,
01543                       const Type15& argument15,
01544                       const Type16& argument16,
01545                       const Type17& argument17,
01546                       const Type18& argument18)
01547     {
01548       std::ostringstream message;
01549       message << "\n    (arg0): ";
01550       addArgumentDescription(message, argument0);
01551       message << "\n    (arg1): ";
01552       addArgumentDescription(message, argument1);
01553       message << "\n    (arg2): ";
01554       addArgumentDescription(message, argument2);
01555       message << "\n    (arg3): ";
01556       addArgumentDescription(message, argument3);
01557       message << "\n    (arg4): ";
01558       addArgumentDescription(message, argument4);
01559       message << "\n    (arg5): ";
01560       addArgumentDescription(message, argument5);
01561       message << "\n    (arg6): ";
01562       addArgumentDescription(message, argument6);
01563       message << "\n    (arg7): ";
01564       addArgumentDescription(message, argument7);
01565       message << "\n    (arg8): ";
01566       addArgumentDescription(message, argument8);
01567       message << "\n    (arg9): ";
01568       addArgumentDescription(message, argument9);
01569       message << "\n    (arg10): ";
01570       addArgumentDescription(message, argument10);
01571       message << "\n    (arg11): ";
01572       addArgumentDescription(message, argument11);
01573       message << "\n    (arg12): ";
01574       addArgumentDescription(message, argument12);
01575       message << "\n    (arg13): ";
01576       addArgumentDescription(message, argument13);
01577       message << "\n    (arg14): ";
01578       addArgumentDescription(message, argument14);
01579       message << "\n    (arg15): ";
01580       addArgumentDescription(message, argument15);
01581       message << "\n    (arg16): ";
01582       addArgumentDescription(message, argument16);
01583       message << "\n    (arg17): ";
01584       addArgumentDescription(message, argument17);
01585       message << "\n    (arg18): ";
01586       addArgumentDescription(message, argument18);
01587       return message.str();
01588     }
01589 
01590 
01658   template <class Type0, class Type1, class Type2, class Type3, class Type4,
01659     class Type5, class Type6, class Type7, class Type8, class Type9,
01660     class Type10, class Type11, class Type12, class Type13, class Type14,
01661     class Type15, class Type16, class Type17, class Type18, class Type19>
01662     std::string
01663     describeArguments(const Type0& argument0,
01664                       const Type1& argument1,
01665                       const Type2& argument2,
01666                       const Type3& argument3,
01667                       const Type4& argument4,
01668                       const Type5& argument5,
01669                       const Type6& argument6,
01670                       const Type7& argument7,
01671                       const Type8& argument8,
01672                       const Type9& argument9,
01673                       const Type10& argument10,
01674                       const Type11& argument11,
01675                       const Type12& argument12,
01676                       const Type13& argument13,
01677                       const Type14& argument14,
01678                       const Type15& argument15,
01679                       const Type16& argument16,
01680                       const Type17& argument17,
01681                       const Type18& argument18,
01682                       const Type19& argument19)
01683     {
01684       std::ostringstream message;
01685       message << "\n    (arg0): ";
01686       addArgumentDescription(message, argument0);
01687       message << "\n    (arg1): ";
01688       addArgumentDescription(message, argument1);
01689       message << "\n    (arg2): ";
01690       addArgumentDescription(message, argument2);
01691       message << "\n    (arg3): ";
01692       addArgumentDescription(message, argument3);
01693       message << "\n    (arg4): ";
01694       addArgumentDescription(message, argument4);
01695       message << "\n    (arg5): ";
01696       addArgumentDescription(message, argument5);
01697       message << "\n    (arg6): ";
01698       addArgumentDescription(message, argument6);
01699       message << "\n    (arg7): ";
01700       addArgumentDescription(message, argument7);
01701       message << "\n    (arg8): ";
01702       addArgumentDescription(message, argument8);
01703       message << "\n    (arg9): ";
01704       addArgumentDescription(message, argument9);
01705       message << "\n    (arg10): ";
01706       addArgumentDescription(message, argument10);
01707       message << "\n    (arg11): ";
01708       addArgumentDescription(message, argument11);
01709       message << "\n    (arg12): ";
01710       addArgumentDescription(message, argument12);
01711       message << "\n    (arg13): ";
01712       addArgumentDescription(message, argument13);
01713       message << "\n    (arg14): ";
01714       addArgumentDescription(message, argument14);
01715       message << "\n    (arg15): ";
01716       addArgumentDescription(message, argument15);
01717       message << "\n    (arg16): ";
01718       addArgumentDescription(message, argument16);
01719       message << "\n    (arg17): ";
01720       addArgumentDescription(message, argument17);
01721       message << "\n    (arg18): ";
01722       addArgumentDescription(message, argument18);
01723       message << "\n    (arg19): ";
01724       addArgumentDescription(message, argument19);
01725       return message.str();
01726     }
01727 
01728   } // namespace common
01729   
01730 } // namespace dlr
01731 
01732 
01733 /* ======= Declarations to maintain compatibility with legacy code. ======= */
01734 
01735 namespace dlr {
01736 
01737   using common::describeArguments;
01738   
01739 } // namespace dlr
01740 
01741 #endif /* #ifndef _DLR_COMMON_TRACEABLE_H_ */

Generated on Mon Jul 9 20:34:03 2007 for dlrLibs Utility Libraries by  doxygen 1.5.2