Annotation of parser3/src/include/pa_request.h, revision 1.4
1.1 paf 1: /*
1.4 ! paf 2: $Id: pa_request.h,v 1.3 2001/01/30 11:51:07 paf Exp $
1.1 paf 3: */
4:
5: #ifndef PA_REQUEST_H
6: #define PA_REQUEST_H
7:
8: #include "pa_pool.h"
1.4 ! paf 9: #include "pa_exception.h"
! 10:
! 11: class Local_request_exception;
1.1 paf 12:
13: class Request {
1.4 ! paf 14: friend Local_request_exception;
1.1 paf 15: public:
16:
1.3 paf 17: Request(Pool& apool) : fpool(apool) {}
18: ~Request() {}
1.1 paf 19:
1.4 ! paf 20: Pool& pool() { return fpool; }
! 21:
! 22: Exception& exception() { return *fexception; }
! 23:
1.3 paf 24: protected:
1.1 paf 25:
1.4 ! paf 26: // all request' objects are allocated in this pool
1.3 paf 27: Pool& fpool;
1.4 ! paf 28:
! 29: // exception replacement mechanism is protected from direct usage
! 30: // Local_request_exception object enforces paired set/restore
! 31: Exception *set_exception(Exception *e){
! 32: Exception *r=fexception;
! 33: fexception=e;
! 34: return r;
! 35: }
! 36: void restore_exception(Exception *e) {
! 37: fexception=e;
! 38: }
! 39:
! 40: private:
! 41:
! 42: // current request's exception object
! 43: Exception *fexception;
! 44:
1.1 paf 45: };
1.4 ! paf 46:
! 47: class Local_request_exception {
! 48: Request request;
! 49: Exception *saved_exception;
! 50: public:
! 51: Local_request_exception(Request& arequest, Exception& exception) :
! 52: request(arequest),
! 53: saved_exception(arequest.set_exception(&exception)) {}
! 54: ~Local_request_exception() { request.restore_exception(saved_exception); }
! 55: };
! 56:
1.1 paf 57:
58: #endif
E-mail: