Op.hpp
上传用户:huihehuasu
上传日期:2007-01-10
资源大小:6948k
文件大小:11k
源码类别:

xml/soap/webservice

开发平台:

C/C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 2001 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  *
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 2001, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Id: Op.hpp,v 1.4 2001/06/01 14:15:37 knoaman Exp $
  58.  */
  59. #if !defined(OP_HPP)
  60. #define OP_HPP
  61. // ---------------------------------------------------------------------------
  62. //  Includes
  63. // ---------------------------------------------------------------------------
  64. #include <util/XercesDefs.hpp>
  65. #include <util/RefVectorOf.hpp>
  66. #include <util/RuntimeException.hpp>
  67. // ---------------------------------------------------------------------------
  68. //  Forward Declaration
  69. // ---------------------------------------------------------------------------
  70. class Token;
  71. class XMLUTIL_EXPORT Op {
  72. public:
  73.     enum {
  74.         DOT                = 0,
  75.         CHAR               = 1,
  76.         RANGE              = 3,
  77.         NRANGE             = 4,
  78.         ANCHOR             = 5,
  79.         STRING             = 6,
  80.         CLOSURE            = 7,
  81.         NONGREEDYCLOSURE   = 8,
  82.         QUESTION           = 9,
  83.         NONGREEDYQUESTION  = 10,
  84.         UNION              = 11,
  85.         CAPTURE            = 15,
  86.         BACKREFERENCE      = 16,
  87.         LOOKAHEAD          = 20,
  88.         NEGATIVELOOKAHEAD  = 21,
  89.         LOOKBEHIND         = 22,
  90.         NEGATIVELOOKBEHIND = 23,
  91.         INDEPENDENT        = 24,
  92.         MODIFIER           = 25,
  93.         CONDITION          = 26
  94.     };
  95.     // -----------------------------------------------------------------------
  96.     //  Public Constructors and Destructor
  97.     // -----------------------------------------------------------------------
  98.     virtual ~Op() { }
  99.     // -----------------------------------------------------------------------
  100.     // Getter functions
  101.     // -----------------------------------------------------------------------
  102.             short        getOpType() const;
  103.             const Op*    getNextOp() const;
  104.     virtual XMLInt32     getData() const;
  105.     virtual XMLInt32     getData2() const;
  106.     virtual int          getSize() const;
  107.     virtual int          getRefNo() const;
  108.     virtual const Op*    getConditionFlow() const;
  109.     virtual const Op*    getYesFlow() const;
  110.     virtual const Op*    getNoFlow() const;
  111.     virtual const Op*    elementAt(int index) const;
  112.     virtual const Op*    getChild() const;
  113.     virtual const Token* getToken() const;
  114.     virtual const XMLCh* getLiteral() const;
  115.     // -----------------------------------------------------------------------
  116.     // Setter functions
  117.     // -----------------------------------------------------------------------
  118.     void setOpType(const short type);
  119.     void setNextOp(const Op* const next);
  120. protected:
  121.     // -----------------------------------------------------------------------
  122.     //  Protected Constructors
  123.     // -----------------------------------------------------------------------
  124.     Op(const short type);
  125.     friend class OpFactory;
  126. private:
  127.     // -----------------------------------------------------------------------
  128.     //  Unimplemented constructors and operators
  129.     // -----------------------------------------------------------------------
  130.     Op(const Op&);
  131.     void operator=(const Op&);
  132.     // -----------------------------------------------------------------------
  133.     //  Private data members
  134.     //
  135.     //  fOpType
  136.     //      Indicates the type of operation
  137.     //
  138.     //  fNextOp
  139.     //      Points to the next operation in the chain
  140.     // -----------------------------------------------------------------------
  141.     short fOpType;
  142.     const Op*   fNextOp;
  143. };
  144. class XMLUTIL_EXPORT CharOp: public Op {
  145. public:
  146. // -----------------------------------------------------------------------
  147.     //  Public Constructors and Destructor
  148.     // -----------------------------------------------------------------------
  149. CharOp(const short type, const XMLInt32 charData);
  150. ~CharOp() {}
  151. // -----------------------------------------------------------------------
  152. // Getter functions
  153. // -----------------------------------------------------------------------
  154. XMLInt32 getData() const;
  155. private:
  156. // Private data members
  157. XMLInt32 fCharData;
  158. };
  159. class XMLUTIL_EXPORT UnionOp : public Op {
  160. public:
  161. // -----------------------------------------------------------------------
  162.     //  Public Constructors and Destructor
  163.     // -----------------------------------------------------------------------
  164. UnionOp(const short type, const int size);
  165. ~UnionOp() { delete fBranches; }
  166. // -----------------------------------------------------------------------
  167. // Getter functions
  168. // -----------------------------------------------------------------------
  169. int getSize() const;
  170. const Op* elementAt(int index) const;
  171. // -----------------------------------------------------------------------
  172. // Setter functions
  173. // -----------------------------------------------------------------------
  174. void addElement(Op* const op);
  175. private:
  176. // Private Data memebers
  177. RefVectorOf<Op>* fBranches;
  178. };
  179. class XMLUTIL_EXPORT ChildOp: public Op {
  180. public:
  181. // -----------------------------------------------------------------------
  182.     //  Public Constructors and Destructor
  183.     // -----------------------------------------------------------------------
  184. ChildOp(const short type);
  185. ~ChildOp() {}
  186. // -----------------------------------------------------------------------
  187. // Getter functions
  188. // -----------------------------------------------------------------------
  189. const Op* getChild() const;
  190. // -----------------------------------------------------------------------
  191. // Setter functions
  192. // -----------------------------------------------------------------------
  193. void setChild(const Op* const child);
  194. private:
  195. // Private data members
  196. const Op* fChild;
  197. };
  198. class XMLUTIL_EXPORT ModifierOp: public ChildOp {
  199. public:
  200. // -----------------------------------------------------------------------
  201.     //  Public Constructors and Destructor
  202.     // -----------------------------------------------------------------------
  203. ModifierOp(const short type, const XMLInt32 v1, const XMLInt32 v2);
  204. ~ModifierOp() {}
  205. // -----------------------------------------------------------------------
  206. // Getter functions
  207. // -----------------------------------------------------------------------
  208. XMLInt32 getData() const;
  209. XMLInt32 getData2() const;
  210. private:
  211. // Private data members
  212. XMLInt32 fVal1;
  213. XMLInt32 fVal2;
  214. };
  215. class XMLUTIL_EXPORT RangeOp: public Op {
  216. public:
  217. // -----------------------------------------------------------------------
  218.     //  Public Constructors and Destructor
  219.     // -----------------------------------------------------------------------
  220. RangeOp(const short type, const Token* const token);
  221. ~RangeOp() {}
  222. // -----------------------------------------------------------------------
  223. // Getter functions
  224. // -----------------------------------------------------------------------
  225. const Token* getToken() const;
  226. private:
  227. // Private data members
  228. const Token* fToken;
  229. };
  230. class XMLUTIL_EXPORT StringOp: public Op {
  231. public:
  232. // -----------------------------------------------------------------------
  233.     //  Public Constructors and Destructor
  234.     // -----------------------------------------------------------------------
  235. StringOp(const short type, const XMLCh* const literal);
  236. ~StringOp() { delete[] fLiteral;}
  237. // -----------------------------------------------------------------------
  238. // Getter functions
  239. // -----------------------------------------------------------------------
  240. const XMLCh* getLiteral() const;
  241. private:
  242. // Private data members
  243. XMLCh* fLiteral;
  244. };
  245. class XMLUTIL_EXPORT ConditionOp: public Op {
  246. public:
  247. // -----------------------------------------------------------------------
  248.     //  Public Constructors and Destructor
  249.     // -----------------------------------------------------------------------
  250. ConditionOp(const short type, const int refNo,
  251. const Op* const condFlow, const Op* const yesFlow,
  252. const Op* const noFlow);
  253. ~ConditionOp() {}
  254. // -----------------------------------------------------------------------
  255. // Getter functions
  256. // -----------------------------------------------------------------------
  257. int getRefNo() const;
  258. const Op* getConditionFlow() const;
  259. const Op* getYesFlow() const;
  260. const Op* getNoFlow() const;
  261. private:
  262. // Private data members
  263. int fRefNo;
  264. const Op* fConditionOp;
  265. const Op* fYesOp;
  266. const Op* fNoOp;
  267. };
  268. // ---------------------------------------------------------------------------
  269. //  Op: getter methods
  270. // ---------------------------------------------------------------------------
  271. inline short Op::getOpType() const {
  272. return fOpType;
  273. }
  274. inline const Op* Op::getNextOp() const {
  275. return fNextOp;
  276. }
  277. // ---------------------------------------------------------------------------
  278. //  Op: setter methods
  279. // ---------------------------------------------------------------------------
  280. inline void Op::setOpType(const short type) {
  281. fOpType = type;
  282. }
  283. inline void Op::setNextOp(const Op* const nextOp) {
  284. fNextOp = nextOp;
  285. }
  286. #endif
  287. /**
  288.   * End of file Op.hpp
  289.   */