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

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: 
1.12    ! paf         7:        $Id: pa_vxnode.h,v 1.11 2002/02/08 07:27:55 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) : 
1.10      paf        51:                VStateless_object(apool, abase),
                     52:                fnode(anode/*not adding ref, owning a node*/) {
1.9       paf        53:                GdomeException exc;
                     54: 
1.7       parser     55:                register_cleanup(VXnode_cleanup, this);
1.1       parser     56:        }
1.9       paf        57: protected:
                     58:        ~VXnode() {
                     59:                GdomeException exc;
                     60:                if(fnode)                       
                     61:                        gdome_n_unref(fnode, &exc);
1.7       parser     62:        }
1.1       parser     63: public:
                     64: 
1.9       paf        65:        void set_node(GdomeNode *anode, bool aowns_node) { 
                     66:                GdomeException exc;
                     67:                if(fnode)                       
                     68:                        gdome_n_unref(fnode, &exc);
1.7       parser     69: 
1.9       paf        70:                gdome_n_ref(fnode=anode, &exc);
1.7       parser     71:        }
1.1       parser     72: 
                     73: public: // VXnode
1.10      paf        74:        virtual GdomeNode *get_node(const String *source) { 
1.1       parser     75:                if(!fnode)
1.6       parser     76:                        throw Exception(0, 0,
1.1       parser     77:                                source,
                     78:                                "can not be applied to uninitialized instance");
1.5       parser     79: 
1.9       paf        80:                return fnode; 
1.1       parser     81:        }
                     82: 
                     83: private:
                     84: 
1.9       paf        85:        GdomeNode *fnode;
1.1       parser     86: 
                     87: };
                     88: 
                     89: #endif

E-mail: