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: