Annotation of parser3/src/types/pa_valiased.h, revision 1.1
1.1 ! paf 1: /*
! 2: Parser
! 3: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
! 4: Author: Alexander Petrosyan <paf@design.ru>
! 5:
! 6: $Id: pa_valiased.h,v 1.3 2001/03/10 16:34:35 paf Exp $
! 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: