Annotation of parser3/src/include/pa_valiased.h, revision 1.2

1.1       paf         1: /*
1.2     ! paf         2:   $Id: pa_valiased.h,v 1.1 2001/03/06 12:22:57 paf Exp $
1.1       paf         3: */
                      4: 
                      5: #ifndef PA_VALIASED_H
                      6: #define PA_VALIASED_H
                      7: 
                      8: #include "pa_value.h"
                      9: 
                     10: class Temp_alias;
                     11: 
                     12: class VAliased : public Value {
                     13:        friend Temp_alias;
                     14: public: // creation
                     15: 
1.2     ! paf        16:        VAliased(Pool& apool, VClass& aclass_alias) : Value(apool), 
        !            17:                fclass_alias(&aclass_alias) {
1.1       paf        18:        }
                     19: 
                     20:        // valiased: this
                     21:        VAliased *get_aliased() { return this; }
                     22: 
                     23: private: // alias handling
                     24: 
                     25:        // VAliased replacement mechanism is 'protected' from direct usage
                     26:        // Temp_alias object enforces paired set/restore
                     27:        VClass *set_alias(VClass *aclass_alias){
1.2     ! paf        28:                VClass *result=fclass_alias;
        !            29:                fclass_alias=aclass_alias;
1.1       paf        30:                return result;
                     31:        }
                     32:        void restore_alias(VClass *aclass_alias) {
1.2     ! paf        33:                fclass_alias=aclass_alias;
1.1       paf        34:        }
                     35: 
                     36: protected:
                     37: 
1.2     ! paf        38:        VClass *fclass_alias;
1.1       paf        39: };
                     40: 
                     41: class Temp_alias {
                     42:        VAliased& vobject;
                     43:        VClass *saved_alias;
                     44: public:
                     45:        Temp_alias(VAliased& avobject, VClass& alias) : 
                     46:                vobject(avobject),
                     47:                saved_alias(avobject.set_alias(&alias)) {
                     48:        }
                     49:        ~Temp_alias() { 
                     50:                vobject.restore_alias(saved_alias); 
                     51:        }
                     52: };
                     53: 
                     54: #endif

E-mail: