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__
Generated for Crystal Space by doxygen 1.4.7