String.cpp
Go to the documentation of this file.
00001 // Copyright (c) 2013-2014 by Wayne C. Gramlich.  All rights reserved.
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     // Set up *variadic_arguments to start after *format*:
00045     va_list variadic_arguments;
00046     va_start(variadic_arguments, format);
00047 
00048     // Compute *formatted_size*:
00049     char buffer[2];
00050     unsigned int formatted_size = vsnprintf(buffer, 0, format, variadic_arguments);
00051     // Allocated *formatted*:
00052     String formatted =
00053       (String)Memory__allocate(formatted_size + 1, "String__format");
00054 
00055     // Format *formatted*:
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 }


fiducial_lib
Author(s): Wayne Gramlich
autogenerated on Thu Jun 6 2019 18:08:04