Annotation of parser3/src/types/pa_vxnode.h, revision 1.8
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.8 ! paf 7: $Id: pa_vxnode.h,v 1.7 2001/10/19 14:56:17 parser 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:
17: #include <XalanDOM/XalanNode.hpp>
18: #include <PlatformSupport/XSLException.hpp>
19:
1.4 parser 20: // defines
21:
22: #define VXNODE_TYPE "xnode"
23:
24: // externals
25:
1.1 parser 26: extern Methoded *Xnode_class;
27:
28: //void VXnode_cleanup(void *);
29:
1.3 parser 30: /// value of type 'xnode'. implemented with XalanNode
1.1 parser 31: class VXnode : public VStateless_object {
1.7 parser 32: friend void VXnode_cleanup(void *);
1.1 parser 33: public: // Value
34:
1.4 parser 35: const char *type() const { return VXNODE_TYPE; }
1.2 parser 36:
37: /// VXnode: true
38: bool as_bool() const { return true; }
39:
40: /// VXnode: true
41: Value *as_expr_result(bool return_string_as_is=false) { return NEW VBool(pool(), as_bool()); }
1.1 parser 42:
43: /// VXnode: $CLASS,$method, fields
1.4 parser 44: Value *get_element(const String& name);
1.1 parser 45:
46: protected: // VAliased
47:
48: /// disable .CLASS element. @see VAliased::get_element
49: bool hide_class() { return true; }
50:
51: public: // usage
52:
1.7 parser 53: VXnode(Pool& apool, XalanNode *anode, bool aowns_node, VStateless_class& abase=*Xnode_class) :
1.1 parser 54: VStateless_object(apool, abase),
1.7 parser 55: fnode(anode), fowns_node(aowns_node) {
56: register_cleanup(VXnode_cleanup, this);
1.1 parser 57: }
58: private:
1.7 parser 59: void cleanup() {
60: if(fowns_node)
61: delete fnode;
62: }
1.1 parser 63: public:
64:
1.7 parser 65: void set_node(XalanNode& anode, bool aowns_node) {
66: if(fowns_node)
67: delete fnode;
68:
69: fnode=&anode;
70: fowns_node=aowns_node;
71: }
1.1 parser 72:
73: public: // VXnode
74: virtual XalanNode &get_node(Pool& pool, const String *source) {
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.1 parser 80: return *fnode;
81: }
82:
83: private:
84:
1.7 parser 85: bool fowns_node;
1.1 parser 86: XalanNode *fnode;
87:
88: };
89:
90: #endif
E-mail: