Annotation of parser3/src/types/pa_vxnode.h, revision 1.17

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.17    ! paf        11: static const char* IDENT_VXNODE_H="$Date: 2002/08/01 11:41:25 $";
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.4       parser     42:        Value *get_element(const String& name);
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: