Crystal Space: csutil/callstack.h Source File (Crystal Space Public API Reference)

| ## Public API Reference

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Related Pages

- File List
- File Members

# csutil/callstack.h

Go to the documentation of this file.

    00001 /*
    00002   Call stack creation helper
    00003   Copyright (C) 2004 by Jorrit Tyberghein
    00004             (C) 2004 by Frank Richter
    00005
    00006   This library is free software; you can redistribute it and/or
    00007   modify it under the terms of the GNU Library General Public
    00008   License as published by the Free Software Foundation; either
    00009   version 2 of the License, or (at your option) any later version.
    00010
    00011   This library is distributed in the hope that it will be useful,
    00012   but WITHOUT ANY WARRANTY; without even the implied warranty of
    00013   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00014   Library General Public License for more details.
    00015
    00016   You should have received a copy of the GNU Library General Public
    00017   License along with this library; if not, write to the Free
    00018   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    00019 */
    00020 #ifndef __CS_UTIL_CALLSTACK_H__
    00021 #define __CS_UTIL_CALLSTACK_H__
    00022
    00027 #include "csextern.h"
    00028 #include "csutil/csstring.h"
    00029
    00031 class CS_CRYSTALSPACE_EXPORT csCallStack
    00032 {
    00033 protected:
    00034   virtual ~csCallStack() {}
    00035 public:
    00039   virtual void Free() = 0;
    00040
    00042   virtual size_t GetEntryCount () = 0;
    00048   virtual bool GetFunctionName (size_t num, csString& str) = 0;
    00054   virtual bool GetLineNumber (size_t num, csString& str) = 0;
    00059   virtual bool GetParameters (size_t num, csString& str) = 0;
    00065   void Print (FILE* f = stdout, bool brief = false)
    00066   {
    00067     for (size_t i = 0; i < GetEntryCount(); i++)
    00068     {
    00069       csString s;
    00070       bool hasFunc = GetFunctionName (i, s);
    00071       fprintf (f, "%s", hasFunc ? (const char*)s : "<unknown>");
    00072       if (!brief && (GetLineNumber (i, s)))
    00073         fprintf (f, " @%s", (const char*)s);
    00074       if (!brief && (GetParameters (i, s)))
    00075         fprintf (f, " (%s)", (const char*)s);
    00076       fprintf (f, "\n");
    00077     }
    00078     fflush (f);
    00079   }
    00085   csString GetEntryAll (size_t i, bool brief = false)
    00086   {
    00087     csString line;
    00088     csString s;
    00089     bool hasFunc = GetFunctionName (i, s);
    00090     line << (hasFunc ? (const char*)s : "<unknown>");
    00091     if (!brief && GetLineNumber (i, s))
    00092       line << " @" << s;
    00093     if (!brief && GetParameters (i, s))
    00094       line << " (" << s << ")";
    00095     return line;
    00096   }
    00097 };
    00098
    00100 class CS_CRYSTALSPACE_EXPORT csCallStackHelper
    00101 {
    00102 public:
    00114   static csCallStack* CreateCallStack (int skip = 0, bool fast = false);
    00115 };
    00116
    00117 #endif // __CS_UTIL_CALLSTACK_H__