Array Array__create( Unsigned initial_size) { // This routine will create and return a new {Array} object that // can contain at least {initial_size}. // Make sure we allocate at least 1 element: if (initial_size == 0) { // Minimum {initial_size} is 1: initial_size = 1; } // Allocate the {Array} elements: Element empty = (Element)0; Elements elements = (Elements)Memory__allocate(sizeof(empty) * initial_size); // Zero out {elements}: Unsigned index = 0; for (; index < initial_size; index++) { elements[index] = empty; } // Create {array} and fill it in: Array array = new(Array); array->available = initial_size; array->size = 0; array->elements = elements; return array; }
String String__create( Unsigned size) { // This routine will create a string that can contain {size} characters: // Allocate the string: String string = (String)Memory__allocate(size + 1); // Terminate the string: string[size] = '\0'; return string; }
String String__format(String format, ...) { // Set up *variadic_arguments to start after *format*: va_list variadic_arguments; va_start(variadic_arguments, format); // Compute *formatted_size*: char buffer[2]; Unsigned formatted_size = vsnprintf(buffer, 0, format, variadic_arguments); // Allocated *formatted*: String formatted = (String)Memory__allocate(formatted_size + 1); // Format *formatted*: (void)vsnprintf(formatted, formatted_size + 1, format, variadic_arguments); return formatted; }
String String__allocate(Unsigned size) { return (String)Memory__allocate(size + 1); }
String String__allocate(unsigned int size) { return (String)Memory__allocate(size + 1, "String__allocate"); }