[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] 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! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|