LCOV - code coverage report
Current view: top level - src - string.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 29 30 96.7 %
Date: 2020-09-22 18:03:19 Functions: 21 37 56.8 %

          Line data    Source code
       1             : // System Includes
       2             : #include <stdio.h> // vsnprintf
       3             : 
       4             : // Internal Includes
       5             : #include "kirke/string.h"
       6             : 
       7         306 : static bool chars_are_equal( const char *first, const char *second ){
       8         306 :     if( *first == *second ){
       9         286 :         return true;
      10             :     }
      11             : 
      12          20 :     return false;
      13             : }
      14             : 
      15        1145 : ARRAY__DEFINE( String, string, char, chars_are_equal )
      16           0 : ARRAY__DEFINE( Array__String, array__string, String, string__equals )
      17             : 
      18           2 : void string__initialize__va_list( String* string, Allocator* allocator, const char* format, va_list args ){
      19             :     char c;
      20             :     va_list args_copy;
      21           2 :     va_copy( args_copy, args );
      22           2 :     int required_capacity = vsnprintf( &c, 1, format, args_copy ) + 1;
      23             : 
      24           2 :     string__initialize( string, allocator, required_capacity );
      25           2 :     string->length = vsnprintf( string->data, required_capacity, format, args );
      26           2 : }
      27             : 
      28           1 : void string__initialize__format( String* string, Allocator* allocator, const char* format, ... ){
      29             :     va_list args;
      30           1 :     va_start( args, format );
      31             : 
      32           1 :     string__initialize__va_list( string, allocator, format, args );
      33             : 
      34           1 :     va_end( args );
      35           1 : }
      36             : 
      37           4 : void string__append__va_list( String *string, Allocator *allocator, const char* format, va_list args ){
      38             :     va_list args_copy;
      39           4 :     va_copy( args_copy, args );
      40             : 
      41             :     char c;
      42           4 :     int additional_length = vsnprintf( &c, 1, format, args_copy ) + 1;
      43             : 
      44           4 :     if( string->capacity < string->length + additional_length ){
      45           4 :         string->data = allocator__realloc( allocator, string->data, string->length + additional_length );
      46           4 :         string->capacity = string->length + additional_length;
      47             :     }
      48             : 
      49           4 :     string->length += vsnprintf( string->data + string->length, additional_length, format, args );
      50           4 : }
      51             : 
      52           2 : void string__append__format( String *string, Allocator *allocator, const char* format, ... ){
      53             :     va_list args;
      54           2 :     va_start( args, format );
      55             : 
      56           2 :     string__append__va_list( string, allocator, format, args );
      57             : 
      58           2 :     va_end( args );
      59           2 : }

Generated by: LCOV version 1.15