00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00038 #ifndef BLOCXX_FUNC_NAME_PRINTER_HPP
00039 #define BLOCXX_FUNC_NAME_PRINTER_HPP
00040 #include "blocxx/BLOCXX_config.h"
00041 #include "blocxx/Format.hpp"
00042 #include <stdio.h>
00043 #include <unistd.h>
00044
00045
00046
00047
00048 namespace BLOCXX_NAMESPACE
00049 {
00050
00051 class FuncNamePrinter
00052 {
00053 private:
00054 const char* m_funcName;
00055 public:
00056
00057 FuncNamePrinter(const char* funcName) : m_funcName(funcName)
00058 {
00059 fprintf(stderr, "%d Entering: %s\n", getpid(), funcName);
00060 }
00061 template<typename A>
00062 FuncNamePrinter(const char* funcName, const A& a) : m_funcName(funcName)
00063 {
00064 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00065 Format("(%1)", a).c_str());
00066 }
00067 template<typename A, typename B>
00068 FuncNamePrinter(const char* funcName, const A& a, const B& b) : m_funcName(funcName)
00069 {
00070 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00071 Format("(%1, %2)", a, b).c_str());
00072 }
00073 template<typename A, typename B, typename C>
00074 FuncNamePrinter(const char* funcName, const A& a, const B& b, const C& c) : m_funcName(funcName)
00075 {
00076 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00077 Format("(%1, %2, %3)", a, b, c).c_str());
00078 }
00079 template<typename A, typename B, typename C, typename D>
00080 FuncNamePrinter(const char* funcName, const A& a, const B& b, const C& c, const D& d) : m_funcName(funcName)
00081 {
00082 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00083 Format("(%1, %2, %3, %4)", a, b, c, d).c_str());
00084 }
00085 template<typename A, typename B, typename C, typename D, typename E>
00086 FuncNamePrinter(const char* funcName, const A& a, const B& b, const C& c, const D& d, const E& e) : m_funcName(funcName)
00087 {
00088 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00089 Format("(%1, %2, %3, %4, %5)", a, b, c, d, e).c_str());
00090 }
00091 template<typename A, typename B, typename C, typename D, typename E, typename F>
00092 FuncNamePrinter(const char* funcName, const A& a, const B& b, const C& c, const D& d, const E& e, const F& f) : m_funcName(funcName)
00093 {
00094 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00095 Format("(%1, %2, %3, %4, %5, %6)", a, b, c, d, e, f).c_str());
00096 }
00097 template<typename A, typename B, typename C, typename D, typename E, typename F,
00098 typename G>
00099 FuncNamePrinter(const char* funcName, const A& a, const B& b, const C& c, const D& d, const E& e, const F& f, const G& g) : m_funcName(funcName)
00100 {
00101 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00102 Format("(%1, %2, %3, %4, %5, %6, %7)", a, b, c, d, e, f, g).c_str());
00103 }
00104 template<typename A, typename B, typename C, typename D, typename E, typename F,
00105 typename G, typename H>
00106 FuncNamePrinter(const char* funcName, const A& a, const B& b, const C& c, const D& d, const E& e, const F& f, const G& g, const H& h) : m_funcName(funcName)
00107 {
00108 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00109 Format("(%1, %2, %3, %4, %5, %6, %7, %8)", a, b, c, d, e, f, g, h).c_str());
00110 }
00111 template<typename A, typename B, typename C, typename D, typename E, typename F,
00112 typename G, typename H, typename I>
00113 FuncNamePrinter(const char* funcName, const A& a, const B& b, const C& c, const D& d, const E& e, const F& f, const G& g, const H& h, const I& i) : m_funcName(funcName)
00114 {
00115 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00116 Format("(%1, %2, %3, %4, %5, %6, %7, %8, %9)", a, b, c, d, e, f, g, h, i).c_str());
00117 }
00118 template<typename A, typename B, typename C, typename D, typename E, typename F,
00119 typename G, typename H, typename I, typename J>
00120 FuncNamePrinter(const char* funcName, const A& a, const B& b, const C& c, const D& d, const E& e, const F& f, const G& g, const H& h, const I& i, const J& j) : m_funcName(funcName)
00121 {
00122 fprintf(stderr, "%d Entering: %s\n\t%s\n", getpid(), funcName,
00123 Format("(%1, %2, %3, %4, %5, %6, %7, %8, %9)", a, b, c, d, e, f, g, h, Format("%1, %2", i, j)).c_str());
00124 }
00125 ~FuncNamePrinter()
00126 { fprintf(stderr, "%d Leaving: %s\n", getpid(), m_funcName); }
00127 };
00128
00129 }
00130
00131 #endif //#define BLOCXX_FUNC_NAME_PRINTER_HPP