1 #include <StringHelper.hpp>
\r
3 #include <BadAllocException.hpp>
\r
4 #include <NullPointerException.hpp>
\r
5 #include <InvalidArgumentException.hpp>
\r
6 #include <OutOfBoundsException.hpp>
\r
9 #define BUFF_MAX ((size_t)260)
\r
13 // namespace SimGrid::Msg
\r
19 #define DEFAULT_STRING_HELPER_CAPACITY ((int)128)
\r
22 void StringHelper::init(void)
\r
24 capacity = DEFAULT_STRING_HELPER_CAPACITY;
\r
26 if(!(content = (char*) calloc(capacity + 1, sizeof(char))))
\r
27 throw BadAllocException();
\r
32 // Default constructor
\r
33 StringHelper::StringHelper()
\r
38 StringHelper::StringHelper(char c)
\r
45 StringHelper::StringHelper(char c, int n)
\r
51 StringHelper::StringHelper(const char* cstr)
\r
57 StringHelper::StringHelper(const char* cstr, int n)
\r
63 StringHelper::StringHelper(const char* cstr, int pos, int n)
\r
66 append(cstr, pos, n);
\r
69 StringHelper::StringHelper(const string& rstr)
\r
75 StringHelper::StringHelper(const string& rstr, int n)
\r
81 StringHelper::StringHelper(const string& rstr, int pos, int n)
\r
84 append(rstr, pos, n);
\r
87 StringHelper::StringHelper(short si)
\r
93 StringHelper::StringHelper(int i)
\r
99 StringHelper::StringHelper(long l)
\r
105 StringHelper::StringHelper(float f)
\r
111 StringHelper::StringHelper(double d)
\r
117 StringHelper::StringHelper(double d, const char* format)
\r
119 char toAppend[BUFF_MAX + 1] = {0};
\r
121 sprintf(toAppend,format,d);
\r
128 StringHelper::StringHelper(unsigned short usi)
\r
134 StringHelper::StringHelper(unsigned int ui)
\r
140 StringHelper::StringHelper(unsigned long ul)
\r
146 // Copy constructor
\r
147 StringHelper::StringHelper(const StringHelper& rStringHelper)
\r
149 if(this != &rStringHelper && rStringHelper.size())
\r
152 append(rStringHelper.cstr());
\r
157 StringHelper::~StringHelper()
\r
165 void StringHelper::clear(void)
\r
168 memset(content, 0, len);
\r
173 bool StringHelper::empty(void)
\r
178 StringHelper& StringHelper::append(unsigned char c)
\r
180 if(capacity < len + 1)
\r
182 int new_capacity = (capacity << 1) ;
\r
184 if(!(content = (char*) realloc(content, new_capacity)))
\r
185 throw BadAllocException();
\r
187 capacity = new_capacity;
\r
194 content[len] = '\0';
\r
199 StringHelper& StringHelper::append(unsigned char c, int n)
\r
202 throw InvalidArgumentException("n");
\r
204 char* toAppend = (char*) calloc(n + 1, sizeof(char));
\r
207 throw BadAllocException();
\r
209 memset(toAppend, c, n);
\r
219 StringHelper& StringHelper::append(char c)
\r
221 if(capacity < len + 1)
\r
223 int new_capacity = (capacity << 1) ;
\r
225 if(!(content = (char*) realloc(content, new_capacity)))
\r
226 throw BadAllocException();
\r
228 capacity = new_capacity;
\r
235 content[len] = '\0';
\r
240 StringHelper& StringHelper::append(char c, int n)
\r
243 throw InvalidArgumentException("n");
\r
245 char* toAppend = (char*) calloc(n + 1, sizeof(char));
\r
248 throw BadAllocException();
\r
250 memset(toAppend, c, n);
\r
259 StringHelper& StringHelper::append(const char* cstr)
\r
262 throw NullPointerException("cstr");
\r
264 int l = (int) strlen(cstr);
\r
266 if(capacity < len + l)
\r
268 int new_capacity = (capacity << 1) < (len + l) ? (len + l) << 1 : capacity << 1;
\r
270 if(!(content = (char*) realloc(content, new_capacity)))
\r
271 throw BadAllocException();
\r
273 strcat(content, cstr);
\r
275 capacity = new_capacity;
\r
279 strcat(content, cstr);
\r
283 content[len] = '\0';
\r
289 StringHelper& StringHelper::append(const char* cstr, int n)
\r
292 throw NullPointerException("cstr");
\r
295 throw InvalidArgumentException("n");
\r
298 int l = ((int) strlen(cstr)) * n;
\r
300 if(capacity < len + l)
\r
302 int new_capacity = (capacity << 1) < (len + l) ? (len + l) << 1 : capacity << 1;
\r
304 if(!(content = (char*) realloc(content, new_capacity)))
\r
305 throw BadAllocException();
\r
307 for(int i = 0; i < n; i++)
\r
308 strcat(content, cstr);
\r
310 capacity = new_capacity;
\r
314 for(int i = 0; i < n; i++)
\r
315 strcat(content, cstr);
\r
319 content[len] = '\0';
\r
325 StringHelper& StringHelper::append(const char* cstr, int pos, int n)
\r
328 throw NullPointerException("cstr");
\r
331 throw InvalidArgumentException("n");
\r
333 if(pos < 0 || pos >= (int)strlen(cstr) )
\r
334 throw OutOfBoundsException(pos);
\r
336 if(pos + n >= (int)strlen(cstr))
\r
337 throw OutOfBoundsException(pos, n);
\r
340 char* toAppend = (char*) calloc(n + 1, sizeof(char));
\r
342 strncpy(toAppend, cstr + pos, n);
\r
351 StringHelper& StringHelper::append(const string& rstr)
\r
353 append(rstr.c_str());
\r
357 StringHelper& StringHelper::append(const string& rstr, int n)
\r
360 throw NullPointerException("rstr");
\r
363 throw InvalidArgumentException("n");
\r
366 int l = ((int) rstr.size()) * n;
\r
368 if(capacity < len + l)
\r
370 int new_capacity = (capacity << 1) < (len + l) ? (len + l) << 1 : capacity << 1;
\r
372 if(!(content = (char*) realloc(content, new_capacity)))
\r
373 throw BadAllocException();
\r
375 for(int i = 0; i < n; i++)
\r
376 strcat(content, rstr.c_str());
\r
378 capacity = new_capacity;
\r
382 for(int i = 0; i < n; i++)
\r
383 strcat(content, rstr.c_str());
\r
387 content[len] = '\0';
\r
392 StringHelper& StringHelper::append(const string& rstr, int pos, int n)
\r
395 throw InvalidArgumentException("rstr");
\r
398 throw InvalidArgumentException("n");
\r
400 if(pos < 0 || pos >= (int) rstr.size() )
\r
401 throw OutOfBoundsException(pos);
\r
403 if(pos + n >= (int) rstr.size())
\r
404 throw OutOfBoundsException(pos, n);
\r
407 char* toAppend = (char*) calloc(n + 1, sizeof(char));
\r
409 strncpy(toAppend, rstr.c_str() + pos, n);
\r
418 StringHelper& StringHelper::append(short si)
\r
420 char toAppend[26] = {0};
\r
422 sprintf(toAppend, "%hd",si);
\r
429 StringHelper& StringHelper::append(int i)
\r
431 char toAppend[26] = {0};
\r
433 sprintf(toAppend, "%d",i);
\r
440 StringHelper& StringHelper::append(long l)
\r
442 char toAppend[26] = {0};
\r
444 sprintf(toAppend, "%ld",l);
\r
451 StringHelper& StringHelper::append(float f)
\r
453 char toAppend[26] = {0};
\r
455 sprintf(toAppend, "%f",f);
\r
462 StringHelper& StringHelper::append(double d)
\r
464 char toAppend[26] = {0};
\r
466 sprintf(toAppend, "%lf",d);
\r
473 StringHelper& StringHelper::append(double d, const char* format)
\r
475 char toAppend[BUFF_MAX + 1] = {0};
\r
477 sprintf(toAppend, format, d);
\r
484 StringHelper& StringHelper::append(unsigned short usi)
\r
486 char toAppend[26] = {0};
\r
488 sprintf(toAppend, "%hu",usi);
\r
495 StringHelper& StringHelper::append(unsigned int ui)
\r
497 char toAppend[26] = {0};
\r
499 sprintf(toAppend, "%u",ui);
\r
506 StringHelper& StringHelper::append(unsigned long ul)
\r
508 char toAppend[26] = {0};
\r
510 sprintf(toAppend, "%lu",ul);
\r
517 const char& StringHelper::at(int pos) const
\r
519 if(pos < 0 || pos >= len)
\r
520 throw OutOfBoundsException(pos);
\r
522 return content[pos];
\r
525 char& StringHelper::at(int pos)
\r
527 if(pos < 0 || pos >= len)
\r
528 throw OutOfBoundsException(pos);
\r
530 return content[pos];
\r
533 const char* StringHelper::cstr(void) const
\r
535 return (const char*)content;
\r
538 string& StringHelper::toString(void)
\r
540 string* s = new string();
\r
541 s->append(content);
\r
545 int StringHelper::size(void) const
\r
553 StringHelper& StringHelper::operator = (const StringHelper& rStringHelper)
\r
556 if(this !=&rStringHelper && rStringHelper.size())
\r
559 append(rStringHelper.cstr());
\r
565 StringHelper& StringHelper::operator = (const char* cstr)
\r
572 StringHelper& StringHelper::operator = (const string& str)
\r
579 StringHelper& StringHelper::operator = (short n)
\r
586 StringHelper& StringHelper::operator = (int n)
\r
593 StringHelper& StringHelper::operator = (long n)
\r
600 StringHelper& StringHelper::operator = (float n)
\r
607 StringHelper& StringHelper::operator = (double n)
\r
614 StringHelper& StringHelper::operator = (unsigned short n)
\r
621 StringHelper& StringHelper::operator = (unsigned int n)
\r
628 StringHelper& StringHelper::operator = (unsigned long n)
\r
635 char& StringHelper::operator[](int pos)
\r
637 if(pos < 0 || pos >= len)
\r
638 throw OutOfBoundsException(pos);
\r
640 return content[pos];
\r
643 char StringHelper::operator[](int pos) const
\r
645 if(pos < 0 || pos >= len)
\r
646 throw OutOfBoundsException(pos);
\r
648 return content[pos];
\r
651 StringHelper& StringHelper::operator += (short n)
\r
657 StringHelper& StringHelper::operator += (int n)
\r
663 StringHelper& StringHelper::operator += (long n)
\r
669 StringHelper& StringHelper::operator += (float n)
\r
675 StringHelper& StringHelper::operator += (double n)
\r
681 StringHelper& StringHelper::operator += (unsigned short n)
\r
687 StringHelper& StringHelper::operator += (unsigned int n)
\r
693 StringHelper& StringHelper::operator += (unsigned long n)
\r
699 StringHelper& StringHelper::operator += (const StringHelper& rStringHelper)
\r
701 append(rStringHelper.content);
\r
705 StringHelper& StringHelper::operator += (const string& rstr)
\r
707 append(rstr.c_str());
\r
711 StringHelper& StringHelper::operator += (const char* cstr)
\r
717 StringHelper& StringHelper::operator += (char c)
\r
723 StringHelper& StringHelper::operator + (short n)
\r
729 StringHelper& StringHelper::operator + (int n)
\r
735 StringHelper& StringHelper::operator + (long n)
\r
741 StringHelper& StringHelper::operator + (float n)
\r
747 StringHelper& StringHelper::operator + (double n)
\r
753 StringHelper& StringHelper::operator + (unsigned short n)
\r
759 StringHelper& StringHelper::operator + (unsigned int n)
\r
765 StringHelper& StringHelper::operator + (unsigned long n)
\r
772 StringHelper& StringHelper::operator + (const StringHelper& rStringHelper)
\r
774 append(rStringHelper.content);
\r
778 StringHelper& StringHelper::operator + (const string& rstr)
\r
780 append(rstr.c_str());
\r
784 StringHelper& StringHelper::operator + (const char* cstr)
\r
790 StringHelper& StringHelper::operator + (char c)
\r
796 StringHelper::operator char *()
\r
801 StringHelper::operator const char *()
\r
806 ostream& operator<<(ostream& stream, const StringHelper& s)
\r
808 stream << s.cstr();
\r
812 istream& operator<<(istream& stream, StringHelper& s)
\r
814 char buff[256] = {0};
\r
824 } // namespace SimGrid