Annotation of parser3/src/types/pa_vxnode.h, revision 1.18
1.1 parser 1: /** @file
1.3 parser 2: Parser: @b xnode parser class decl.
1.1 parser 3:
1.11 paf 4: Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com)
1.12 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 parser 6: */
7:
8: #ifndef PA_VXNODE_H
9: #define PA_VXNODE_H
1.15 paf 10:
1.18 ! paf 11: static const char* IDENT_VXNODE_H="$Date: 2002/08/12 10:32:54 $";
1.1 parser 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.14 paf 33: VStateless_class *get_class() { return Xnode_class; }
1.2 parser 34:
35: /// VXnode: true
36: bool as_bool() const { return true; }
37:
38: /// VXnode: true
39: Value *as_expr_result(bool return_string_as_is=false) { return NEW VBool(pool(), as_bool()); }
1.1 parser 40:
41: /// VXnode: $CLASS,$method, fields
1.18 ! paf 42: Value *get_element(const String& aname, Value *aself);
1.1 parser 43:
44: public: // usage
45:
1.14 paf 46: VXnode(Pool& apool, GdomeNode *anode) :
47: VStateless_object(apool),
1.10 paf 48: fnode(anode/*not adding ref, owning a node*/) {
1.9 paf 49: GdomeException exc;
50:
1.7 parser 51: register_cleanup(VXnode_cleanup, this);
1.1 parser 52: }
1.9 paf 53: protected:
54: ~VXnode() {
55: GdomeException exc;
56: if(fnode)
57: gdome_n_unref(fnode, &exc);
1.7 parser 58: }
1.1 parser 59: public:
60:
1.9 paf 61: void set_node(GdomeNode *anode, bool aowns_node) {
62: GdomeException exc;
63: if(fnode)
64: gdome_n_unref(fnode, &exc);
1.7 parser 65:
1.9 paf 66: gdome_n_ref(fnode=anode, &exc);
1.7 parser 67: }
1.1 parser 68:
69: public: // VXnode
1.10 paf 70: virtual GdomeNode *get_node(const String *source) {
1.1 parser 71: if(!fnode)
1.13 paf 72: throw Exception(0,
1.1 parser 73: source,
74: "can not be applied to uninitialized instance");
1.5 parser 75:
1.9 paf 76: return fnode;
1.1 parser 77: }
78:
79: private:
80:
1.9 paf 81: GdomeNode *fnode;
1.1 parser 82:
83: };
84:
85: #endif
E-mail: