ACE  6.3.3
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ACE_Tokenizer_T< ACE_CHAR_T > Class Template Reference

Tokenizer. More...

#include <Tokenizer_T.h>

Collaboration diagram for ACE_Tokenizer_T< ACE_CHAR_T >:
Collaboration graph
[legend]

Classes

class  Delimiter_Entry
 Delimiter Entry. More...
 
class  Preserve_Entry
 Preserve Entry. More...
 

Public Types

enum  { MAX_DELIMITERS =16, MAX_PRESERVES =16 }
 

Public Member Functions

 ACE_Tokenizer_T (ACE_CHAR_T *buffer)
 
int delimiter (ACE_CHAR_T d)
 
int delimiter_replace (ACE_CHAR_T d, ACE_CHAR_T replacement)
 
int preserve_designators (ACE_CHAR_T start, ACE_CHAR_T stop, int strip=1)
 
ACE_CHAR_T * next (void)
 Returns the next token. More...
 

Protected Member Functions

int is_delimiter (ACE_CHAR_T d, int &replace, ACE_CHAR_T &r)
 
int is_preserve_designator (ACE_CHAR_T start, ACE_CHAR_T &stop, int &strip)
 

Protected Attributes

ACE_CHAR_T * buffer_
 
int index_
 
Preserve_Entry preserves_ [MAX_PRESERVES]
 The application can specify MAX_PRESERVES preserve designators. More...
 
int preserves_index_
 Pointer to the next free spot in preserves_. More...
 
Delimiter_Entry delimiters_ [MAX_DELIMITERS]
 The tokenizer allows MAX_DELIMITERS number of delimiters. More...
 
int delimiter_index_
 Pointer to the next free space in delimiters_. More...
 

Detailed Description

template<class ACE_CHAR_T>
class ACE_Tokenizer_T< ACE_CHAR_T >

Tokenizer.

Tokenizes a buffer. Allows application to set delimiters and preserve designators. Does not allow special characters, yet (e.g., printf ("\"like a quoted string"")).

Member Enumeration Documentation

template<class ACE_CHAR_T >
anonymous enum
Enumerator
MAX_DELIMITERS 
MAX_PRESERVES 

Constructor & Destructor Documentation

template<class ACE_CHAR_T >
ACE_Tokenizer_T< ACE_CHAR_T >::ACE_Tokenizer_T ( ACE_CHAR_T *  buffer)

buffer will be parsed. Notice that ACE_Tokenizer_T will modify buffer if you use delimiter_replace or preserve_designators to do character substitution.

Note
You should NOT pass a constant string or string literal to this constructor, since ACE_Tokenizer_T will try to modify the string.
See also
preserve_designators
preserve_designators

Member Function Documentation

template<class ACE_CHAR_T >
int ACE_Tokenizer_T< ACE_CHAR_T >::delimiter ( ACE_CHAR_T  d)

d is a delimiter.

Returns
Returns 0 on success, -1 if there is no memory left.

Example:

 char buf[30];
 ACE_OS::strcpy(buf, "William/Joseph/Hagins");

 ACE_Tokenizer_T tok (buf);
 tok.delimiter ('/');
 for (char *p = tok.next (); p; p = tok.next ())
  cout << p << endl;

This will print out:

 William/Joseph/Hagins
  Joseph/Hagins
  Hagins 
template<class ACE_CHAR_T >
int ACE_Tokenizer_T< ACE_CHAR_T >::delimiter_replace ( ACE_CHAR_T  d,
ACE_CHAR_T  replacement 
)

d is a delimiter and, when found, will be replaced by replacement.

Returns
0 on success, -1 if there is no memory left.

Example:

 char buf[30];
 ACE_OS::strcpy(buf, "William/Joseph/Hagins");

 ACE_Tokenizer tok (buf);
 tok.delimiter_replace ('/', 0);
 for (char *p = tok.next (); p; p = tok.next ())
   cout << p << endl;

This will print out:

   William
   Joseph
   Hagins 
template<class ACE_CHAR_T >
int ACE_Tokenizer_T< ACE_CHAR_T >::is_delimiter ( ACE_CHAR_T  d,
int &  replace,
ACE_CHAR_T &  r 
)
protected

Returns 1 if d is a delimiter, 0 otherwise. If d should be replaced with r, replace is set to 1, otherwise 0.

template<class ACE_CHAR_T >
int ACE_Tokenizer_T< ACE_CHAR_T >::is_preserve_designator ( ACE_CHAR_T  start,
ACE_CHAR_T &  stop,
int &  strip 
)
protected

If start is a start preserve designator, returns 1 and sets stop to the stop designator. Returns 0 if start is not a preserve designator.

template<class ACE_CHAR_T >
ACE_CHAR_T * ACE_Tokenizer_T< ACE_CHAR_T >::next ( void  )

Returns the next token.

template<class ACE_CHAR_T >
int ACE_Tokenizer_T< ACE_CHAR_T >::preserve_designators ( ACE_CHAR_T  start,
ACE_CHAR_T  stop,
int  strip = 1 
)

Extract string between a pair of designator characters. For instance, quotes, or '(' and ')'. start specifies the begin designator. stop specifies the end designator. strip If strip == 1, then the preserve designators will be stripped from the tokens returned by next.

Returns
0 on success, -1 if there is no memory left.

Example with strip = 0:

 char buf[30];
 ACE_OS::strcpy(buf, "William(Joseph)Hagins");

 ACE_Tokenizer tok (buf);
 tok.preserve_designators ('(', ')', 0);
 for (char *p = tok.next (); p; p = tok.next ())
   cout << p << endl;

This will print out:

  William(Joseph)Hagins
  (Joseph)Hagins
  )Hagins 

Example with strip = 1:

 char buf[30];
 ACE_OS::strcpy(buf, "William(Joseph)Hagins");

 ACE_Tokenizer tok (buf);
 tok.preserve_designators ('(', ')', 1);
 for (char *p = tok.next (); p; p = tok.next ())
   cout << p << endl;

This will print out:

  William
  Joseph
  Hagins 

Member Data Documentation

template<class ACE_CHAR_T >
ACE_CHAR_T* ACE_Tokenizer_T< ACE_CHAR_T >::buffer_
protected
template<class ACE_CHAR_T >
int ACE_Tokenizer_T< ACE_CHAR_T >::delimiter_index_
protected

Pointer to the next free space in delimiters_.

template<class ACE_CHAR_T >
Delimiter_Entry ACE_Tokenizer_T< ACE_CHAR_T >::delimiters_[MAX_DELIMITERS]
protected

The tokenizer allows MAX_DELIMITERS number of delimiters.

template<class ACE_CHAR_T >
int ACE_Tokenizer_T< ACE_CHAR_T >::index_
protected
template<class ACE_CHAR_T >
Preserve_Entry ACE_Tokenizer_T< ACE_CHAR_T >::preserves_[MAX_PRESERVES]
protected

The application can specify MAX_PRESERVES preserve designators.

template<class ACE_CHAR_T >
int ACE_Tokenizer_T< ACE_CHAR_T >::preserves_index_
protected

Pointer to the next free spot in preserves_.


The documentation for this class was generated from the following files: