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

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.2     ! paf         6:        $Id: pa_valiased.h,v 1.1 2001/03/11 07:52:44 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: 
                     20:        VAliased(Pool& apool, VClass& aclass_alias) : Value(apool), 
                     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
                     31:        VClass *set_alias(VClass *aclass_alias){
                     32:                VClass *result=fclass_alias;
                     33:                fclass_alias=aclass_alias;
                     34:                return result;
                     35:        }
                     36:        void restore_alias(VClass *aclass_alias) {
                     37:                fclass_alias=aclass_alias;
                     38:        }
                     39: 
                     40: protected:
                     41: 
                     42:        VClass *fclass_alias;
                     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: