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: