[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: genx - abstract output


Re:  genx - abstract output
At 05:54 22.1.2004, you wrote:
>Tim Bray scripsit:
>
> > 1. The sweet spot for XML is interchange, and FILE * is a nice general
> > basis for almost all kinds of interchange.
> > 2. If you're going to build an XML instance in memory, wouldn't it be
> > more natural to pull together a DOM or your own private data structure
> > and then serialize it in one fell swoop?
>
>Not necessarily.  For example, if I want to write to a non-UTF-8 file
>stream, then I could write via UTF-8 abstract output and use convert()
>to fix things up.
>
> > 3. This lowers the barrier-to-entry to implementers, who are going to
> > see genxStartDocument(genxWriter w, FILE * file) and say "oh yeah I
> > know what to do" as opposed to having to figure out another flavor of
> > I/O abstraction and write a stub of some kind.
>
>A simple implementation strategy would be to keep the FILE * argument,
>but also provide a call to set/get an output handler, to be invoked only
>if the FILE * argument is NULL.  That makes easy things easy and hard
>things possible.

+1

You can keep

  genxStartDocument(genxWriter w, FILE * file)

as it is and add another function like

void genxStartDocumentStream(genxWriter w,
   void * outputData,
   PFNOUTPUTCALLBACK outputCallback);

where PFNOUTPUTCALLBACK was something like:
typedef int (*PFNOUTPUTCALLBACK)(void *outputData,
   genxByte *buf,
   int cBytes,
   int *cBytesWritten);

and you can implement the genxStartDocument as:

w->outputData = (void*)file; /* example: genxStartDocument call sets 
outputData */
w->output = FileOutput; /* and sets output to internal FileOutput callback */

and implement internal PFNOUTPUTCALLBACK for FILE* as something like:

static int FileOutput(void *outputData, genxByte *buf, int cBytes, int 
*cBytesWritten)
{
   *cBytesWritten = fwrite(buf, 1, cBytes, (FILE*)outputData);
   return (*cBytesWritten < cBytes) ? GENX_IO_ERR : GENX_OK;
}

p.s. I didn't test the code, it might contain errors.

with respect,
Toni Uusitalo



PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.