Annotation of parser3/src/types/pa_valiased.h, revision 1.3

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

E-mail: