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: