Annotation of parser3/src/types/pa_vxnode.h, revision 1.30.12.2
1.1 parser 1: /** @file
1.3 parser 2: Parser: @b xnode parser class decl.
1.1 parser 3:
1.30.12.1 paf 4: Copyright (c) 2001-2005 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.30.12.2! paf 11: static const char * const IDENT_VXNODE_H="$Date: 2005/08/05 13:03:06 $";
1.1 parser 12:
13: #include "classes.h"
14: #include "pa_common.h"
15: #include "pa_vstateless_object.h"
16:
1.23 paf 17: extern "C" {
1.24 paf 18: #include "libxml/tree.h"
19:
1.25 paf 20: #include "gdome.h"
1.23 paf 21: #include "gdomecore/gdome-xml-node.h"
22: #include "gdomecore/gdome-xml-document.h"
23: };
24:
1.4 parser 25: // defines
26:
27: #define VXNODE_TYPE "xnode"
28:
1.23 paf 29: // helper defines
30:
31: #define gdome_xml_doc_get_xmlDoc(dome_doc) (((_Gdome_xml_Document *)dome_doc)->n)
32:
1.4 parser 33: // externals
34:
1.23 paf 35: extern Methoded* xnode_class;
1.1 parser 36:
1.30 paf 37: // forwards
38:
39: class VXdoc;
40:
1.9 paf 41: /// value of type 'xnode'. implemented with GdomeNode
1.23 paf 42: class VXnode: public VStateless_object, PA_Cleaned {
1.1 parser 43: public: // Value
44:
1.23 paf 45: override const char* type() const { return VXNODE_TYPE; }
46: override VStateless_class* get_class() { return xnode_class; }
1.2 parser 47:
48: /// VXnode: true
1.23 paf 49: override bool as_bool() const { return true; }
1.2 parser 50:
51: /// VXnode: true
1.26 paf 52: override Value& as_expr_result(bool /*return_string_as_is=false*/) { return *new VBool(as_bool()); }
1.1 parser 53:
54: /// VXnode: $CLASS,$method, fields
1.23 paf 55: override Value* get_element(const String& aname, Value& aself, bool /*looking_up*/);
1.1 parser 56:
1.28 paf 57: /// VXnode: $nodeValue
58: override bool put_element(const String& aname, Value* avalue, bool /*replace*/);
59:
1.1 parser 60: public: // usage
61:
1.30 paf 62: VXnode(Request_charsets* acharsets, VXdoc& adocument, GdomeNode* anode) :
1.23 paf 63: fcharsets(acharsets),
1.30.12.2! paf 64: fdocument(adocument)
! 65: {
! 66: assign_node(anode/*not adding ref, owning a node*/);
1.23 paf 67: }
1.9 paf 68:
1.23 paf 69: override ~VXnode() {
1.9 paf 70: GdomeException exc;
1.30.12.2! paf 71: if(fnode) {
1.9 paf 72: gdome_n_unref(fnode, &exc);
1.30.12.2! paf 73: assign_node(0);
! 74: }
1.7 parser 75: }
1.1 parser 76:
1.23 paf 77: public: // VXnode
1.7 parser 78:
1.23 paf 79: virtual GdomeNode* get_node() {
1.1 parser 80: if(!fnode)
1.13 paf 81: throw Exception(0,
1.23 paf 82: 0,
1.1 parser 83: "can not be applied to uninitialized instance");
1.5 parser 84:
1.9 paf 85: return fnode;
1.1 parser 86: }
87:
1.30 paf 88: virtual VXdoc& get_xdoc() {
89: return fdocument;
90: }
91:
1.30.12.2! paf 92: private:
! 93:
! 94: /// hold reference to prevent premature collecting
! 95: void assign_node(GdomeNode *anode) {
! 96: fnode=anode;
! 97:
! 98: gcref_node=fnode?gdome_xml_n_get_xmlNode(fnode):0;
! 99: }
! 100:
1.23 paf 101: protected:
102:
103: Request_charsets* fcharsets;
104:
1.1 parser 105: private:
106:
1.30 paf 107: VXdoc& fdocument;
1.23 paf 108: GdomeNode* fnode;
1.30.12.2! paf 109: xmlNode* gcref_node;
1.1 parser 110: };
111:
112: #endif
E-mail: