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: