Annotation of parser3/src/types/pa_valiased.h, revision 1.4
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.4 ! paf 6: $Id: pa_valiased.h,v 1.3 2001/03/13 13:43:31 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:
1.4 ! paf 16: class VAliased : public Value2 {
1.1 paf 17: friend Temp_alias;
18: public: // creation
19:
1.3 paf 20: VAliased(Pool& apool, VStateless_class& aclass_alias) : Value(apool),
1.1 paf 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
1.3 paf 31: VStateless_class *set_alias(VStateless_class *aclass_alias) {
32: VStateless_class *result=fclass_alias;
1.1 paf 33: fclass_alias=aclass_alias;
34: return result;
35: }
1.3 paf 36: void restore_alias(VStateless_class *aclass_alias) {
1.1 paf 37: fclass_alias=aclass_alias;
38: }
39:
40: protected:
41:
1.3 paf 42: VStateless_class *fclass_alias;
1.1 paf 43: };
44:
45: class Temp_alias {
46: VAliased& vobject;
1.3 paf 47: VStateless_class *saved_alias;
1.1 paf 48: public:
1.3 paf 49: Temp_alias(VAliased& avobject, VStateless_class& alias) :
1.1 paf 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: