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: