You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by au...@apache.org on 2001/02/08 16:39:54 UTC
cvs commit: xml-xalan/c/src/XalanTransformer XalanTransformerOutputStream.hpp XalanTransformerOutputStream.cpp XalanTransformer.hpp XalanTransformer.cpp XalanCAPI.h XalanCAPI.cpp
auriemma 01/02/08 07:39:50
Modified: c/src/XalanTransformer XalanTransformerOutputStream.hpp
XalanTransformerOutputStream.cpp
XalanTransformer.hpp XalanTransformer.cpp
XalanCAPI.h XalanCAPI.cpp
Log:
Added (optional) flush callback.
Revision Changes Path
1.4 +13 -3 xml-xalan/c/src/XalanTransformer/XalanTransformerOutputStream.hpp
Index: XalanTransformerOutputStream.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanTransformer/XalanTransformerOutputStream.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XalanTransformerOutputStream.hpp 2001/01/31 18:56:24 1.3
+++ XalanTransformerOutputStream.hpp 2001/02/08 15:38:37 1.4
@@ -73,6 +73,10 @@
+typedef void (*XalanFlushHandlerType) (const void*);
+
+
+
// A class for output to a user define (callback) function.
class XALAN_TRANSFORMER_EXPORT XalanTransformerOutputStream : public XalanOutputStream
{
@@ -82,12 +86,14 @@
* Construct a XalanTransformerOutputStream instance for output to a
* user define (callback) function.
*
- * @param theOutputHandle void data passed through to callback
- * @param theOutputHandler address of callback
+ * @param theOutputHandle void pointer passed through to callback.
+ * @param theOutputHandler a user defined (callback) function.
+ * @param theFlushHandler a user defined (callback) function.
*/
XalanTransformerOutputStream(
const void* theOutputHandle,
- XalanOutputHandlerType theOutputHandler);
+ XalanOutputHandlerType theOutputHandler,
+ XalanFlushHandlerType theFlushHandler = 0);
virtual
@@ -113,8 +119,12 @@
const void* m_outputHandle;
XalanOutputHandlerType m_outputHandler;
+
+ XalanFlushHandlerType m_flushHandler;
};
#endif // XALANTRANSFORMEROUTPUTSTREAM_HEADER_GUARD_1357924680
+
+
1.4 +11 -6 xml-xalan/c/src/XalanTransformer/XalanTransformerOutputStream.cpp
Index: XalanTransformerOutputStream.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanTransformer/XalanTransformerOutputStream.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XalanTransformerOutputStream.cpp 2001/01/31 18:56:26 1.3
+++ XalanTransformerOutputStream.cpp 2001/02/08 15:38:45 1.4
@@ -60,9 +60,11 @@
XalanTransformerOutputStream::XalanTransformerOutputStream(
const void* theOutputHandle,
- XalanOutputHandlerType theOutputHandler):
+ XalanOutputHandlerType theOutputHandler,
+ XalanFlushHandlerType theFlushHandler):
m_outputHandle(theOutputHandle),
- m_outputHandler(theOutputHandler)
+ m_outputHandler(theOutputHandler),
+ m_flushHandler(theFlushHandler)
{
}
@@ -77,7 +79,10 @@
void
XalanTransformerOutputStream::doFlush()
{
- // Not implemented
+ if(m_flushHandler != 0)
+ {
+ m_flushHandler(m_outputHandle);
+ }
}
@@ -89,9 +94,9 @@
{
const size_t theBytesWritten = m_outputHandler(theBuffer, theBufferLength, m_outputHandle);
- // We validate that the number of bytes written equals the number of bytes sent to output handler.
- // Otherwise we will stop processing and throw and exception thus allow the callback alert us of
- // memory allocation issues or buffer overflows, all at the expense of confusing most people.
+ // We validate that the number of bytes written equals the number of bytes sent to
+ // the output handler. Otherwise we will stop processing and throw and exception.
+ // Thus the callback can alert us of memory allocation issues or buffer overflows.
if(theBytesWritten != theBufferLength)
{
throw XalanOutputStreamException(
1.6 +20 -15 xml-xalan/c/src/XalanTransformer/XalanTransformer.hpp
Index: XalanTransformer.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanTransformer/XalanTransformer.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XalanTransformer.hpp 2001/02/03 00:09:08 1.5
+++ XalanTransformer.hpp 2001/02/08 15:38:47 1.6
@@ -125,7 +125,7 @@
/**
* Initialize Xerces and Xalan.
- * Should be called only once before creating any
+ * Should be called only once per process before creating any
* instances of XalanTransformer. See class XSLTInit.
*/
static void
@@ -133,7 +133,7 @@
/**
* Terminate Xalan and Xerces.
- * Should be called only once after deleting all
+ * Should be called only once per process after deleting all
* instances of XalanTransformer. See class XSLTInit.
*/
static void
@@ -143,7 +143,7 @@
* Returns the last error that occured as a
* result of callaing transform.
*
- * @return error message int const c string
+ * @return error message const character pointer.
*/
const char*
getLastError() const;
@@ -157,7 +157,7 @@
* @param inputSource input source
* @param stylesheetSource stylesheet source
* @param outputTarget output source tree
- * @return 0 for success and 1 for failure
+ * @return 0 for success
*/
int
transform(
@@ -173,7 +173,7 @@
* @param theXMLFileName filename of XML input source
* @param theXSLFileName filename of stylesheet source
* @param theOutFileName filename of output source
- * @return 0 for success and 1 for failure
+ * @return 0 for success
*/
int
transform(
@@ -188,8 +188,8 @@
*
* @param theXMLFileName filename of XML input source
* @param theXSLFileName filename of stylesheet source
- * @param theOutStream a pointer to a std ostream for the output
- * @return 0 for success and 1 for failure
+ * @param theOutStream a std ostream for the output
+ * @return 0 for success
*/
int
transform(
@@ -202,10 +202,10 @@
* The processor will process the input stream, the stylesheet input
* stream, and transform to an output stream.
*
- * @param theXMLInStream a pointer to a std istream for the input
- * @param theXSLInStream a pointer to a std istream for the input
- * @param theOutStream a pointer to a std ostream for the output
- * @return 0 for success and 1 for failure
+ * @param theXMLInStream a std istream for the input
+ * @param theXSLInStream a std istream for the input
+ * @param theOutStream a std ostream for the output
+ * @return 0 for success
*/
int
transform(
@@ -214,7 +214,7 @@
ostream& theOutStream);
/**
- * Transform the XML source tree to the address of a callback.
+ * Transform the XML source tree to a callback function.
* The processor will process the input file, the stylesheet file,
* and transform to output to a callback function in allocated
* blocks. Xalan will release any memory allocated upon
@@ -225,15 +225,17 @@
* @param theXMLFileName filename of XML input source
* @param theXSLFileName filename of stylesheet source
* @param theOutputHandle void pointer passed through to callback.
- * @param theOutputHandler address of a user defined (callback) function.
- * @return 0 for success and 1 for failure
+ * @param theOutputHandler a user defined (callback) function.
+ * @param theFlushHandler (optional) a user defined (callback) function.
+ * @return 0 for success
*/
int
transform(
const char* theXMLFileName,
const char* theXSLFileName,
const void* theOutputHandle,
- XalanOutputHandlerType theOutputHandler);
+ XalanOutputHandlerType theOutputHandler,
+ XalanFlushHandlerType theFlushHandler = 0);
protected:
@@ -266,3 +268,6 @@
#endif // XALAN_TRANSFORMER_HEADER_GUARD
+
+
+
1.5 +4 -2 xml-xalan/c/src/XalanTransformer/XalanTransformer.cpp
Index: XalanTransformer.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanTransformer/XalanTransformer.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XalanTransformer.cpp 2001/02/03 00:09:08 1.4
+++ XalanTransformer.cpp 2001/02/08 15:38:50 1.5
@@ -316,7 +316,8 @@
const char* theXMLFileName,
const char* theXSLFileName,
const void* theOutputHandle,
- XalanOutputHandlerType theOutputHandler)
+ XalanOutputHandlerType theOutputHandler,
+ XalanFlushHandlerType theFlushHandler)
{
// Set input sources
const XalanDOMString theDOMStringXMLFileName(theXMLFileName);
@@ -326,7 +327,7 @@
const XSLTInputSource theStylesheetSource(c_wstr(theDOMStringXSLFileName));
// Set to output target to the callback
- XalanTransformerOutputStream theOutputStream(theOutputHandle, theOutputHandler);
+ XalanTransformerOutputStream theOutputStream(theOutputHandle, theOutputHandler, theFlushHandler);
XalanOutputStreamPrintWriter thePrintWriter(theOutputStream);
XSLTResultTarget theResultTarget(&thePrintWriter);
@@ -336,6 +337,7 @@
theStylesheetSource,
theResultTarget);
}
+
const char*
1.6 +38 -20 xml-xalan/c/src/XalanTransformer/XalanCAPI.h
Index: XalanCAPI.h
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanTransformer/XalanCAPI.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XalanCAPI.h 2001/02/03 00:09:09 1.5
+++ XalanCAPI.h 2001/02/08 15:38:52 1.6
@@ -82,7 +82,8 @@
/**
* Callback function passed to XalanTransformToHandler.
- * Caller is responsible for streaming or coping data to a user
+ * Used to process transform output in blocks of data.
+ * Caller is responsible for streaming or copying data to a user
* allocated buffer. Called should not attempt to write to or
* free this data. Xalan will reuse the same buffer and free it
* upon termination.
@@ -99,10 +100,26 @@
* @return number of bytes written
*/
typedef unsigned long (*XalanOutputHandlerType) (const void*, unsigned long, const void*);
+
+ /**
+ * Callback function passed to XalanTransformToHandler.
+ * Used to flush the buffer once transform is completed.
+ *
+ * static void xalanFlushHandler(const void *handle);
+ *
+ * @param handle handle of XalanTransformer instance.
+ */
+ typedef void (*XalanFlushHandlerType) (const void*);
+
+ /**
+ * This is a typedef to workaround limitations with
+ * the XALAN_TRANSFORMER_EXPORT_FUNCTION macro.
+ */
+ typedef const char* XalanCCharPtr;
/**
* Initialize Xerces and Xalan.
- * Should be called only once before creating any
+ * Should be called only once per process before creating any
* instances of XalanTransformer.
*/
XALAN_TRANSFORMER_EXPORT_FUNCTION(void)
@@ -110,7 +127,7 @@
/**
* Terminate Xalan and Xerces.
- * Should be called only once after deleting all
+ * Should be called only once per process after deleting all
* instances of XalanTransformer.
*/
XALAN_TRANSFORMER_EXPORT_FUNCTION(void)
@@ -141,7 +158,7 @@
* @param theXSLFileName filename of stylesheet source
* @param theOutFileName filename of output source
* @param theXalanHandle handle of XalanTransformer instance.
- * @return 0 for success and 1 for failure
+ * @return 0 for success
*/
XALAN_TRANSFORMER_EXPORT_FUNCTION(int)
XalanTransformToFile(
@@ -161,7 +178,7 @@
* @param theXSLFileName filename of stylesheet source
* @param theOutFileName filename of output source
* @param theXalanHandle handle of XalanTransformer instance.
- * @return 0 for success and 1 for failure
+ * @return 0 for success
*/
XALAN_TRANSFORMER_EXPORT_FUNCTION(int)
XalanTransformToData(
@@ -180,19 +197,25 @@
XalanFreeData(char* theStream);
/**
- * Transform the XML source tree to the address of a callback.
+ * Transform the XML source tree to a callback function.
* The processor will process the input file, the stylesheet file,
- * and transform to output to a callback function in allocated
- * blocks. Xalan will release any memory allocated upon
- * termination. Data passed to the callback is not guaranteed to
- * be null terminated. - See XalanOutputHandlerType for more details.
+ * and transform to output to a callback function in pre-allocated
+ * blocks. Once the transform is completed a second callback, to
+ * flush the buffer, will be called. You can pass in NULL if you
+ * do not wish to implement a flush callback. Xalan will release
+ * any memory allocated upon termination and data passed to the
+ * callback is not guaranteed to be null terminated.
+ *
+ * - See XalanOutputHandlerType and XalanFlushHandlerType for more
+ * details.
*
* @param theXMLFileName filename of XML input source
* @param theXSLFileName filename of stylesheet source
* @param theXalanHandle handle of XalanTransformer instance.
* @param theOutputHandle void pointer passed through to callback.
- * @param theOutputHandler address of a user defined (callback) function.
- * @return 0 for success and 1 for failure
+ * @param theOutputHandler a user defined (callback) function.
+ * @param theFlushHandler (can be NULL) a user defined (callback) function.
+ * @return 0 for success
*/
XALAN_TRANSFORMER_EXPORT_FUNCTION(int)
XalanTransformToHandler(
@@ -200,13 +223,8 @@
const char* theXSLFileName,
XalanHandle theXalanHandle,
const void* theOutputHandle,
- XalanOutputHandlerType theOutputHandler);
-
- /**
- * This is a typedef to workaround limitations with
- * the XALAN_TRANSFORMER_EXPORT_FUNCTION macro.
- */
- typedef const char* XalanCCharPtr;
+ XalanOutputHandlerType theOutputHandler,
+ XalanFlushHandlerType theFlushHandler);
/**
* Returns the last error that occured as a
@@ -216,7 +234,7 @@
* const char*
* XalanGetLastError(XalanHandle theXalanHandle) const;
*
- * @return error message int cons c string
+ * @return error message const character pointer.
*/
XALAN_TRANSFORMER_EXPORT_FUNCTION(XalanCCharPtr)
XalanGetLastError(XalanHandle theXalanHandle);
1.8 +4 -3 xml-xalan/c/src/XalanTransformer/XalanCAPI.cpp
Index: XalanCAPI.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanTransformer/XalanCAPI.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- XalanCAPI.cpp 2001/02/06 22:05:03 1.7
+++ XalanCAPI.cpp 2001/02/08 15:38:54 1.8
@@ -164,12 +164,13 @@
const char* theXSLFileName,
XalanHandle theXalanHandle,
const void* theOutputHandle,
- XalanOutputHandlerType theOutputHandler)
+ XalanOutputHandlerType theOutputHandler,
+ XalanFlushHandlerType theFlushHandler)
{
#if defined(XALAN_OLD_STYLE_CASTS)
- return ((XalanTransformer*)theXalanHandle)->transform(theXMLFileName, theXSLFileName, theOutputHandle, theOutputHandler);
+ return ((XalanTransformer*)theXalanHandle)->transform(theXMLFileName, theXSLFileName, theOutputHandle, theOutputHandler, theFlushHandler);
#else
- return static_cast<XalanTransformer*>(theXalanHandle)->transform(theXMLFileName, theXSLFileName, theOutputHandle, theOutputHandler);
+ return static_cast<XalanTransformer*>(theXalanHandle)->transform(theXMLFileName, theXSLFileName, theOutputHandle, theOutputHandler, theFlushHandler);
#endif
}