#include <ace/SString.h>
class ACE_Tokenizer {
public:ACE_Tokenizer (LPTSTR buffer);int delimiter (TCHAR d);int delimiter_replace (TCHAR d, TCHAR replacement);int preserve_designators (TCHAR start, TCHAR stop, int strip=1);LPTSTR next (void);MAX_PRESERVES=16 }; protected: int is_delimiter ( TCHAR d, int &replace, TCHAR &r );int is_preserve_designator (TCHAR start, TCHAR &stop, int &strip);class Delimiter_Entry {
public:TCHAR delimiter_;TCHAR replacement_;int replace_;};
private:
    LPTSTR buffer_;
    int index_;
    class Preserve_Entry
    {
      public:
        TCHAR start_;
        TCHAR stop_;
        int strip_;
    };
    Preserve_Entry preserves_[MAX_PRESERVES];
    int preserves_index_;
    Delimiter_Entry delimiters_[MAX_DELIMITERS];
    int delimiter_index_;
};
ACE_Tokenizer (LPTSTR buffer);
buffer will be parsed.
int delimiter (TCHAR d);
d is a delimiter.  Returns 0 on success, -1 if there is no
memory left.
int delimiter_replace (TCHAR d, TCHAR replacement);
d is a delimiter and, when found, will be replaced by
replacement.  Returns 0 on success, -1 if there is no memory
left.
int preserve_designators (TCHAR start, TCHAR stop, int strip=1);
strip == 1, then the preserve
designators will be stripped from the tokens returned by next.
LPTSTR next (void);
MAX_PRESERVES=16 }; protected: int is_delimiter (
    TCHAR d,
    int &replace,
    TCHAR &r
    );
d is a delimiter, 0 otherwise.  If d should be
replaced with r, replace is set to 1, otherwise 0.
int is_preserve_designator (TCHAR start, TCHAR &stop, int &strip);
start is a start preserve designator, returns 1 and sets
stop to the stop designator.  Returns 0 if start is not a
preserve designator.
LPTSTR buffer_;
int index_;
Preserve_Entry preserves_[MAX_PRESERVES];
int preserves_index_;
Delimiter_Entry delimiters_[MAX_DELIMITERS];
int delimiter_index_;