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

1.1       paf         1: /*
1.3     ! paf         2:        Parser
        !             3:        Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
        !             4:        Author: Alexander Petrosyan <paf@design.ru>
        !             5: 
        !             6:        $Id: pa_string.C,v 1.35 2001/03/10 12:12:51 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.2       paf        20:        VAliased(Pool& apool, VClass& aclass_alias) : Value(apool), 
                     21:                fclass_alias(&aclass_alias) {
1.1       paf        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
                     31:        VClass *set_alias(VClass *aclass_alias){
1.2       paf        32:                VClass *result=fclass_alias;
                     33:                fclass_alias=aclass_alias;
1.1       paf        34:                return result;
                     35:        }
                     36:        void restore_alias(VClass *aclass_alias) {
1.2       paf        37:                fclass_alias=aclass_alias;
1.1       paf        38:        }
                     39: 
                     40: protected:
                     41: 
1.2       paf        42:        VClass *fclass_alias;
1.1       paf        43: };
                     44: 
                     45: class Temp_alias {
                     46:        VAliased& vobject;
                     47:        VClass *saved_alias;
                     48: public:
                     49:        Temp_alias(VAliased& avobject, VClass& alias) : 
                     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: