Qucs-core
0.0.19
|
00001 /* 00002 * exceptionstack.h - exception stack class definitions 00003 * 00004 * Copyright (C) 2004 Stefan Jahn <stefan@lkcc.org> 00005 * 00006 * This is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation; either version 2, or (at your option) 00009 * any later version. 00010 * 00011 * This software 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 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this package; see the file COPYING. If not, write to 00018 * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, 00019 * Boston, MA 02110-1301, USA. 00020 * 00021 * $Id$ 00022 * 00023 */ 00024 00025 #ifndef __EXCEPTIONSTACK_H__ 00026 #define __EXCEPTIONSTACK_H__ 00027 00028 namespace qucs { 00029 00030 class exception; 00031 00032 class exceptionstack 00033 { 00034 public: 00035 exceptionstack (); 00036 exceptionstack (const exceptionstack &); 00037 ~exceptionstack (); 00038 void push (exception *); 00039 exception * pop (void); 00040 exception * top (void); 00041 void print (const char * prefix = NULL); 00042 00043 private: 00044 exception * root; 00045 }; 00046 00047 // Global exception stack. 00048 extern exceptionstack estack; 00049 00050 } /* namespace qucs */ 00051 00052 // Some macros used with exception handling. 00053 #define try_running() do { 00054 #define catch_exception() } while (0); if (estack.top ()) \ 00055 switch (estack.top()->getCode ()) 00056 #define throw_exception(e) estack.push (e) 00057 #define top_exception() estack.top () 00058 #define pop_exception() estack.pop () 00059 00060 #endif /* __EXCEPTIONSTACK_H__ */