FuncNamePrinter.hpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002 * Copyright (C) 2004 Vintela, Inc. All rights reserved.
00003 * Copyright (C) 2005 Novell, Inc. All rights reserved.
00004 *
00005 * Redistribution and use in source and binary forms, with or without
00006 * modification, are permitted provided that the following conditions are met:
00007 *
00008 *  - Redistributions of source code must retain the above copyright notice,
00009 *    this list of conditions and the following disclaimer.
00010 *
00011 *  - Redistributions in binary form must reproduce the above copyright notice,
00012 *    this list of conditions and the following disclaimer in the documentation
00013 *    and/or other materials provided with the distribution.
00014 *
00015 *  - Neither the name of Vintela, Inc., Novell, Inc., nor the names of its
00016 *    contributors may be used to endorse or promote products derived from this
00017 *    software without specific prior written permission.
00018 *
00019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
00020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00022 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc., Novell, Inc., OR THE 
00023 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
00024 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
00025 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
00026 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
00027 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
00028 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
00029 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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 // The classes and functions defined in this file are not meant for general
00046 // use, they are internal implementation details.  They may change at any time.
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 }; // class FuncNamePrinter
00128 
00129 } // end namespace BLOCXX_NAMESPACE
00130 
00131 #endif //#define BLOCXX_FUNC_NAME_PRINTER_HPP

Generated on Fri Jun 16 15:39:08 2006 for blocxx by  doxygen 1.4.6