ProteoWizard
Public Member Functions | Private Member Functions | Private Attributes | List of all members
pwiz::minimxml::SAXParser::saxstring Class Reference

#include <SAXParser.hpp>

Public Member Functions

 saxstring (size_t size=0)
 
 saxstring (const SAXParser::saxstring &rhs)
 
 saxstring (const std::string &rhs)
 
void unescapeXML ()
 
 ~saxstring ()
 
saxstringoperator= (const SAXParser::saxstring &rhs)
 
saxstringoperator= (const char *rhs)
 
saxstringoperator+= (const SAXParser::saxstring &rhs)
 
saxstringoperator+= (const char *rhs)
 
bool operator== (const char *c) const
 
bool operator== (const std::string &s) const
 
bool operator== (const saxstring &s) const
 
char * resize (size_t size)
 
void clear ()
 
const char * c_str () const
 
char & operator[] (size_t n)
 
size_t length () const
 
size_t capacity () const
 
void trim_trail_ws ()
 
int trim_lead_ws ()
 
bool starts_with (const char *txt) const
 
bool ends_with (const char *txt) const
 
char * data ()
 

Private Member Functions

void init (size_t size)
 

Private Attributes

char * _data
 
size_t _used
 
size_t _lead
 
size_t _capacity
 

Detailed Description

Definition at line 60 of file SAXParser.hpp.

Constructor & Destructor Documentation

◆ saxstring() [1/3]

pwiz::minimxml::SAXParser::saxstring::saxstring ( size_t  size = 0)
inline

Definition at line 72 of file SAXParser.hpp.

72 {
73 init(size);
74 }

References init().

◆ saxstring() [2/3]

pwiz::minimxml::SAXParser::saxstring::saxstring ( const SAXParser::saxstring rhs)
inline

Definition at line 76 of file SAXParser.hpp.

76 {
77 *this = rhs;
78 }

◆ saxstring() [3/3]

pwiz::minimxml::SAXParser::saxstring::saxstring ( const std::string &  rhs)
inline

Definition at line 80 of file SAXParser.hpp.

80 {
81 init(rhs.length());
82 memcpy(data(),rhs.c_str(),rhs.length());
83 (*this)[rhs.length()] = 0; // nullterm
84 }

References data(), and init().

◆ ~saxstring()

pwiz::minimxml::SAXParser::saxstring::~saxstring ( )
inline

Definition at line 93 of file SAXParser.hpp.

93 {
94 free(_data);
95 }

References _data.

Member Function Documentation

◆ unescapeXML()

void pwiz::minimxml::SAXParser::saxstring::unescapeXML ( )
inline

Definition at line 86 of file SAXParser.hpp.

86 {
87 if (strchr(c_str(),'&')) {
89 resize(strlen(c_str()));
90 }
91 }
PWIZ_API_DECL void unescapeXML(char *str)

References c_str(), data(), resize(), and pwiz::minimxml::SAXParser::unescapeXML().

◆ operator=() [1/2]

saxstring & pwiz::minimxml::SAXParser::saxstring::operator= ( const SAXParser::saxstring rhs)
inline

Definition at line 97 of file SAXParser.hpp.

97 {
98 init(rhs.length());
99 if (length()) {
100 memcpy(data(),rhs.c_str(),length()+1);
101 }
102 return *this;
103 }

References c_str(), data(), init(), and length().

◆ operator=() [2/2]

saxstring & pwiz::minimxml::SAXParser::saxstring::operator= ( const char *  rhs)
inline

Definition at line 105 of file SAXParser.hpp.

105 {
106 init(rhs ? strlen(rhs) : 0);
107 if (length()) {
108 memcpy(data(),rhs,length()+1);
109 }
110 return *this;
111 }

References data(), init(), and length().

◆ operator+=() [1/2]

saxstring & pwiz::minimxml::SAXParser::saxstring::operator+= ( const SAXParser::saxstring rhs)
inline

Definition at line 113 of file SAXParser.hpp.

113 {
114 if (rhs.length()) {
115 size_t oldsize = length();
116 resize(rhs.length()+oldsize);
117 memcpy(data()+oldsize,rhs.c_str(),rhs.length()+1);
118 }
119 return *this;
120 }

References c_str(), data(), length(), and resize().

◆ operator+=() [2/2]

saxstring & pwiz::minimxml::SAXParser::saxstring::operator+= ( const char *  rhs)
inline

Definition at line 122 of file SAXParser.hpp.

122 {
123 size_t rhslen = rhs?strlen(rhs):0;
124 if (rhslen) {
125 size_t oldsize = length();
126 resize(rhslen+oldsize);
127 strcpy(data()+oldsize,rhs);
128 }
129 return *this;
130 }

References data(), length(), and resize().

◆ operator==() [1/3]

bool pwiz::minimxml::SAXParser::saxstring::operator== ( const char *  c) const
inline

Definition at line 132 of file SAXParser.hpp.

132 {
133 return c && !strcmp(c,c_str());
134 }

References c_str().

◆ operator==() [2/3]

bool pwiz::minimxml::SAXParser::saxstring::operator== ( const std::string &  s) const
inline

Definition at line 136 of file SAXParser.hpp.

136 {
137 return !strcmp(c_str(),s.c_str());
138 }

References c_str().

◆ operator==() [3/3]

bool pwiz::minimxml::SAXParser::saxstring::operator== ( const saxstring s) const
inline

Definition at line 140 of file SAXParser.hpp.

140 {
141 return !strcmp(c_str(),s.c_str());
142 }

References c_str().

◆ resize()

char * pwiz::minimxml::SAXParser::saxstring::resize ( size_t  size)
inline

Definition at line 144 of file SAXParser.hpp.

144 {
145 if (!size) {
146 _lead = 0; // empty, reclaim the start of buffer
147 }
148 size_t new_used = size + _lead; // translate to "used" space
149 if (new_used >= _capacity) {
150 _data = (char *)realloc(_data, (_used = new_used)+1);
151 if (_used && !_data) {
152 throw std::runtime_error("SAXParser: cannot allocate memory");
153 }
155 } else {
156 _used = new_used;
157 }
158 _data[_used] = 0;
159 return _data;
160 }

References _capacity, _data, _lead, and _used.

Referenced by clear(), data(), init(), operator+=(), operator+=(), trim_trail_ws(), and unescapeXML().

◆ clear()

void pwiz::minimxml::SAXParser::saxstring::clear ( )
inline

Definition at line 161 of file SAXParser.hpp.

161 {
162 resize(0);
163 }

References resize().

◆ c_str()

const char * pwiz::minimxml::SAXParser::saxstring::c_str ( ) const
inline

◆ operator[]()

char & pwiz::minimxml::SAXParser::saxstring::operator[] ( size_t  n)
inline

Definition at line 167 of file SAXParser.hpp.

167 {
168 return *(data()+n);
169 }

References data().

◆ length()

size_t pwiz::minimxml::SAXParser::saxstring::length ( ) const
inline

◆ capacity()

size_t pwiz::minimxml::SAXParser::saxstring::capacity ( ) const
inline

Definition at line 173 of file SAXParser.hpp.

173 {
174 return _capacity;
175 }

References _capacity.

◆ trim_trail_ws()

void pwiz::minimxml::SAXParser::saxstring::trim_trail_ws ( )
inline

Definition at line 176 of file SAXParser.hpp.

176 { // remove trailing whitespace if any
177 size_t n = count_trail_ws(c_str(),length());
178 resize(length()-n);
179 }
PWIZ_API_DECL size_t count_trail_ws(const char *data, size_t len)

References c_str(), pwiz::minimxml::SAXParser::count_trail_ws(), length(), and resize().

Referenced by testSaxParserString().

◆ trim_lead_ws()

int pwiz::minimxml::SAXParser::saxstring::trim_lead_ws ( )
inline

Definition at line 181 of file SAXParser.hpp.

181 {
182 size_t n=0;
183 for (const char *c=c_str(); *c && strchr(" \n\r\t",*c); c++) {
184 n++;
185 }
186 _lead += n;
187 return n;
188 }

References _lead, and c_str().

Referenced by testSaxParserString().

◆ starts_with()

bool pwiz::minimxml::SAXParser::saxstring::starts_with ( const char *  txt) const
inline

Definition at line 189 of file SAXParser.hpp.

189 {
190 return !strncmp(c_str(),txt,strlen(txt));
191 }

References c_str().

◆ ends_with()

bool pwiz::minimxml::SAXParser::saxstring::ends_with ( const char *  txt) const
inline

Definition at line 192 of file SAXParser.hpp.

192 {
193 size_t len = strlen(txt);
194 return (len <= length()) ? (!strcmp(c_str()+length()-len,txt)) : false;
195 }

References c_str(), and length().

◆ data()

char * pwiz::minimxml::SAXParser::saxstring::data ( )
inline

Definition at line 196 of file SAXParser.hpp.

196 { // direct access to data buffer
197 if (!_data) {
198 resize(0);
199 }
200 return _data+_lead;
201 }

References _data, _lead, and resize().

Referenced by pwiz::minimxml::SAXParser::Handler::Attributes::Attributes(), operator+=(), operator+=(), operator=(), operator=(), operator[](), saxstring(), testSaxParserString(), and unescapeXML().

◆ init()

void pwiz::minimxml::SAXParser::saxstring::init ( size_t  size)
inlineprivate

Definition at line 203 of file SAXParser.hpp.

203 {
204 _used = 0;
205 _lead = 0;
206 _capacity = 0;
207 _data = NULL;
208 if (size) {
209 resize(size);
210 }
211 }

References _capacity, _data, _lead, _used, and resize().

Referenced by operator=(), operator=(), saxstring(), and saxstring().

Member Data Documentation

◆ _data

char* pwiz::minimxml::SAXParser::saxstring::_data
private

Definition at line 212 of file SAXParser.hpp.

Referenced by c_str(), data(), init(), resize(), and ~saxstring().

◆ _used

size_t pwiz::minimxml::SAXParser::saxstring::_used
private

Definition at line 213 of file SAXParser.hpp.

Referenced by init(), length(), and resize().

◆ _lead

size_t pwiz::minimxml::SAXParser::saxstring::_lead
private

Definition at line 214 of file SAXParser.hpp.

Referenced by c_str(), data(), init(), length(), resize(), and trim_lead_ws().

◆ _capacity

size_t pwiz::minimxml::SAXParser::saxstring::_capacity
private

Definition at line 215 of file SAXParser.hpp.

Referenced by capacity(), init(), and resize().


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