Go to the documentation of this file.00001
00002
00003 #include <assert.h>
00004 #include <stdarg.h>
00005 #include <stdio.h>
00006 #include <string.h>
00007 #include <ctype.h>
00008
00009 #include "String.hpp"
00010 #include "Memory.hpp"
00011
00018
00019 String String__allocate(unsigned int size) {
00020 return (String)Memory__allocate(size + 1, "String__allocate");
00021 }
00022
00030
00031 bool String__equal(String_Const string1, String_Const string2) {
00032 return (bool)(strcmp(string1, string2) == 0);
00033 }
00034
00042
00043 String String__format(String_Const format, ...) {
00044
00045 va_list variadic_arguments;
00046 va_start(variadic_arguments, format);
00047
00048
00049 char buffer[2];
00050 unsigned int formatted_size = vsnprintf(buffer, 0, format, variadic_arguments);
00051
00052 String formatted =
00053 (String)Memory__allocate(formatted_size + 1, "String__format");
00054
00055
00056 va_start(variadic_arguments, format);
00057 (void)vsnprintf(formatted, formatted_size + 1, format, variadic_arguments);
00058
00059 return formatted;
00060 }
00061
00064
00065 void String__free(String_Const string) {
00066 Memory__free((Memory)string);
00067 }
00068
00074
00075 unsigned int String__size(String_Const string) {
00076 unsigned int size = 0;
00077 while (*string++ != '\0') {
00078 size += 1;
00079 }
00080 return size;
00081 }
00082
00083
00089
00090 unsigned int String__to_unsigned(String_Const string) {
00091 unsigned int result = 0;
00092 while (1) {
00093 char character = *string++;
00094 if (isdigit(character)) {
00095 result = result * 10 + (character - '0');
00096 } else {
00097 break;
00098 }
00099 }
00100 return result;
00101 }