diff options
Diffstat (limited to 'trio/triostr.c')
| -rw-r--r-- | trio/triostr.c | 949 | 
1 files changed, 596 insertions, 353 deletions
| diff --git a/trio/triostr.c b/trio/triostr.c index 199429e4..069e9225 100644 --- a/trio/triostr.c +++ b/trio/triostr.c @@ -1,6 +1,6 @@  /*************************************************************************   * - * $Id: triostr.c,v 1.19 2003/03/01 15:34:02 breese Exp $ + * $Id: triostr.c,v 1.34 2008/11/09 12:17:39 breese Exp $   *   * Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.   * @@ -19,23 +19,31 @@   * Include files   */ +#if defined(HAVE_CONFIG_H) +# include <config.h> +#endif  #include <assert.h>  #include <stdlib.h>  #include <string.h>  #include <ctype.h> -#include <math.h>  #include "triodef.h"  #include "triostr.h" +#if defined(TRIO_FUNC_TO_LONG_DOUBLE) +# define USE_MATH +#endif +#if defined(USE_MATH) +# include <math.h> +#endif  /*************************************************************************   * Definitions   */ -#if !defined(TRIO_STRING_PUBLIC) -# define TRIO_STRING_PUBLIC TRIO_PUBLIC +#if !defined(TRIO_PUBLIC_STRING) +# define TRIO_PUBLIC_STRING TRIO_PUBLIC  #endif -#if !defined(TRIO_STRING_PRIVATE) -# define TRIO_STRING_PRIVATE TRIO_PRIVATE +#if !defined(TRIO_PRIVATE_STRING) +# define TRIO_PRIVATE_STRING TRIO_PRIVATE  #endif  #if !defined(NULL) @@ -52,16 +60,33 @@  # define BOOLEAN_T int  #endif -#if defined(TRIO_COMPILER_SUPPORTS_C99) -# define USE_STRTOD -# define USE_STRTOF -#elif defined(TRIO_COMPILER_MSVC) -# define USE_STRTOD +#if defined(USE_MATH) +# if defined(PREDEF_STANDARD_C99) +#  if defined(TRIO_COMPILER_DECC) +#   if (TRIO_COMPILER_DECC - 0 > 80000000) +/* + * The OSF/1 runtime that comes with the DECC compiler does not support + * hexfloats conversion. + */ +#    define USE_STRTOD +#    define USE_STRTOF +#   endif +#  else +#   define USE_STRTOD +#   define USE_STRTOF +#  endif +# else +#  if defined(TRIO_COMPILER_VISUALC) +#   define USE_STRTOD +#  endif +#endif  #endif  #if defined(TRIO_PLATFORM_UNIX) -# define USE_STRCASECMP -# define USE_STRNCASECMP +# if defined(PREDEF_STANDARD_UNIX95) +#  define USE_STRCASECMP +#  define USE_STRNCASECMP +# endif  # if defined(TRIO_PLATFORM_SUNOS)  #  define USE_SYS_ERRLIST  # else @@ -71,14 +96,52 @@  #  define strcasecmp(x,y) stricmp(x,y)  #  define strncasecmp(x,y,n) strnicmp(x,y,n)  # endif -#elif defined(TRIO_PLATFORM_WIN32) +#endif + +#if defined(TRIO_PLATFORM_WIN32)  # define USE_STRCASECMP -# define strcasecmp(x,y) strcmpi(x,y) +# if defined(TRIO_PLATFORM_WINCE) +#  define strcasecmp(x,y) _stricmp(x,y) +# else +#  define strcasecmp(x,y) strcmpi(x,y) +# endif  #endif -#if !(defined(TRIO_PLATFORM_SUNOS)) -# define USE_TOLOWER -# define USE_TOUPPER +#if !defined(HAVE_CONFIG_H) +# if !(defined(TRIO_PLATFORM_SUNOS)) +#  define HAVE_TOLOWER +#  define HAVE_TOUPPER +# endif +#endif + +#if defined(USE_MATH) +# if !defined(HAVE_POWL) +#  if defined(PREDEF_STANDARD_C99) \ +   || defined(PREDEF_STANDARD_UNIX03) +#   define HAVE_POWL +#  else +#   if defined(TRIO_COMPILER_VISUALC) +#    if defined(powl) +#     define HAVE_POWL +#    endif +#   endif +#  endif +# endif +#endif + +#if defined(HAVE_POWL) +# define trio_powl(x,y) powl((x),(y)) +#else +# define trio_powl(x,y) pow((double)(x),(double)(y)) +#endif + +#if defined(TRIO_FUNC_TO_UPPER) \ + || (defined(TRIO_FUNC_EQUAL) && !defined(USE_STRCASECMP)) \ + || (defined(TRIO_FUNC_EQUAL_MAX) && !defined(USE_STRNCASECMP)) \ + || defined(TRIO_FUNC_MATCH) \ + || defined(TRIO_FUNC_TO_LONG_DOUBLE) \ + || defined(TRIO_FUNC_UPPER) +# define TRIO_FUNC_INTERNAL_TO_UPPER  #endif  /************************************************************************* @@ -96,8 +159,8 @@ struct _trio_string_t   * Constants   */ -#if !defined(TRIO_MINIMAL) -static TRIO_CONST char rcsid[] = "@(#)$Id: triostr.c,v 1.19 2003/03/01 15:34:02 breese Exp $"; +#if !defined(TRIO_EMBED_STRING) +static TRIO_CONST char rcsid[] = "@(#)$Id: triostr.c,v 1.34 2008/11/09 12:17:39 breese Exp $";  #endif  /************************************************************************* @@ -111,13 +174,154 @@ static TRIO_CONST char rcsid[] = "@(#)$Id: triostr.c,v 1.19 2003/03/01 15:34:02      @{  */ +/* + * internal_duplicate_max + */ +#if defined(TRIO_FUNC_DUPLICATE) \ + || defined(TRIO_FUNC_DUPLICATE_MAX) \ + || defined(TRIO_FUNC_STRING_DUPLICATE) \ + || defined(TRIO_FUNC_XSTRING_DUPLICATE) + +TRIO_PRIVATE_STRING char * +internal_duplicate_max +TRIO_ARGS2((source, size), +	   TRIO_CONST char *source, +	   size_t size) +{ +  char *target; + +  assert(source); + +  /* Make room for string plus a terminating zero */ +  size++; +  target = trio_create(size); +  if (target) +    { +      trio_copy_max(target, size, source); +    } +  return target; +} + +#endif + +/* + * internal_string_alloc + */ +#if defined(TRIO_FUNC_STRING_CREATE) \ + || defined(TRIO_FUNC_STRING_DUPLICATE) \ + || defined(TRIO_FUNC_XSTRING_DUPLICATE) + +TRIO_PRIVATE_STRING trio_string_t * +internal_string_alloc(TRIO_NOARGS) +{ +  trio_string_t *self; +   +  self = (trio_string_t *)TRIO_MALLOC(sizeof(trio_string_t)); +  if (self) +    { +      self->content = NULL; +      self->length = 0; +      self->allocated = 0; +    } +  return self; +} + +#endif + +/* + * internal_string_grow + * + * The size of the string will be increased by 'delta' characters. If + * 'delta' is zero, the size will be doubled. + */ +#if defined(TRIO_FUNC_STRING_CREATE) \ + || defined(TRIO_FUNC_STRING_APPEND) \ + || defined(TRIO_FUNC_XSTRING_APPEND) \ + || defined(TRIO_FUNC_XSTRING_APPEND_CHAR) + +TRIO_PRIVATE_STRING BOOLEAN_T +internal_string_grow +TRIO_ARGS2((self, delta), +	   trio_string_t *self, +	   size_t delta) +{ +  BOOLEAN_T status = FALSE; +  char *new_content; +  size_t new_size; + +  new_size = (delta == 0) +    ? ( (self->allocated == 0) ? 1 : self->allocated * 2 ) +    : self->allocated + delta; +   +  new_content = (char *)TRIO_REALLOC(self->content, new_size); +  if (new_content) +    { +      self->content = new_content; +      self->allocated = new_size; +      status = TRUE; +    } +  return status; +} + +#endif + +/* + * internal_string_grow_to + * + * The size of the string will be increased to 'length' plus one characters. + * If 'length' is less than the original size, the original size will be + * used (that is, the size of the string is never decreased). + */ +#if defined(TRIO_FUNC_STRING_APPEND) \ + || defined(TRIO_FUNC_XSTRING_APPEND) + +TRIO_PRIVATE_STRING BOOLEAN_T +internal_string_grow_to +TRIO_ARGS2((self, length), +	   trio_string_t *self, +	   size_t length) +{ +  length++; /* Room for terminating zero */ +  return (self->allocated < length) +    ? internal_string_grow(self, length - self->allocated) +    : TRUE; +} + +#endif + +#if defined(TRIO_FUNC_INTERNAL_TO_UPPER) + +TRIO_PRIVATE_STRING TRIO_INLINE int +internal_to_upper +TRIO_ARGS1((source), +	   int source) +{ +# if defined(HAVE_TOUPPER) +   +  return toupper(source); +   +# else + +  /* Does not handle locales or non-contiguous alphabetic characters */ +  return ((source >= (int)'a') && (source <= (int)'z')) +    ? source - 'a' + 'A' +    : source; +   +# endif +} + +#endif + +  /**     Create new string.     @param size Size of new string.     @return Pointer to string, or NULL if allocation failed.  */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_CREATE) + +TRIO_PUBLIC_STRING char *  trio_create  TRIO_ARGS1((size),  	   size_t size) @@ -125,13 +329,16 @@ TRIO_ARGS1((size),    return (char *)TRIO_MALLOC(size);  } +#endif  /**     Destroy string.     @param string String to be freed.  */ -TRIO_STRING_PUBLIC void +#if defined(TRIO_FUNC_DESTROY) + +TRIO_PUBLIC_STRING void  trio_destroy  TRIO_ARGS1((string),  	   char *string) @@ -142,14 +349,17 @@ TRIO_ARGS1((string),      }  } +#endif  /**     Count the number of characters in a string.     @param string String to measure. -   @return Number of characters in @string. +   @return Number of characters in @p string.  */ -TRIO_STRING_PUBLIC size_t +#if defined(TRIO_FUNC_LENGTH) + +TRIO_PUBLIC_STRING size_t  trio_length  TRIO_ARGS1((string),  	   TRIO_CONST char *string) @@ -157,8 +367,35 @@ TRIO_ARGS1((string),    return strlen(string);  } +#endif + +/** +   Count at most @p max characters in a string. + +   @param string String to measure. +   @param max Maximum number of characters to count. +   @return The maximum value of @p max and number of characters in @p string. +*/ +#if defined(TRIO_FUNC_LENGTH) + +TRIO_PUBLIC_STRING size_t +trio_length_max +TRIO_ARGS2((string, max), +	   TRIO_CONST char *string, +	   size_t max) +{ +  size_t i; + +  for (i = 0; i < max; ++i) +    { +      if (string[i] == 0) +	break; +    } +  return i; +} + +#endif -#if !defined(TRIO_MINIMAL)  /**     Append @p source at the end of @p target. @@ -172,7 +409,9 @@ TRIO_ARGS1((string),     result in a buffer overrun.     @post @p target will be zero terminated.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_APPEND) + +TRIO_PUBLIC_STRING int  trio_append  TRIO_ARGS2((target, source),  	   char *target, @@ -183,9 +422,9 @@ TRIO_ARGS2((target, source),    return (strcat(target, source) != NULL);  } -#endif /* !defined(TRIO_MINIMAL) */ -#if !defined(TRIO_MINIMAL) +#endif +  /**     Append at most @p max characters from @p source to @p target. @@ -201,7 +440,9 @@ TRIO_ARGS2((target, source),     result in a buffer overrun.     @post @p target will be zero terminated.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_APPEND_MAX) + +TRIO_PUBLIC_STRING int  trio_append_max  TRIO_ARGS3((target, max, source),  	   char *target, @@ -221,10 +462,9 @@ TRIO_ARGS3((target, max, source),      }    return TRUE;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Determine if a string contains a substring. @@ -232,7 +472,9 @@ TRIO_ARGS3((target, max, source),     @param substring String to be found.     @return Boolean value indicating success or failure.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_CONTAINS) + +TRIO_PUBLIC_STRING int  trio_contains  TRIO_ARGS2((string, substring),  	   TRIO_CONST char *string, @@ -243,10 +485,9 @@ TRIO_ARGS2((string, substring),    return (0 != strstr(string, substring));  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Copy @p source to @p target. @@ -260,7 +501,9 @@ TRIO_ARGS2((string, substring),     result in a buffer overrun.     @post @p target will be zero terminated.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_COPY) + +TRIO_PUBLIC_STRING int  trio_copy  TRIO_ARGS2((target, source),  	   char *target, @@ -272,8 +515,8 @@ TRIO_ARGS2((target, source),    (void)strcpy(target, source);    return TRUE;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /**     Copy at most @p max characters from @p source to @p target. @@ -289,7 +532,9 @@ TRIO_ARGS2((target, source),     result in a buffer overrun.     @post @p target will be zero terminated.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_COPY_MAX) + +TRIO_PUBLIC_STRING int  trio_copy_max  TRIO_ARGS3((target, max, source),  	   char *target, @@ -305,30 +550,7 @@ TRIO_ARGS3((target, max, source),    return TRUE;  } - -/* - * TrioDuplicateMax - */ -TRIO_STRING_PRIVATE char * -TrioDuplicateMax -TRIO_ARGS2((source, size), -	   TRIO_CONST char *source, -	   size_t size) -{ -  char *target; - -  assert(source); - -  /* Make room for string plus a terminating zero */ -  size++; -  target = trio_create(size); -  if (target) -    { -      trio_copy_max(target, size, source); -    } -  return target; -} - +#endif  /**     Duplicate @p source. @@ -338,16 +560,18 @@ TRIO_ARGS2((source, size),     @post @p target will be zero terminated.  */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_DUPLICATE) + +TRIO_PUBLIC_STRING char *  trio_duplicate  TRIO_ARGS1((source),  	   TRIO_CONST char *source)  { -  return TrioDuplicateMax(source, trio_length(source)); +  return internal_duplicate_max(source, trio_length(source));  } +#endif -#if !defined(TRIO_MINIMAL)  /**     Duplicate at most @p max characters of @p source. @@ -357,10 +581,13 @@ TRIO_ARGS1((source),     @post @p target will be zero terminated.  */ -TRIO_STRING_PUBLIC char * -trio_duplicate_max TRIO_ARGS2((source, max), -			      TRIO_CONST char *source, -			      size_t max) +#if defined(TRIO_FUNC_DUPLICATE_MAX) + +TRIO_PUBLIC_STRING char * +trio_duplicate_max +TRIO_ARGS2((source, max), +	   TRIO_CONST char *source, +	   size_t max)  {    size_t length; @@ -372,10 +599,10 @@ trio_duplicate_max TRIO_ARGS2((source, max),      {        length = max;      } -  return TrioDuplicateMax(source, length); +  return internal_duplicate_max(source, length);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /**     Compare if two strings are equal. @@ -386,7 +613,9 @@ trio_duplicate_max TRIO_ARGS2((source, max),     Case-insensitive comparison.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_EQUAL) + +TRIO_PUBLIC_STRING int  trio_equal  TRIO_ARGS2((first, second),  	   TRIO_CONST char *first, @@ -397,12 +626,12 @@ TRIO_ARGS2((first, second),    if ((first != NULL) && (second != NULL))      { -#if defined(USE_STRCASECMP) +# if defined(USE_STRCASECMP)        return (0 == strcasecmp(first, second)); -#else +# else        while ((*first != NIL) && (*second != NIL))  	{ -	  if (trio_to_upper(*first) != trio_to_upper(*second)) +	  if (internal_to_upper(*first) != internal_to_upper(*second))  	    {  	      break;  	    } @@ -410,11 +639,12 @@ TRIO_ARGS2((first, second),  	  second++;  	}        return ((*first == NIL) && (*second == NIL)); -#endif +# endif      }    return FALSE;  } +#endif  /**     Compare if two strings are equal. @@ -425,7 +655,9 @@ TRIO_ARGS2((first, second),     Case-sensitive comparison.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_EQUAL_CASE) + +TRIO_PUBLIC_STRING int  trio_equal_case  TRIO_ARGS2((first, second),  	   TRIO_CONST char *first, @@ -441,8 +673,8 @@ TRIO_ARGS2((first, second),    return FALSE;  } +#endif -#if !defined(TRIO_MINIMAL)  /**     Compare if two strings up until the first @p max characters are equal. @@ -453,7 +685,9 @@ TRIO_ARGS2((first, second),     Case-sensitive comparison.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_EQUAL_CASE_MAX) + +TRIO_PUBLIC_STRING int  trio_equal_case_max  TRIO_ARGS3((first, max, second),  	   TRIO_CONST char *first, @@ -469,8 +703,8 @@ TRIO_ARGS3((first, max, second),      }    return FALSE;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /**     Compare if two strings are equal. @@ -481,7 +715,9 @@ TRIO_ARGS3((first, max, second),     Collating characters are considered equal.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_EQUAL_LOCALE) + +TRIO_PUBLIC_STRING int  trio_equal_locale  TRIO_ARGS2((first, second),  	   TRIO_CONST char *first, @@ -490,13 +726,14 @@ TRIO_ARGS2((first, second),    assert(first);    assert(second); -#if defined(LC_COLLATE) +# if defined(LC_COLLATE)    return (strcoll(first, second) == 0); -#else +# else    return trio_equal(first, second); -#endif +# endif  } +#endif  /**     Compare if two strings up until the first @p max characters are equal. @@ -508,7 +745,9 @@ TRIO_ARGS2((first, second),     Case-insensitive comparison.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_EQUAL_MAX) + +TRIO_PUBLIC_STRING int  trio_equal_max  TRIO_ARGS3((first, max, second),  	   TRIO_CONST char *first, @@ -520,14 +759,14 @@ TRIO_ARGS3((first, max, second),    if ((first != NULL) && (second != NULL))      { -#if defined(USE_STRNCASECMP) +# if defined(USE_STRNCASECMP)        return (0 == strncasecmp(first, second, max)); -#else +# else        /* Not adequately tested yet */        size_t cnt = 0;        while ((*first != NIL) && (*second != NIL) && (cnt <= max))  	{ -	  if (trio_to_upper(*first) != trio_to_upper(*second)) +	  if (internal_to_upper(*first) != internal_to_upper(*second))  	    {  	      break;  	    } @@ -536,11 +775,12 @@ TRIO_ARGS3((first, max, second),  	  cnt++;  	}        return ((cnt == max) || ((*first == NIL) && (*second == NIL))); -#endif +# endif      }    return FALSE;  } +#endif  /**     Provide a textual description of an error code (errno). @@ -548,16 +788,19 @@ TRIO_ARGS3((first, max, second),     @param error_number Error number.     @return Textual description of @p error_number.  */ -TRIO_STRING_PUBLIC TRIO_CONST char * +#if defined(TRIO_FUNC_ERROR) + +TRIO_PUBLIC_STRING TRIO_CONST char *  trio_error  TRIO_ARGS1((error_number),  	   int error_number)  { -#if defined(USE_STRERROR) +# if defined(USE_STRERROR)    return strerror(error_number); -#elif defined(USE_SYS_ERRLIST) +# else +#  if defined(USE_SYS_ERRLIST)    extern char *sys_errlist[];    extern int sys_nerr; @@ -566,15 +809,16 @@ TRIO_ARGS1((error_number),      ? "unknown"      : sys_errlist[error_number]; -#else +#  else    return "unknown"; -   -#endif + +#  endif +# endif  } +#endif -#if !defined(TRIO_MINIMAL)  /**     Format the date/time according to @p format. @@ -587,7 +831,9 @@ TRIO_ARGS1((error_number),     The formatting string accepts the same specifiers as the standard C     function strftime.  */ -TRIO_STRING_PUBLIC size_t +#if defined(TRIO_FUNC_FORMAT_DATE_MAX) + +TRIO_PUBLIC_STRING size_t  trio_format_date_max  TRIO_ARGS4((target, max, format, datetime),  	   char *target, @@ -599,13 +845,12 @@ TRIO_ARGS4((target, max, format, datetime),    assert(format);    assert(datetime);    assert(max > 0); -   +    return strftime(target, max, format, datetime);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Calculate a hash value for a string. @@ -616,7 +861,9 @@ TRIO_ARGS4((target, max, format, datetime),     @p type can be one of the following     @li @c TRIO_HASH_PLAIN Plain hash function.  */ -TRIO_STRING_PUBLIC unsigned long +#if defined(TRIO_FUNC_HASH) + +TRIO_PUBLIC_STRING unsigned long  trio_hash  TRIO_ARGS2((string, type),  	   TRIO_CONST char *string, @@ -642,18 +889,19 @@ TRIO_ARGS2((string, type),      }    return value;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Find first occurrence of a character in a string.     @param string String to be searched.     @param character Character to be found. -   @param A pointer to the found character, or NULL if character was not found. +   @return A pointer to the found character, or NULL if character was not found.   */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_INDEX) + +TRIO_PUBLIC_STRING char *  trio_index  TRIO_ARGS2((string, character),  	   TRIO_CONST char *string, @@ -663,18 +911,19 @@ TRIO_ARGS2((string, character),    return strchr(string, character);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Find last occurrence of a character in a string.     @param string String to be searched.     @param character Character to be found. -   @param A pointer to the found character, or NULL if character was not found. +   @return A pointer to the found character, or NULL if character was not found.   */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_INDEX_LAST) + +TRIO_PUBLIC_STRING char *  trio_index_last  TRIO_ARGS2((string, character),  	   TRIO_CONST char *string, @@ -684,17 +933,18 @@ TRIO_ARGS2((string, character),    return strchr(string, character);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Convert the alphabetic letters in the string to lower-case.     @param target String to be converted.     @return Number of processed characters (converted or not).  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_LOWER) + +TRIO_PUBLIC_STRING int  trio_lower  TRIO_ARGS1((target),  	   char *target) @@ -703,10 +953,9 @@ TRIO_ARGS1((target),    return trio_span_function(target, target, trio_to_lower);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Compare two strings using wildcards. @@ -720,7 +969,9 @@ TRIO_ARGS1((target),     @li @c * Match any number of characters.     @li @c ? Match a single character.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_MATCH) + +TRIO_PUBLIC_STRING int  trio_match  TRIO_ARGS2((string, pattern),  	   TRIO_CONST char *string, @@ -735,7 +986,7 @@ TRIO_ARGS2((string, pattern),  	{  	  return (NIL == *pattern);  	} -      if ((trio_to_upper((int)*string) != trio_to_upper((int)*pattern)) +      if ((internal_to_upper((int)*string) != internal_to_upper((int)*pattern))  	  && ('?' != *pattern))  	{  	  return FALSE; @@ -756,10 +1007,9 @@ TRIO_ARGS2((string, pattern),    return FALSE;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Compare two strings using wildcards. @@ -773,7 +1023,9 @@ TRIO_ARGS2((string, pattern),     @li @c * Match any number of characters.     @li @c ? Match a single character.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_MATCH_CASE) + +TRIO_PUBLIC_STRING int  trio_match_case  TRIO_ARGS2((string, pattern),  	   TRIO_CONST char *string, @@ -809,10 +1061,9 @@ TRIO_ARGS2((string, pattern),    return FALSE;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Execute a function on each character in string. @@ -821,7 +1072,9 @@ TRIO_ARGS2((string, pattern),     @param Function Function to be executed.     @return Number of processed characters.  */ -TRIO_STRING_PUBLIC size_t +#if defined(TRIO_FUNC_SPAN_FUNCTION) + +TRIO_PUBLIC_STRING size_t  trio_span_function  TRIO_ARGS3((target, source, Function),  	   char *target, @@ -841,10 +1094,9 @@ TRIO_ARGS3((target, source, Function),      }    return count;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Search for a substring in a string. @@ -853,7 +1105,9 @@ TRIO_ARGS3((target, source, Function),     @return Pointer to first occurrence of @p substring in @p string, or NULL     if no match was found.  */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_SUBSTRING) + +TRIO_PUBLIC_STRING char *  trio_substring  TRIO_ARGS2((string, substring),  	   TRIO_CONST char *string, @@ -864,10 +1118,9 @@ TRIO_ARGS2((string, substring),    return strstr(string, substring);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Search for a substring in the first @p max characters of a string. @@ -877,7 +1130,9 @@ TRIO_ARGS2((string, substring),     @return Pointer to first occurrence of @p substring in @p string, or NULL     if no match was found.  */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_SUBSTRING_MAX) + +TRIO_PUBLIC_STRING char *  trio_substring_max  TRIO_ARGS3((string, max, substring),  	   TRIO_CONST char *string, @@ -905,20 +1160,21 @@ TRIO_ARGS3((string, max, substring),      }    return result;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /**     Tokenize string.     @param string String to be tokenized. -   @param tokens String containing list of delimiting characters. +   @param delimiters String containing list of delimiting characters.     @return Start of new token.     @warning @p string will be destroyed.  */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_TOKENIZE) + +TRIO_PUBLIC_STRING char *  trio_tokenize  TRIO_ARGS2((string, delimiters),  	   char *string, @@ -928,8 +1184,8 @@ TRIO_ARGS2((string, delimiters),    return strtok(string, delimiters);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /**     Convert string to floating-point number. @@ -952,16 +1208,18 @@ TRIO_ARGS2((string, delimiters),     decimal_point ::= '.'     @endverbatim  */ +#if defined(TRIO_FUNC_TO_LONG_DOUBLE) +  /* FIXME: Add EBNF for hex-floats */ -TRIO_STRING_PUBLIC trio_long_double_t +TRIO_PUBLIC_STRING trio_long_double_t  trio_to_long_double  TRIO_ARGS2((source, endp),  	   TRIO_CONST char *source,  	   char **endp)  { -#if defined(USE_STRTOLD) +# if defined(USE_STRTOLD)    return strtold(source, endp); -#else +# else    int isNegative = FALSE;    int isExponentNegative = FALSE;    trio_long_double_t integer = 0.0; @@ -981,7 +1239,7 @@ TRIO_ARGS2((source, endp),  	  integer *= base;  	  integer += (isdigit((int)*source)  		      ? (*source - '0') -		      : 10 + (trio_to_upper((int)*source) - 'A')); +		      : 10 + (internal_to_upper((int)*source) - 'A'));  	  source++;  	}        if (*source == '.') @@ -992,7 +1250,7 @@ TRIO_ARGS2((source, endp),  	      fracdiv /= base;  	      fraction += fracdiv * (isdigit((int)*source)  				     ? (*source - '0') -				     : 10 + (trio_to_upper((int)*source) - 'A')); +				     : 10 + (internal_to_upper((int)*source) - 'A'));  	      source++;  	    }  	  if ((*source == 'p') || (*source == 'P')) @@ -1042,10 +1300,10 @@ TRIO_ARGS2((source, endp),  	}        if ((*source == 'e')  	  || (*source == 'E') -#if TRIO_MICROSOFT +#  if TRIO_MICROSOFT  	  || (*source == 'd')  	  || (*source == 'D') -#endif +#  endif  	  )  	{  	  source++; /* Skip exponential indicator */ @@ -1065,9 +1323,9 @@ TRIO_ARGS2((source, endp),    if (exponent != 0)      {        if (isExponentNegative) -	value /= pow(base, (double)exponent); +	value /= trio_powl(base, (trio_long_double_t)exponent);        else -	value *= pow(base, (double)exponent); +	value *= trio_powl(base, (trio_long_double_t)exponent);      }    if (isNegative)      value = -value; @@ -1075,9 +1333,10 @@ TRIO_ARGS2((source, endp),    if (endp)      *endp = (char *)source;    return value; -#endif +# endif  } +#endif  /**     Convert string to floating-point number. @@ -1088,7 +1347,9 @@ TRIO_ARGS2((source, endp),     See @ref trio_to_long_double.  */ -TRIO_STRING_PUBLIC double +#if defined(TRIO_FUNC_TO_DOUBLE) + +TRIO_PUBLIC_STRING double  trio_to_double  TRIO_ARGS2((source, endp),  	   TRIO_CONST char *source, @@ -1101,7 +1362,8 @@ TRIO_ARGS2((source, endp),  #endif  } -#if !defined(TRIO_MINIMAL) +#endif +  /**     Convert string to floating-point number. @@ -1111,20 +1373,22 @@ TRIO_ARGS2((source, endp),     See @ref trio_to_long_double.  */ -TRIO_STRING_PUBLIC float +#if defined(TRIO_FUNC_TO_FLOAT) + +TRIO_PUBLIC_STRING float  trio_to_float  TRIO_ARGS2((source, endp),  	   TRIO_CONST char *source,  	   char **endp)  { -#if defined(USE_STRTOF) +#  if defined(USE_STRTOF)    return strtof(source, endp); -#else +#  else    return (float)trio_to_long_double(source, endp); -#endif +#  endif  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /**     Convert string to signed integer. @@ -1133,7 +1397,9 @@ TRIO_ARGS2((source, endp),     @param endp Pointer to end of converted string.     @param base Radix number of number.  */ -TRIO_STRING_PUBLIC long +#if defined(TRIO_FUNC_TO_LONG) + +TRIO_PUBLIC_STRING long  trio_to_long  TRIO_ARGS3((string, endp, base),  	   TRIO_CONST char *string, @@ -1146,35 +1412,37 @@ TRIO_ARGS3((string, endp, base),    return strtol(string, endp, base);  } +#endif -#if !defined(TRIO_MINIMAL)  /**     Convert one alphabetic letter to lower-case.     @param source The letter to be converted.     @return The converted letter.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_TO_LOWER) + +TRIO_PUBLIC_STRING int  trio_to_lower  TRIO_ARGS1((source),  	   int source)  { -#if defined(USE_TOLOWER) +# if defined(HAVE_TOLOWER)    return tolower(source); -#else +# else    /* Does not handle locales or non-contiguous alphabetic characters */    return ((source >= (int)'A') && (source <= (int)'Z'))      ? source - 'A' + 'a'      : source; -#endif +# endif  } -#endif /* !defined(TRIO_MINIMAL) */ -#if !defined(TRIO_MINIMAL) +#endif +  /**     Convert string to unsigned integer. @@ -1182,7 +1450,9 @@ TRIO_ARGS1((source),     @param endp Pointer to end of converted string.     @param base Radix number of number.  */ -TRIO_STRING_PUBLIC unsigned long +#if defined(TRIO_FUNC_TO_UNSIGNED_LONG) + +TRIO_PUBLIC_STRING unsigned long  trio_to_unsigned_long  TRIO_ARGS3((string, endp, base),  	   TRIO_CONST char *string, @@ -1194,8 +1464,8 @@ TRIO_ARGS3((string, endp, base),    return strtoul(string, endp, base);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /**     Convert one alphabetic letter to upper-case. @@ -1203,43 +1473,37 @@ TRIO_ARGS3((string, endp, base),     @param source The letter to be converted.     @return The converted letter.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_TO_UPPER) + +TRIO_PUBLIC_STRING int  trio_to_upper  TRIO_ARGS1((source),  	   int source)  { -#if defined(USE_TOUPPER) -   -  return toupper(source); -   -#else +  return internal_to_upper(source); +} -  /* Does not handle locales or non-contiguous alphabetic characters */ -  return ((source >= (int)'a') && (source <= (int)'z')) -    ? source - 'a' + 'A' -    : source; -    #endif -} -#if !defined(TRIO_MINIMAL)  /**     Convert the alphabetic letters in the string to upper-case.     @param target The string to be converted.     @return The number of processed characters (converted or not).  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_UPPER) + +TRIO_PUBLIC_STRING int  trio_upper  TRIO_ARGS1((target),  	   char *target)  {    assert(target); -  return trio_span_function(target, target, trio_to_upper); +  return trio_span_function(target, target, internal_to_upper);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /** @} End of StaticStrings */ @@ -1255,96 +1519,25 @@ TRIO_ARGS1((target),      @{  */ -/* - * TrioStringAlloc - */ -TRIO_STRING_PRIVATE trio_string_t * -TrioStringAlloc(TRIO_NOARGS) -{ -  trio_string_t *self; -   -  self = (trio_string_t *)TRIO_MALLOC(sizeof(trio_string_t)); -  if (self) -    { -      self->content = NULL; -      self->length = 0; -      self->allocated = 0; -    } -  return self; -} - - -/* - * TrioStringGrow - * - * The size of the string will be increased by 'delta' characters. If - * 'delta' is zero, the size will be doubled. - */ -TRIO_STRING_PRIVATE BOOLEAN_T -TrioStringGrow -TRIO_ARGS2((self, delta), -	   trio_string_t *self, -	   size_t delta) -{ -  BOOLEAN_T status = FALSE; -  char *new_content; -  size_t new_size; - -  new_size = (delta == 0) -    ? ( (self->allocated == 0) ? 1 : self->allocated * 2 ) -    : self->allocated + delta; -   -  new_content = (char *)TRIO_REALLOC(self->content, new_size); -  if (new_content) -    { -      self->content = new_content; -      self->allocated = new_size; -      status = TRUE; -    } -  return status; -} - - -#if !defined(TRIO_MINIMAL) -/* - * TrioStringGrowTo - * - * The size of the string will be increased to 'length' plus one characters. - * If 'length' is less than the original size, the original size will be - * used (that is, the size of the string is never decreased). - */ -TRIO_STRING_PRIVATE BOOLEAN_T -TrioStringGrowTo -TRIO_ARGS2((self, length), -	   trio_string_t *self, -	   size_t length) -{ -  length++; /* Room for terminating zero */ -  return (self->allocated < length) -    ? TrioStringGrow(self, length - self->allocated) -    : TRUE; -} -#endif /* !defined(TRIO_MINIMAL) */ - - -#if !defined(TRIO_MINIMAL)  /**     Create a new dynamic string.     @param initial_size Initial size of the buffer.     @return Newly allocated dynamic string, or NULL if memory allocation failed.  */ -TRIO_STRING_PUBLIC trio_string_t * +#if defined(TRIO_FUNC_STRING_CREATE) + +TRIO_PUBLIC_STRING trio_string_t *  trio_string_create  TRIO_ARGS1((initial_size),  	   int initial_size)  {    trio_string_t *self; -  self = TrioStringAlloc(); +  self = internal_string_alloc();    if (self)      { -      if (TrioStringGrow(self, +      if (internal_string_grow(self,  			 (size_t)((initial_size > 0) ? initial_size : 1)))  	{  	  self->content[0] = (char)0; @@ -1358,15 +1551,17 @@ TRIO_ARGS1((initial_size),      }    return self;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /**     Deallocate the dynamic string and its contents.     @param self Dynamic string  */ -TRIO_STRING_PUBLIC void +#if defined(TRIO_FUNC_STRING_DESTROY) + +TRIO_PUBLIC_STRING void  trio_string_destroy  TRIO_ARGS1((self),  	   trio_string_t *self) @@ -1380,8 +1575,8 @@ TRIO_ARGS1((self),      }  } +#endif -#if !defined(TRIO_MINIMAL)  /**     Get a pointer to the content. @@ -1396,7 +1591,9 @@ TRIO_ARGS1((self),     number of characters from the ending of the string, starting at the     terminating zero, is returned.  */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNCT_STRING_GET) + +TRIO_PUBLIC_STRING char *  trio_string_get  TRIO_ARGS2((self, offset),  	   trio_string_t *self, @@ -1431,8 +1628,8 @@ TRIO_ARGS2((self, offset),      }    return result;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /**     Extract the content. @@ -1443,7 +1640,9 @@ TRIO_ARGS2((self, offset),     The content is removed from the dynamic string. This enables destruction     of the dynamic string without deallocation of the content.  */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_STRING_EXTRACT) + +TRIO_PUBLIC_STRING char *  trio_string_extract  TRIO_ARGS1((self),  	   trio_string_t *self) @@ -1459,8 +1658,8 @@ TRIO_ARGS1((self),    return result;  } +#endif -#if !defined(TRIO_MINIMAL)  /**     Set the content of the dynamic string. @@ -1474,7 +1673,9 @@ TRIO_ARGS1((self),     This function will make a copy of @p buffer.     You are responsible for deallocating @p buffer yourself.  */ -TRIO_STRING_PUBLIC void +#if defined(TRIO_FUNC_XSTRING_SET) + +TRIO_PUBLIC_STRING void  trio_xstring_set  TRIO_ARGS2((self, buffer),  	   trio_string_t *self, @@ -1485,13 +1686,15 @@ TRIO_ARGS2((self, buffer),    trio_destroy(self->content);    self->content = trio_duplicate(buffer);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /*   * trio_string_size   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_SIZE) + +TRIO_PUBLIC_STRING int  trio_string_size  TRIO_ARGS1((self),  	   trio_string_t *self) @@ -1501,11 +1704,14 @@ TRIO_ARGS1((self),    return self->allocated;  } +#endif  /*   * trio_string_terminate   */ -TRIO_STRING_PUBLIC void +#if defined(TRIO_FUNC_STRING_TERMINATE) + +TRIO_PUBLIC_STRING void  trio_string_terminate  TRIO_ARGS1((self),  	   trio_string_t *self) @@ -1513,8 +1719,8 @@ TRIO_ARGS1((self),    trio_xstring_append_char(self, 0);  } +#endif -#if !defined(TRIO_MINIMAL)  /**     Append the second string to the first. @@ -1522,7 +1728,9 @@ TRIO_ARGS1((self),     @param other Dynamic string to copy from.     @return Boolean value indicating success or failure.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_APPEND) + +TRIO_PUBLIC_STRING int  trio_string_append  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1534,7 +1742,7 @@ TRIO_ARGS2((self, other),    assert(other);    length = self->length + other->length; -  if (!TrioStringGrowTo(self, length)) +  if (!internal_string_grow_to(self, length))      goto error;    trio_copy(&self->content[self->length], other->content);    self->length = length; @@ -1543,14 +1751,16 @@ TRIO_ARGS2((self, other),   error:    return FALSE;  } -#endif /* !defined(TRIO_MINIMAL) */ + +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_append   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_APPEND) + +TRIO_PUBLIC_STRING int  trio_xstring_append  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1562,7 +1772,7 @@ TRIO_ARGS2((self, other),    assert(other);    length = self->length + trio_length(other); -  if (!TrioStringGrowTo(self, length)) +  if (!internal_string_grow_to(self, length))      goto error;    trio_copy(&self->content[self->length], other);    self->length = length; @@ -1571,13 +1781,15 @@ TRIO_ARGS2((self, other),   error:    return FALSE;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /*   * trio_xstring_append_char   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_APPEND_CHAR) + +TRIO_PUBLIC_STRING int  trio_xstring_append_char  TRIO_ARGS2((self, character),  	   trio_string_t *self, @@ -1587,7 +1799,7 @@ TRIO_ARGS2((self, character),    if ((int)self->length >= trio_string_size(self))      { -      if (!TrioStringGrow(self, 0)) +      if (!internal_string_grow(self, 0))  	goto error;      }    self->content[self->length] = character; @@ -1598,8 +1810,8 @@ TRIO_ARGS2((self, character),    return FALSE;  } +#endif -#if !defined(TRIO_MINIMAL)  /**     Search for the first occurrence of second parameter in the first. @@ -1607,7 +1819,9 @@ TRIO_ARGS2((self, character),     @param other Dynamic string to copy from.     @return Boolean value indicating success or failure.  */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_CONTAINS) + +TRIO_PUBLIC_STRING int  trio_string_contains  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1618,14 +1832,15 @@ TRIO_ARGS2((self, other),    return trio_contains(self->content, other->content);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_contains   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_CONTAINS) + +TRIO_PUBLIC_STRING int  trio_xstring_contains  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1636,14 +1851,15 @@ TRIO_ARGS2((self, other),    return trio_contains(self->content, other);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_copy   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_COPY) + +TRIO_PUBLIC_STRING int  trio_string_copy  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1655,14 +1871,16 @@ TRIO_ARGS2((self, other),    self->length = 0;    return trio_string_append(self, other);  } -#endif /* !defined(TRIO_MINIMAL) */ + +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_copy   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_COPY) + +TRIO_PUBLIC_STRING int  trio_xstring_copy  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1674,14 +1892,15 @@ TRIO_ARGS2((self, other),    self->length = 0;    return trio_xstring_append(self, other);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_duplicate   */ -TRIO_STRING_PUBLIC trio_string_t * +#if defined(TRIO_FUNC_STRING_DUPLICATE) + +TRIO_PUBLIC_STRING trio_string_t *  trio_string_duplicate  TRIO_ARGS1((other),  	   trio_string_t *other) @@ -1690,10 +1909,10 @@ TRIO_ARGS1((other),    assert(other); -  self = TrioStringAlloc(); +  self = internal_string_alloc();    if (self)      { -      self->content = TrioDuplicateMax(other->content, other->length); +      self->content = internal_duplicate_max(other->content, other->length);        if (self->content)  	{  	  self->length = other->length; @@ -1706,13 +1925,15 @@ TRIO_ARGS1((other),      }    return self;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif  /*   * trio_xstring_duplicate   */ -TRIO_STRING_PUBLIC trio_string_t * +#if defined(TRIO_FUNC_XSTRING_DUPLICATE) + +TRIO_PUBLIC_STRING trio_string_t *  trio_xstring_duplicate  TRIO_ARGS1((other),  	   TRIO_CONST char *other) @@ -1721,10 +1942,10 @@ TRIO_ARGS1((other),    assert(other); -  self = TrioStringAlloc(); +  self = internal_string_alloc();    if (self)      { -      self->content = TrioDuplicateMax(other, trio_length(other)); +      self->content = internal_duplicate_max(other, trio_length(other));        if (self->content)  	{  	  self->length = trio_length(self->content); @@ -1738,12 +1959,14 @@ TRIO_ARGS1((other),    return self;  } +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_equal   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_EQUAL) + +TRIO_PUBLIC_STRING int  trio_string_equal  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1754,14 +1977,16 @@ TRIO_ARGS2((self, other),    return trio_equal(self->content, other->content);  } -#endif /* !defined(TRIO_MINIMAL) */ + +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_equal   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_EQUAL) + +TRIO_PUBLIC_STRING int  trio_xstring_equal  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1772,14 +1997,15 @@ TRIO_ARGS2((self, other),    return trio_equal(self->content, other);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_equal_max   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_EQUAL_MAX) + +TRIO_PUBLIC_STRING int  trio_string_equal_max  TRIO_ARGS3((self, max, other),  	   trio_string_t *self, @@ -1791,14 +2017,14 @@ TRIO_ARGS3((self, max, other),    return trio_equal_max(self->content, max, other->content);  } -#endif /* !defined(TRIO_MINIMAL) */ - +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_equal_max   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_EQUAL_MAX) + +TRIO_PUBLIC_STRING int  trio_xstring_equal_max  TRIO_ARGS3((self, max, other),  	   trio_string_t *self, @@ -1810,14 +2036,15 @@ TRIO_ARGS3((self, max, other),    return trio_equal_max(self->content, max, other);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_equal_case   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_EQUAL_CASE) + +TRIO_PUBLIC_STRING int  trio_string_equal_case  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1828,14 +2055,15 @@ TRIO_ARGS2((self, other),    return trio_equal_case(self->content, other->content);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_equal_case   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_EQUAL_CASE) + +TRIO_PUBLIC_STRING int  trio_xstring_equal_case  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1846,14 +2074,15 @@ TRIO_ARGS2((self, other),    return trio_equal_case(self->content, other);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_equal_case_max   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_EQUAL_CASE_MAX) + +TRIO_PUBLIC_STRING int  trio_string_equal_case_max  TRIO_ARGS3((self, max, other),  	   trio_string_t *self, @@ -1865,14 +2094,15 @@ TRIO_ARGS3((self, max, other),    return trio_equal_case_max(self->content, max, other->content);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_equal_case_max   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_EQUAL_CASE_MAX) + +TRIO_PUBLIC_STRING int  trio_xstring_equal_case_max  TRIO_ARGS3((self, max, other),  	   trio_string_t *self, @@ -1884,14 +2114,15 @@ TRIO_ARGS3((self, max, other),    return trio_equal_case_max(self->content, max, other);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_format_data_max   */ -TRIO_STRING_PUBLIC size_t +#if defined(TRIO_FUNC_STRING_FORMAT_DATE_MAX) + +TRIO_PUBLIC_STRING size_t  trio_string_format_date_max  TRIO_ARGS4((self, max, format, datetime),  	   trio_string_t *self, @@ -1903,14 +2134,15 @@ TRIO_ARGS4((self, max, format, datetime),    return trio_format_date_max(self->content, max, format, datetime);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_index   */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_STRING_INDEX) + +TRIO_PUBLIC_STRING char *  trio_string_index  TRIO_ARGS2((self, character),  	   trio_string_t *self, @@ -1920,14 +2152,15 @@ TRIO_ARGS2((self, character),    return trio_index(self->content, character);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_index_last   */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_STRING_INDEX_LAST) + +TRIO_PUBLIC_STRING char *  trio_string_index_last  TRIO_ARGS2((self, character),  	   trio_string_t *self, @@ -1937,14 +2170,15 @@ TRIO_ARGS2((self, character),    return trio_index_last(self->content, character);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_length   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_LENGTH) + +TRIO_PUBLIC_STRING int  trio_string_length  TRIO_ARGS1((self),  	   trio_string_t *self) @@ -1957,14 +2191,15 @@ TRIO_ARGS1((self),      }    return self->length;  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_lower   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_LOWER) + +TRIO_PUBLIC_STRING int  trio_string_lower  TRIO_ARGS1((self),  	   trio_string_t *self) @@ -1973,14 +2208,15 @@ TRIO_ARGS1((self),    return trio_lower(self->content);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_match   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_MATCH) + +TRIO_PUBLIC_STRING int  trio_string_match  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -1991,14 +2227,15 @@ TRIO_ARGS2((self, other),    return trio_match(self->content, other->content);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_match   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_MATCH) + +TRIO_PUBLIC_STRING int  trio_xstring_match  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -2009,14 +2246,15 @@ TRIO_ARGS2((self, other),    return trio_match(self->content, other);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_match_case   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_MATCH_CASE) + +TRIO_PUBLIC_STRING int  trio_string_match_case  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -2027,14 +2265,15 @@ TRIO_ARGS2((self, other),    return trio_match_case(self->content, other->content);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_match_case   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_XSTRING_MATCH_CASE) + +TRIO_PUBLIC_STRING int  trio_xstring_match_case  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -2045,14 +2284,15 @@ TRIO_ARGS2((self, other),    return trio_match_case(self->content, other);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_substring   */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_STRING_SUBSTRING) + +TRIO_PUBLIC_STRING char *  trio_string_substring  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -2063,14 +2303,15 @@ TRIO_ARGS2((self, other),    return trio_substring(self->content, other->content);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_xstring_substring   */ -TRIO_STRING_PUBLIC char * +#if defined(TRIO_FUNC_XSTRING_SUBSTRING) + +TRIO_PUBLIC_STRING char *  trio_xstring_substring  TRIO_ARGS2((self, other),  	   trio_string_t *self, @@ -2081,14 +2322,15 @@ TRIO_ARGS2((self, other),    return trio_substring(self->content, other);  } -#endif /* !defined(TRIO_MINIMAL) */ +#endif -#if !defined(TRIO_MINIMAL)  /*   * trio_string_upper   */ -TRIO_STRING_PUBLIC int +#if defined(TRIO_FUNC_STRING_UPPER) + +TRIO_PUBLIC_STRING int  trio_string_upper  TRIO_ARGS1((self),  	   trio_string_t *self) @@ -2097,6 +2339,7 @@ TRIO_ARGS1((self),    return trio_upper(self->content);  } -#endif /* !defined(TRIO_MINIMAL) */ + +#endif  /** @} End of DynamicStrings */ | 
