XBinder XML Runtime  XBinder Version 3.0.x
rtSaxCppParser.h
1 /*
2  * Copyright (c) 2003-2022 Objective Systems, Inc.
3  *
4  * This software is furnished under a license and may be used and copied
5  * only in accordance with the terms of such license and with the
6  * inclusion of the above copyright notice. This software or any other
7  * copies thereof may not be provided or otherwise made available to any
8  * other person. No title to and ownership of the software is hereby
9  * transferred.
10  *
11  * The information in this software is subject to change without notice
12  * and should not be construed as a commitment by Objective Systems, Inc.
13  *
14  * PROPRIETARY NOTICE
15  *
16  * This software is an unpublished work subject to a confidentiality agreement
17  * and is protected by copyright and trade secret law. Unauthorized copying,
18  * redistribution or other use of this work is prohibited.
19  *
20  * The above notice of copyright on this source code product does not indicate
21  * any actual or intended publication of such source code.
22  *
23  *****************************************************************************/
24 
25 #ifndef __RTSAXCPPPARSER_H_
26 #define __RTSAXCPPPARSER_H_
27 
28 #include <string.h>
29 #include "rtxsrc/rtxErrCodes.h"
30 #include "rtxsrc/OSRTContext.h"
31 #include "rtxmlsrc/rtSaxCppParserIF.h"
32 #include "rtxmlsrc/osrtxml.h"
33 #include "rtxmlsrc/rtSaxDefs.h"
34 
35 class EXTXMLCLASS OSXMLBasePtr {
36  OSXMLBase* mPtr;
37  public:
38  OSXMLBasePtr ():mPtr (0) {}
39  OSXMLBasePtr (OSXMLBase* ptr):mPtr (ptr) {}
40  ~OSXMLBasePtr () { if (mPtr) mPtr->release (); }
41 
42  operator OSXMLBase* () const { return mPtr; }
43 
44  OSXMLBase* operator= (OSXMLBase* ptr) {
45  if (mPtr) mPtr->release ();
46  mPtr = ptr;
47  return mPtr;
48  }
49 };
50 
59 {
60  protected:
61  OSRTCtxtPtr mpContext;
62  const OSUTF8CHAR* mpElemName;
63  OSINT32 mLevel;
64  OSINT16 mStartLevel;
65  OSINT16 mReqElemCnt;
66  OSINT16 mCurrElemIdx;
67  OSINT16 mState;
68 
69  struct EXTXMLCLASS ErrorInfo {
70  int stat;
71  const char* file;
72  int line;
73 
74  inline ErrorInfo ():stat (0),file (0), line (0) {}
75  } errorInfo;
76 
77  public:
78  OSXMLDefaultHandler (OSRTContext* pContext,
79  const OSUTF8CHAR* elemName = 0, OSINT32 level = 0) :
80  mpContext (pContext),
81  mpElemName(elemName), mLevel(level),
82  mStartLevel (0), mReqElemCnt (0), mCurrElemIdx(0), mState (0)
83  { }
84 
85  virtual ~OSXMLDefaultHandler () {}
86 
87  EXTXMLMETHOD virtual int startElement
88  (const OSUTF8CHAR* const uri,
89  const OSUTF8CHAR* const localname,
90  const OSUTF8CHAR* const qname,
91  const OSUTF8CHAR* const* attrs);
92 
93  EXTXMLMETHOD virtual int characters
94  (const OSUTF8CHAR* const chars, unsigned int length);
95 
96  EXTXMLMETHOD virtual int endElement
97  (const OSUTF8CHAR* const uri,
98  const OSUTF8CHAR* const localname,
99  const OSUTF8CHAR* const qname);
100 
101  EXTXMLMETHOD virtual void startDocument();
102  EXTXMLMETHOD virtual void endDocument ();
103 
104  EXTXMLMETHOD virtual int finalize ();
105 
106  // SAX Error Info handlers
107  EXTXMLMETHOD virtual void resetErrorInfo ();
108  EXTXMLMETHOD virtual void setErrorInfo (int status, const char* file = 0, int line = 0);
109  EXTXMLMETHOD virtual int getErrorInfo (int* status, const char** file, int* line);
110 
111  // SAX ErrorHandler interface
112 
113  // void warning (const SAXParseException& exception);
114  // void error (const SAXParseException& exception);
115  // void fatalError (const SAXParseException& exception);
116  // void resetErrors ();
117 
124  inline OSINT16 getState() { return mState; }
125 
126  virtual void init (int level = 0) {
127  mState = 0; mLevel = (OSINT16)level;
128  }
129 
130  void setElemName (const OSUTF8CHAR* elemName) {
131  mpElemName = elemName;
132  }
133 
134  inline OSBOOL isComplete () { return (mLevel <= mStartLevel); }
135 
136 #ifndef _COMPACT
137  EXTXMLMETHOD void traceStartElement (const char* funcName, const OSUTF8CHAR* localName);
138  EXTXMLMETHOD void traceEndElement (const char* funcName, const OSUTF8CHAR* localName);
139 #else
140  inline void traceStartElement
141  (const char* funcName, const OSUTF8CHAR* localName) {}
142  inline void traceEndElement
143  (const char* funcName, const OSUTF8CHAR* localName) {}
144 #endif
145 } ;
146 
147 class EXTXMLCLASS OSXMLDefaultHandlerPtr {
148  OSXMLDefaultHandler* mPtr;
149  public:
150  inline OSXMLDefaultHandlerPtr ():mPtr (0) {}
151  inline OSXMLDefaultHandlerPtr (OSXMLDefaultHandler* ptr):mPtr (ptr) {}
152  inline ~OSXMLDefaultHandlerPtr () { delete mPtr; }
153 
154  inline operator OSXMLDefaultHandler* () { return mPtr; }
155  inline operator const OSXMLDefaultHandler* () const { return mPtr; }
156  inline OSXMLDefaultHandler* operator-> () const { return mPtr; }
157 
158  inline OSXMLDefaultHandler* operator= (OSXMLDefaultHandler* ptr) {
159  delete mPtr;
160  mPtr = ptr;
161  return mPtr;
162  }
163  inline int operator == (const OSXMLDefaultHandler* ptr) const
164  { return ptr == mPtr; }
165  inline int operator != (const OSXMLDefaultHandler* ptr) const
166  { return ptr != mPtr; }
167  inline int operator ! () const { return mPtr == 0; }
168 
169  friend int operator != (const void* ptr, const OSXMLDefaultHandlerPtr& ptr2);
170  friend int operator == (const void* ptr, const OSXMLDefaultHandlerPtr& ptr2);
171 } ;
172 
173 inline int operator != (const void* ptr, const OSXMLDefaultHandlerPtr& ptr2)
174  { return ptr != (const void*)ptr2.mPtr; }
175 
176 inline int operator == (const void* ptr, const OSXMLDefaultHandlerPtr& ptr2)
177  { return ptr == (const void*)ptr2.mPtr; }
178 
179 class EXTXMLCLASS OSXMLParserCtxt : public OSXMLParserCtxtIF {
180  OSRTCtxtPtr mpContext;
181 
182  public:
183  OSXMLParserCtxt (OSRTContext *pContext);
184 
185  EXTXMLMETHOD virtual OSRTInputStreamIF* createInputStream ();
186  EXTXMLMETHOD virtual OSRTInputStreamIF* createFileInputStream
187  (const char* const filename);
188  EXTXMLMETHOD virtual OSRTInputStreamIF* createMemoryInputStream
189  (OSOCTET* pMemBuf, size_t bufSize);
190  EXTXMLMETHOD virtual OSCTXT* getContext ();
191  EXTXMLMETHOD virtual const OSUTF8CHAR* parseQName (const OSUTF8CHAR* const qname);
192 } ;
193 
194 #ifndef _COMPACT
195 #define OSCPPSAXDIAGSTART(funcName,localName) \
196 traceStartElement (funcName, localName)
197 
198 #define OSCPPSAXDIAGEND(funcName,localName) \
199 traceEndElement (funcName, localName)
200 
201 #else /* COMPACT */
202 #define OSCPPSAXDIAGSTART(funcName,localName)
203 #define OSCPPSAXDIAGEND(funcName,localName)
204 #endif
205 
206 #endif /* __RTSAXCPPPARSER_H_ */
207 
This class is derived from the SAX class DefaultHandler base class.
This class is derived from the SAX class DefaultHandler base class.
XML low-level C encode/decode functions.
OSINT16 getState()
This method returns the current state of the decoding process.