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
00026
00027
00028 #ifndef _DLRCOMMON_USE_TRACEABLE_
00029
00030
00031
00032
00046 #define BEGIN_TRACEABLE
00047
00048
00062 #define END_TRACEABLE(functionName, argumentList)
00063
00064
00065 #else
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 \
00109 \
00110 \
00111 } \
00112 \
00113 \
00114 throw; \
00115 }
00116
00117 #endif
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 }
01729
01730 }
01731
01732
01733
01734
01735 namespace dlr {
01736
01737 using common::describeArguments;
01738
01739 }
01740
01741 #endif