FairRoot/PandaRoot
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
CStrTok Class Reference

#include <StrTok.h>

Public Member Functions

 CStrTok ()
 
virtual ~CStrTok ()
 
char * GetFirst (char *lpsz, const char *lpcszDelimiters)
 
char * GetNext (const char *lpcszDelimiters)
 
void SetNext (const char *lpcszNext)
 
bool IsEOB ()
 
void Break ()
 
void TrimLeft (char *&lpsz, const char *lpcszDelimiters=0)
 
void TrimRight (const char *lpcszDelimiters=0)
 

Static Public Member Functions

static bool IsDelimiter (char ch, const char *lpcszDelimiters)
 

Public Attributes

bool m_bDelimiterAsToken
 
bool m_bOneByOneDelimiter
 
bool m_bDelimitersInSequence
 
char * m_lpszNext
 
char m_chDelimiter
 

Detailed Description

Definition at line 11 of file StrTok.h.

Constructor & Destructor Documentation

CStrTok::CStrTok ( )

Definition at line 17 of file StrTok.cxx.

References m_bDelimiterAsToken, m_bDelimitersInSequence, m_bOneByOneDelimiter, m_chDelimiter, and m_lpszNext.

18 {
20  m_chDelimiter = 0;
21  m_lpszNext = NULL;
22 }
char m_chDelimiter
Definition: StrTok.h:24
bool m_bDelimiterAsToken
Definition: StrTok.h:19
char * m_lpszNext
Definition: StrTok.h:23
bool m_bOneByOneDelimiter
Definition: StrTok.h:20
bool m_bDelimitersInSequence
Definition: StrTok.h:21
CStrTok::~CStrTok ( )
virtual

Definition at line 24 of file StrTok.cxx.

25 {
26 
27 }

Member Function Documentation

void CStrTok::Break ( )

Definition at line 123 of file StrTok.cxx.

References SetNext().

Referenced by GetFirst().

124 {
125  SetNext(NULL);
126 }
void SetNext(const char *lpcszNext)
Definition: StrTok.cxx:105
char * CStrTok::GetFirst ( char *  lpsz,
const char *  lpcszDelimiters 
)

Definition at line 29 of file StrTok.cxx.

References Break(), GetNext(), and m_lpszNext.

Referenced by PndFsmDetFactory::create(), PndFsmAbsDet::parseParameterList(), and PndSimpleAnalysis::SetupAnalysis().

30 {
31  Break();
32 
33  m_lpszNext = lpsz;
34  return GetNext(lpcszDelimiters);
35 }
char * m_lpszNext
Definition: StrTok.h:23
void Break()
Definition: StrTok.cxx:123
char * GetNext(const char *lpcszDelimiters)
Definition: StrTok.cxx:37
char * CStrTok::GetNext ( const char *  lpcszDelimiters)

Definition at line 37 of file StrTok.cxx.

References m_bDelimiterAsToken, m_bDelimitersInSequence, m_bOneByOneDelimiter, m_chDelimiter, and m_lpszNext.

Referenced by PndFsmDetFactory::create(), GetFirst(), PndFsmAbsDet::parseParameterList(), and PndSimpleAnalysis::SetupAnalysis().

38 {
39  if(m_lpszNext == NULL)
40  return NULL;
41 
42  // return the saved delimiter
43  if(m_chDelimiter != 0)
45 
46  char* lpsz = m_lpszNext;
48  // increment the next pointer to the next delimiter or token
50  {
51  int nLength = strlen(lpcszDelimiters);
52  if(memcmp(lpcszDelimiters, m_lpszNext, nLength) == 0)
53  m_lpszNext += nLength;
54  else
55  m_lpszNext = strstr(m_lpszNext, lpcszDelimiters); // may be NULL
56  }
57  else
58  {
59  if(strchr(lpcszDelimiters, *m_lpszNext))
60  m_lpszNext++;
61  else
62  m_lpszNext += strcspn(m_lpszNext, lpcszDelimiters);
63  }
64  else
66  {
67  int nLength = strlen(lpcszDelimiters);
68  // increment the token pointer
69  while(memcmp(lpcszDelimiters, lpsz, nLength) == 0)
70  {
71  lpsz += nLength;
73  break;
74  }
75  // increment the next pointer after the end of the token
76  m_lpszNext = strstr(lpsz, lpcszDelimiters); // may be NULL
77  }
78  else
79  {
80  // increment the token pointer to the start of the token
82  lpsz += strspn(lpsz, lpcszDelimiters);
83  else
84  if(strchr(lpcszDelimiters, *lpsz) && m_chDelimiter)
85  lpsz++;
86  // increment the next pointer after the end of the token
87  m_lpszNext = lpsz + strcspn(lpsz, lpcszDelimiters);
88  }
89 
90  if(m_lpszNext == NULL || *m_lpszNext == 0)
91  { // reach the end of the buffer
92  m_chDelimiter = 0;
93  m_lpszNext = NULL;
94  }
95  else
96  { // save the delimiter and terminate the token by null
98  *m_lpszNext = 0;
99  }
100  if(*lpsz == 0 && !m_bOneByOneDelimiter)
101  return NULL;
102  return lpsz;
103 }
char m_chDelimiter
Definition: StrTok.h:24
bool m_bDelimiterAsToken
Definition: StrTok.h:19
char * m_lpszNext
Definition: StrTok.h:23
bool m_bOneByOneDelimiter
Definition: StrTok.h:20
bool m_bDelimitersInSequence
Definition: StrTok.h:21
bool CStrTok::IsDelimiter ( char  ch,
const char *  lpcszDelimiters 
)
static

Definition at line 118 of file StrTok.cxx.

119 {
120  return strchr(lpcszDelimiters, ch) != NULL;
121 }
bool CStrTok::IsEOB ( )

Definition at line 113 of file StrTok.cxx.

References m_lpszNext.

114 {
115  return m_lpszNext == NULL;
116 }
char * m_lpszNext
Definition: StrTok.h:23
void CStrTok::SetNext ( const char *  lpcszNext)

Definition at line 105 of file StrTok.cxx.

References m_chDelimiter, and m_lpszNext.

Referenced by Break().

106 {
107  if(m_chDelimiter != 0)
109  m_chDelimiter = 0;
110  m_lpszNext = (char*)lpcszNext;
111 }
char m_chDelimiter
Definition: StrTok.h:24
char * m_lpszNext
Definition: StrTok.h:23
void CStrTok::TrimLeft ( char *&  lpsz,
const char *  lpcszDelimiters = 0 
)

Definition at line 128 of file StrTok.cxx.

References m_lpszNext.

129 {
130  if(m_lpszNext == NULL)
131  return;
132  if(lpcszDelimiters == NULL)
133  lpcszDelimiters = " \t\r\n";
134  while(strchr(lpcszDelimiters, *lpsz))
135  lpsz++;
136 }
char * m_lpszNext
Definition: StrTok.h:23
void CStrTok::TrimRight ( const char *  lpcszDelimiters = 0)

Definition at line 138 of file StrTok.cxx.

References m_lpszNext.

139 {
140  if(m_lpszNext == NULL)
141  return;
142  if(lpcszDelimiters == NULL)
143  lpcszDelimiters = " \t\r\n";
144  char* pNext = m_lpszNext-1;
145  while(strchr(lpcszDelimiters, *pNext))
146  *pNext = 0, pNext--;
147 }
char * m_lpszNext
Definition: StrTok.h:23

Member Data Documentation

bool CStrTok::m_bDelimiterAsToken

Definition at line 19 of file StrTok.h.

Referenced by CStrTok(), and GetNext().

bool CStrTok::m_bDelimitersInSequence

Definition at line 21 of file StrTok.h.

Referenced by CStrTok(), and GetNext().

bool CStrTok::m_bOneByOneDelimiter

Definition at line 20 of file StrTok.h.

Referenced by CStrTok(), and GetNext().

char CStrTok::m_chDelimiter

Definition at line 24 of file StrTok.h.

Referenced by CStrTok(), GetNext(), and SetNext().

char* CStrTok::m_lpszNext

Definition at line 23 of file StrTok.h.

Referenced by CStrTok(), GetFirst(), GetNext(), IsEOB(), SetNext(), TrimLeft(), and TrimRight().


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