DocumentModel.hpp
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:4k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. #ifndef _DOCUMENT_MODEL__HPP_
  2. #define _DOCUMENT_MODEL__HPP_
  3. /****************License************************************************
  4.  * Vocalocity OpenVXI
  5.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License
  8.  * as published by the Free Software Foundation; either version 2
  9.  * of the License, or (at your option) any later version.
  10.  *  
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  19.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  20.  * registered trademarks of Vocalocity, Inc. 
  21.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  22.  * by Vocalocity.
  23.  ***********************************************************************/
  24. #include "VXIvalue.h"
  25. #include "VXML.h"
  26. class VXMLElement;
  27. class VXMLNodeRef;
  28. class VXMLNodeIterator;
  29. class VXMLNodeIteratorData;
  30. class VXMLDocumentRep;
  31. enum DocumentLevel {
  32.   DOCUMENT,         // Current active document
  33.   APPLICATION,      // Root Application
  34.   DEFAULTS          // Default application
  35. };
  36. class VXMLDocumentModel {
  37. public:
  38.   static bool Initialize();
  39.   static void Deinitialize();
  40.   static void CreateHiddenVariable(vxistring &);
  41.   static bool IsHiddenVariable(const vxistring &);
  42.   class OutOfMemory { };
  43.   class InternalError { };
  44. };
  45. class VXMLNode {
  46.   friend class VXMLNodeIterator;
  47. public:
  48.   enum VXMLNodeType {
  49.     Type_VXMLContent,              // This node represents a leaf.
  50.     Type_VXMLElement,              // This node represents a branch.
  51.     Type_VXMLNode                  // This node is not initialized.
  52.   };
  53.   VXMLNode(const VXMLNodeRef * i = NULL) : internals(i) { }
  54.   virtual ~VXMLNode()          { }
  55.   VXMLNode(const VXMLNode & x);
  56.   VXMLNode & operator=(const VXMLNode &);
  57. public:
  58.   VXMLNodeType GetType() const;
  59.   VXMLElement GetParent() const;
  60.   bool operator!=(const VXMLNode &x) const  { return internals != x.internals;}
  61.   bool operator==(const VXMLNode &x) const  { return internals == x.internals;}
  62.   bool operator==(int a) const               { if (a != 0) return false;
  63.                                                return (internals == NULL); }
  64.   bool operator!=(int a) const               { if (a != 0) return false;
  65.                                                return (internals != NULL); }
  66. protected:
  67.   const VXMLNodeRef * internals;
  68. };
  69. class VXMLNodeIterator {
  70. public: // Creators
  71.   VXMLNodeIterator(const VXMLNode &);
  72.   ~VXMLNodeIterator();
  73. public: // Manipulators
  74.   void operator++();                 // Increments iterator to next child
  75.   VXMLNode operator*() const;        // Returns corresponding node
  76.   operator const void *() const;     // Returns 0 if iteration is invalid
  77.   void reset();                      // Resets iterator to first child
  78. private: // not implemented
  79.   VXMLNodeIterator(const VXMLNodeIterator &);
  80.   VXMLNodeIterator & operator=(const VXMLNodeIterator &);
  81.   VXMLNodeIteratorData * data;
  82. };
  83. class VXMLContent : public VXMLNode {
  84. public:
  85.   virtual ~VXMLContent() { }
  86.   VXMLContent(const VXMLNodeRef * ref = NULL) : VXMLNode(ref) { }
  87. public:
  88.   const vxistring & GetValue() const;
  89.   VXIulong GetSSMLHeaderLen() const;
  90. private: // Not implemented
  91.   VXMLContent(const VXMLContent & x);
  92.   VXMLContent & operator=(const VXMLNode &);
  93.   VXMLContent(const VXMLElement * p);
  94. };
  95. class VXMLElement : public VXMLNode {
  96. public: // Creation & comparison functions
  97.   VXMLElement(const VXMLNodeRef * ref = NULL);
  98.   VXMLElement(const VXMLElement & x);
  99.   virtual ~VXMLElement() { }
  100.   // Navigation functions (moving up & down the tree)
  101.   bool hasChildren() const;
  102.   // Information retrieval
  103.   VXMLElementType GetName() const;
  104.   bool GetAttribute(VXMLAttributeType key, vxistring & attr) const;
  105.   DocumentLevel GetDocumentLevel() const;
  106. private:
  107.   VXMLElement & operator=(const VXMLNode &);
  108. };
  109. #endif // #ifndef _DOCUMENT_MODEL__HPP_