Annotation of parser3/src/include/pa_valiased.h, revision 1.2
1.1 paf 1: /*
1.2 ! paf 2: $Id: pa_valiased.h,v 1.1 2001/03/06 12:22:57 paf Exp $
1.1 paf 3: */
4:
5: #ifndef PA_VALIASED_H
6: #define PA_VALIASED_H
7:
8: #include "pa_value.h"
9:
10: class Temp_alias;
11:
12: class VAliased : public Value {
13: friend Temp_alias;
14: public: // creation
15:
1.2 ! paf 16: VAliased(Pool& apool, VClass& aclass_alias) : Value(apool),
! 17: fclass_alias(&aclass_alias) {
1.1 paf 18: }
19:
20: // valiased: this
21: VAliased *get_aliased() { return this; }
22:
23: private: // alias handling
24:
25: // VAliased replacement mechanism is 'protected' from direct usage
26: // Temp_alias object enforces paired set/restore
27: VClass *set_alias(VClass *aclass_alias){
1.2 ! paf 28: VClass *result=fclass_alias;
! 29: fclass_alias=aclass_alias;
1.1 paf 30: return result;
31: }
32: void restore_alias(VClass *aclass_alias) {
1.2 ! paf 33: fclass_alias=aclass_alias;
1.1 paf 34: }
35:
36: protected:
37:
1.2 ! paf 38: VClass *fclass_alias;
1.1 paf 39: };
40:
41: class Temp_alias {
42: VAliased& vobject;
43: VClass *saved_alias;
44: public:
45: Temp_alias(VAliased& avobject, VClass& alias) :
46: vobject(avobject),
47: saved_alias(avobject.set_alias(&alias)) {
48: }
49: ~Temp_alias() {
50: vobject.restore_alias(saved_alias);
51: }
52: };
53:
54: #endif
E-mail: