Annotation of parser3/src/include/pa_request.h, revision 1.5
1.1 paf 1: /*
1.5 ! paf 2: $Id: pa_request.h,v 1.4 2001/01/30 13:07:31 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"
1.5 ! paf 10: #include "pa_hash.h"
1.4 paf 11:
12: class Local_request_exception;
1.1 paf 13:
14: class Request {
1.4 paf 15: friend Local_request_exception;
1.1 paf 16: public:
17:
1.5 ! paf 18: Request(Pool& apool) :
! 19: fpool(apool),
! 20: fclasses(new(apool) Hash(apool)) {
! 21: }
1.3 paf 22: ~Request() {}
1.1 paf 23:
1.5 ! paf 24: // IMPORTANT: don't use pool without Local_request_exception
1.4 paf 25: Pool& pool() { return fpool; }
26:
27: Exception& exception() { return *fexception; }
1.5 ! paf 28: Hash& classes() { return *fclasses; }
1.4 paf 29:
1.3 paf 30: protected:
1.1 paf 31:
1.4 paf 32: // all request' objects are allocated in this pool
1.3 paf 33: Pool& fpool;
1.4 paf 34:
35: // exception replacement mechanism is protected from direct usage
36: // Local_request_exception object enforces paired set/restore
37: Exception *set_exception(Exception *e){
38: Exception *r=fexception;
39: fexception=e;
40: return r;
41: }
42: void restore_exception(Exception *e) {
43: fexception=e;
44: }
45:
46: private:
47:
48: // current request's exception object
49: Exception *fexception;
1.5 ! paf 50:
! 51: // defined classes
! 52: Hash *fclasses;
1.4 paf 53:
1.1 paf 54: };
1.4 paf 55:
56: class Local_request_exception {
57: Request request;
58: Exception *saved_exception;
59: public:
60: Local_request_exception(Request& arequest, Exception& exception) :
61: request(arequest),
62: saved_exception(arequest.set_exception(&exception)) {}
63: ~Local_request_exception() { request.restore_exception(saved_exception); }
64: };
65:
1.1 paf 66:
67: #endif
E-mail: