Request for Discussion: SAX 1.0 in C++

Steinar Bang sb at metis.no
Tue Dec 21 08:04:49 GMT 1999


>>>>> John Aldridge <john.aldridge at informatix.co.uk>:

> It seems to me that code like:

> void DocumentHandler::startElement (
>     const std::wstring &name, const AttributeList &atts)
> {
>     if (name == L"Paragraph") ...
> }

> is going to be a whole lot neater than

> void DocumentHandler::startElement (
>     const std::basic_string<SAXChar> &name, const AttributeList &atts)
> {
>     static const SAXChar paraString[] =
>         {'P','a','r','a','g','r','a','p','h',\0'};
>     if (name == paraString) ...
> }

Sure, but how about this, then...?

typedef unsigned short SAXChar;
class SAXString : public basic_string<SAXChar> {
public:
    SAXString(const SAXString& s, size_type pos = 0, size_type n = npos)
	: basic_string<SAXChar>(s,pos,npos) {}
    SAXString(const SAXChar* p, size_type n)
	: basic_string<SAXChar>(p,n) {}
    SAXString(const SAXChar* p)
	: basic_string<SAXChar>(p) {}
    SAXString(size_type n, SAXChar c)
	: basic_string<SAXChar>(n,c) {}
    SAXString(const char* p)
	: basic_string<SAXChar>(p)
    {
	// do UTF-8 to UTF-16 decoding here
    }
    
};

and then:

void DocumentHandler::startElement (
     const SAXString& name, const AttributeList& atts)
{
     if (name == SAXString("Paragraph")) ...
}

or maybe just

void DocumentHandler::startElement (
     const SAXString& name, const AttributeList& atts)
{
     if (name == "Paragraph") ...
}

since the appropriate copy constructor is available.

Does it matter if SAXString doesn't have a virtual destructor if it
doesn't add any extra state to basic_string<SAXChar> and has no
virtual functions?

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To unsubscribe, mailto:majordomo at ic.ac.uk the following message;
unsubscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)





More information about the Xml-dev mailing list