Annotation of parser3/src/types/pa_vxnode.h, revision 1.9
1.1 parser 1: /** @file
1.3 parser 2: Parser: @b xnode parser class decl.
1.1 parser 3:
4: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
1.8 paf 5: Author: Alexander Petrosyan <paf@design.ru> (http://paf.design.ru)
1.1 parser 6:
1.9 ! paf 7: $Id: pa_vxnode.h,v 1.8 2001/11/05 11:46:35 paf Exp $
1.1 parser 8: */
9:
10: #ifndef PA_VXNODE_H
11: #define PA_VXNODE_H
12:
13: #include "classes.h"
14: #include "pa_common.h"
15: #include "pa_vstateless_object.h"
16:
1.4 parser 17: // defines
18:
19: #define VXNODE_TYPE "xnode"
20:
21: // externals
22:
1.1 parser 23: extern Methoded *Xnode_class;
24:
25: //void VXnode_cleanup(void *);
26:
1.9 ! paf 27: /// value of type 'xnode'. implemented with GdomeNode
1.1 parser 28: class VXnode : public VStateless_object {
1.7 parser 29: friend void VXnode_cleanup(void *);
1.1 parser 30: public: // Value
31:
1.4 parser 32: const char *type() const { return VXNODE_TYPE; }
1.2 parser 33:
34: /// VXnode: true
35: bool as_bool() const { return true; }
36:
37: /// VXnode: true
38: Value *as_expr_result(bool return_string_as_is=false) { return NEW VBool(pool(), as_bool()); }
1.1 parser 39:
40: /// VXnode: $CLASS,$method, fields
1.4 parser 41: Value *get_element(const String& name);
1.1 parser 42:
43: protected: // VAliased
44:
45: /// disable .CLASS element. @see VAliased::get_element
46: bool hide_class() { return true; }
47:
48: public: // usage
49:
1.9 ! paf 50: VXnode(Pool& apool, GdomeNode *anode, VStateless_class& abase=*Xnode_class) :
! 51: VStateless_object(apool, abase) {
! 52: GdomeException exc;
! 53: if(fnode=anode)
! 54: gdome_n_ref(fnode, &exc);
! 55:
1.7 parser 56: register_cleanup(VXnode_cleanup, this);
1.1 parser 57: }
1.9 ! paf 58: protected:
! 59: ~VXnode() {
! 60: GdomeException exc;
! 61: if(fnode)
! 62: gdome_n_unref(fnode, &exc);
1.7 parser 63: }
1.1 parser 64: public:
65:
1.9 ! paf 66: void set_node(GdomeNode *anode, bool aowns_node) {
! 67: GdomeException exc;
! 68: if(fnode)
! 69: gdome_n_unref(fnode, &exc);
1.7 parser 70:
1.9 ! paf 71: gdome_n_ref(fnode=anode, &exc);
1.7 parser 72: }
1.1 parser 73:
74: public: // VXnode
1.9 ! paf 75: virtual GdomeNode *get_node(Pool& pool, const String *source) {
1.1 parser 76: if(!fnode)
1.6 parser 77: throw Exception(0, 0,
1.1 parser 78: source,
79: "can not be applied to uninitialized instance");
1.5 parser 80:
1.9 ! paf 81: return fnode;
1.1 parser 82: }
83:
84: private:
85:
1.9 ! paf 86: GdomeNode *fnode;
1.1 parser 87:
88: };
89:
90: #endif
E-mail: