Rev 37901 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/*************************************************************************** $Id: triostr.h,v 1.15 2005/05/29 11:56:01 breese Exp $** Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.** Permission to use, copy, modify, and distribute this software for any* purpose with or without fee is hereby granted, provided that the above* copyright notice and this permission notice appear in all copies.** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF* MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND* CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.*************************************************************************/#ifndef TRIO_TRIOSTR_H#define TRIO_TRIOSTR_H/** Documentation is located in triostr.c*///#include <assert.h>#include <stdlib.h>#include <string.h>#include <time.h>#include "triodef.h"#include "triop.h"#ifdef __cplusplusextern "C" {#endifenum {TRIO_HASH_NONE = 0,TRIO_HASH_PLAIN,TRIO_HASH_TWOSIGNED};#if !defined(TRIO_PUBLIC_STRING)# if !defined(TRIO_PUBLIC)# define TRIO_PUBLIC# endif# define TRIO_PUBLIC_STRING TRIO_PUBLIC#endif/************************************************************************** Dependencies*/#if defined(TRIO_EMBED_STRING)/** The application that triostr is embedded in must define which functions* it uses.** The following resolves internal dependencies.*/# if defined(TRIO_FUNC_XSTRING_SET)# if !defined(TRIO_FUNC_DUPLICATE)# define TRIO_FUNC_DUPLICATE# endif# endif# if defined(TRIO_FUNC_DUPLICATE) \|| defined(TRIO_FUNC_DUPLICATE_MAX) \|| defined(TRIO_FUNC_STRING_DUPLICATE) \|| defined(TRIO_FUNC_XSTRING_DUPLICATE)# if !defined(TRIO_FUNC_CREATE)# define TRIO_FUNC_CREATE# endif# if !defined(TRIO_FUNC_COPY_MAX)# define TRIO_FUNC_COPY_MAX# endif# endif# if defined(TRIO_FUNC_STRING_CREATE)# if !defined(TRIO_FUNC_STRING_DESTROY)# define TRIO_FUNC_STRING_DESTROY# endif# endif# if defined(TRIO_FUNC_STRING_DESTROY) \|| defined(TRIO_FUNC_XSTRING_SET)# if !defined(TRIO_FUNC_DESTROY)# define TRIO_FUNC_DESTROY# endif# endif# if defined(TRIO_FUNC_EQUAL_LOCALE) \|| defined(TRIO_FUNC_STRING_EQUAL) \|| defined(TRIO_FUNC_XSTRING_EQUAL)# if !defined(TRIO_FUNC_EQUAL)# define TRIO_FUNC_EQUAL# endif# endif# if defined(TRIO_FUNC_EQUAL_CASE) \|| defined(TRIO_FUNC_STRING_EQUAL_CASE) \|| defined(TRIO_FUNC_XSTRING_EQUAL_CASE)# if !defined(TRIO_FUNC_EQUAL_CASE)# define TRIO_FUNC_EQUAL_CASE# endif# endif# if defined(TRIO_FUNC_SUBSTRING_MAX) \|| defined(TRIO_FUNC_STRING_EQUAL_MAX) \|| defined(TRIO_FUNC_XSTRING_EQUAL_MAX)# if !defined(TRIO_FUNC_EQUAL_MAX)# define TRIO_FUNC_EQUAL_MAX# endif# endif# if defined(TRIO_FUNC_TO_DOUBLE) \|| defined(TRIO_FUNC_TO_FLOAT)# if !defined(TRIO_FUNC_TO_LONG_DOUBLE)# define TRIO_FUNC_TO_LONG_DOUBLE# endif# endif# if defined(TRIO_FUNC_STRING_TERMINATE)# if !defined(TRIO_FUNC_XSTRING_APPEND_CHAR)# define TRIO_FUNC_XSTRING_APPEND_CHAR# endif# endif# if defined(TRIO_FUNC_XSTRING_APPEND_CHAR)# if !defined(TRIO_FUNC_STRING_SIZE)# define TRIO_FUNC_STRING_SIZE# endif# endif#else/** When triostr is not embedded all all functions are defined.*/# define TRIO_FUNC_APPEND# define TRIO_FUNC_APPEND_MAX# define TRIO_FUNC_CONTAINS# define TRIO_FUNC_COPY# define TRIO_FUNC_COPY_MAX# define TRIO_FUNC_CREATE# define TRIO_FUNC_DESTROY# define TRIO_FUNC_DUPLICATE# define TRIO_FUNC_DUPLICATE_MAX# define TRIO_FUNC_EQUAL# define TRIO_FUNC_EQUAL_CASE# define TRIO_FUNC_EQUAL_CASE_MAX# define TRIO_FUNC_EQUAL_LOCALE# define TRIO_FUNC_EQUAL_MAX# define TRIO_FUNC_ERROR# define TRIO_FUNC_FORMAT_DATE_MAX# define TRIO_FUNC_HASH# define TRIO_FUNC_INDEX# define TRIO_FUNC_INDEX_LAST# define TRIO_FUNC_LENGTH# define TRIO_FUNC_LOWER# define TRIO_FUNC_MATCH# define TRIO_FUNC_MATCH_CASE# define TRIO_FUNC_SPAN_FUNCTION# define TRIO_FUNC_SUBSTRING# define TRIO_FUNC_SUBSTRING_MAX# define TRIO_FUNC_TO_DOUBLE# define TRIO_FUNC_TO_FLOAT# define TRIO_FUNC_TO_LONG# define TRIO_FUNC_TO_LONG_DOUBLE# define TRIO_FUNC_TO_LOWER# define TRIO_FUNC_TO_UNSIGNED_LONG# define TRIO_FUNC_TO_UPPER# define TRIO_FUNC_TOKENIZE# define TRIO_FUNC_UPPER# define TRIO_FUNC_STRING_APPEND# define TRIO_FUNC_STRING_CONTAINS# define TRIO_FUNC_STRING_COPY# define TRIO_FUNC_STRING_CREATE# define TRIO_FUNC_STRING_DESTROY# define TRIO_FUNC_STRING_DUPLICATE# define TRIO_FUNC_STRING_EQUAL# define TRIO_FUNC_STRING_EQUAL_CASE# define TRIO_FUNC_STRING_EQUAL_CASE_MAX# define TRIO_FUNC_STRING_EQUAL_MAX# define TRIO_FUNC_STRING_EXTRACT# define TRIO_FUNC_STRING_FORMAT_DATE_MAX# define TRIO_FUNC_STRING_GET# define TRIO_FUNC_STRING_INDEX# define TRIO_FUNC_STRING_INDEX_LAST# define TRIO_FUNC_STRING_LENGTH# define TRIO_FUNC_STRING_LOWER# define TRIO_FUNC_STRING_MATCH# define TRIO_FUNC_STRING_MATCH_CASE# define TRIO_FUNC_STRING_SIZE# define TRIO_FUNC_STRING_SUBSTRING# define TRIO_FUNC_STRING_TERMINATE# define TRIO_FUNC_STRING_UPPER# define TRIO_FUNC_XSTRING_APPEND# define TRIO_FUNC_XSTRING_APPEND_CHAR# define TRIO_FUNC_XSTRING_CONTAINS# define TRIO_FUNC_XSTRING_COPY# define TRIO_FUNC_XSTRING_DUPLICATE# define TRIO_FUNC_XSTRING_EQUAL# define TRIO_FUNC_XSTRING_EQUAL_CASE# define TRIO_FUNC_XSTRING_EQUAL_CASE_MAX# define TRIO_FUNC_XSTRING_EQUAL_MAX# define TRIO_FUNC_XSTRING_MATCH# define TRIO_FUNC_XSTRING_MATCH_CASE# define TRIO_FUNC_XSTRING_SET# define TRIO_FUNC_XSTRING_SUBSTRING#endif/************************************************************************** String functions*/#if defined(TRIO_FUNC_APPEND)TRIO_PUBLIC_STRING inttrio_appendTRIO_PROTO((char *target, TRIO_CONST char *source));#endif#if defined(TRIO_FUNC_APPEND_MAX)TRIO_PUBLIC_STRING inttrio_append_maxTRIO_PROTO((char *target, size_t max, TRIO_CONST char *source));#endif#if defined(TRIO_FUNC_CONTAINS)TRIO_PUBLIC_STRING inttrio_containsTRIO_PROTO((TRIO_CONST char *string, TRIO_CONST char *substring));#endif#if defined(TRIO_FUNC_COPY)TRIO_PUBLIC_STRING inttrio_copyTRIO_PROTO((char *target, TRIO_CONST char *source));#endif#if defined(TRIO_FUNC_COPY_MAX)TRIO_PUBLIC_STRING inttrio_copy_maxTRIO_PROTO((char *target, size_t max, TRIO_CONST char *source));#endif#if defined(TRIO_FUNC_CREATE)TRIO_PUBLIC_STRING char *trio_createTRIO_PROTO((size_t size));#endif#if defined(TRIO_FUNC_DESTROY)TRIO_PUBLIC_STRING voidtrio_destroyTRIO_PROTO((char *string));#endif#if defined(TRIO_FUNC_DUPLICATE)TRIO_PUBLIC_STRING char *trio_duplicateTRIO_PROTO((TRIO_CONST char *source));#endif#if defined(TRIO_FUNC_DUPLICATE_MAX)TRIO_PUBLIC_STRING char *trio_duplicate_maxTRIO_PROTO((TRIO_CONST char *source, size_t max));#endif#if defined(TRIO_FUNC_EQUAL)TRIO_PUBLIC_STRING inttrio_equalTRIO_PROTO((TRIO_CONST char *first, TRIO_CONST char *second));#endif#if defined(TRIO_FUNC_EQUAL_CASE)TRIO_PUBLIC_STRING inttrio_equal_caseTRIO_PROTO((TRIO_CONST char *first, TRIO_CONST char *second));#endif#if defined(TRIO_FUNC_EQUAL_CASE_MAX)TRIO_PUBLIC_STRING inttrio_equal_case_maxTRIO_PROTO((TRIO_CONST char *first, size_t max, TRIO_CONST char *second));#endif#if defined(TRIO_FUNC_EQUAL_LOCALE)TRIO_PUBLIC_STRING inttrio_equal_localeTRIO_PROTO((TRIO_CONST char *first, TRIO_CONST char *second));#endif#if defined(TRIO_FUNC_EQUAL_MAX)TRIO_PUBLIC_STRING inttrio_equal_maxTRIO_PROTO((TRIO_CONST char *first, size_t max, TRIO_CONST char *second));#endif#if defined(TRIO_FUNC_ERROR)TRIO_PUBLIC_STRING TRIO_CONST char *trio_errorTRIO_PROTO((int));#endif#if defined(TRIO_FUNC_FORMAT_DATE_MAX)TRIO_PUBLIC_STRING size_ttrio_format_date_maxTRIO_PROTO((char *target, size_t max, TRIO_CONST char *format, TRIO_CONST struct tm *datetime));#endif#if defined(TRIO_FUNC_HASH)TRIO_PUBLIC_STRING unsigned longtrio_hashTRIO_PROTO((TRIO_CONST char *string, int type));#endif#if defined(TRIO_FUNC_INDEX)TRIO_PUBLIC_STRING char *trio_indexTRIO_PROTO((TRIO_CONST char *string, int character));#endif#if defined(TRIO_FUNC_INDEX_LAST)TRIO_PUBLIC_STRING char *trio_index_lastTRIO_PROTO((TRIO_CONST char *string, int character));#endif#if defined(TRIO_FUNC_LENGTH)TRIO_PUBLIC_STRING size_ttrio_lengthTRIO_PROTO((TRIO_CONST char *string));#endif#if defined(TRIO_FUNC_LOWER)TRIO_PUBLIC_STRING inttrio_lowerTRIO_PROTO((char *target));#endif#if defined(TRIO_FUNC_MATCH)TRIO_PUBLIC_STRING inttrio_matchTRIO_PROTO((TRIO_CONST char *string, TRIO_CONST char *pattern));#endif#if defined(TRIO_FUNC_MATCH_CASE)TRIO_PUBLIC_STRING inttrio_match_caseTRIO_PROTO((TRIO_CONST char *string, TRIO_CONST char *pattern));#endif#if defined(TRIO_FUNC_SPAN_FUNCTION)TRIO_PUBLIC_STRING size_ttrio_span_functionTRIO_PROTO((char *target, TRIO_CONST char *source, int (*Function) TRIO_PROTO((int))));#endif#if defined(TRIO_FUNC_SUBSTRING)TRIO_PUBLIC_STRING char *trio_substringTRIO_PROTO((TRIO_CONST char *string, TRIO_CONST char *substring));#endif#if defined(TRIO_FUNC_SUBSTRING_MAX)TRIO_PUBLIC_STRING char *trio_substring_maxTRIO_PROTO((TRIO_CONST char *string, size_t max, TRIO_CONST char *substring));#endif#if defined(TRIO_FUNC_TO_DOUBLE)TRIO_PUBLIC_STRING doubletrio_to_doubleTRIO_PROTO((TRIO_CONST char *source, char **endp));#endif#if defined(TRIO_FUNC_TO_FLOAT)TRIO_PUBLIC_STRING floattrio_to_floatTRIO_PROTO((TRIO_CONST char *source, char **endp));#endif#if defined(TRIO_FUNC_TO_LONG)TRIO_PUBLIC_STRING longtrio_to_longTRIO_PROTO((TRIO_CONST char *source, char **endp, int base));#endif#if defined(TRIO_FUNC_TO_LOWER)TRIO_PUBLIC_STRING inttrio_to_lowerTRIO_PROTO((int source));#endif#if defined(TRIO_FUNC_TO_LONG_DOUBLE)TRIO_PUBLIC_STRING trio_long_double_ttrio_to_long_doubleTRIO_PROTO((TRIO_CONST char *source, char **endp));#endif#if defined(TRIO_FUNC_TO_UNSIGNED_LONG)TRIO_PUBLIC_STRING unsigned longtrio_to_unsigned_longTRIO_PROTO((TRIO_CONST char *source, char **endp, int base));#endif#if defined(TRIO_FUNC_TO_UPPER)TRIO_PUBLIC_STRING inttrio_to_upperTRIO_PROTO((int source));#endif#if defined(TRIO_FUNC_TOKENIZE)TRIO_PUBLIC_STRING char *trio_tokenizeTRIO_PROTO((char *string, TRIO_CONST char *delimiters));#endif#if defined(TRIO_FUNC_UPPER)TRIO_PUBLIC_STRING inttrio_upperTRIO_PROTO((char *target));#endif/************************************************************************** Dynamic string functions*//** Opaque type for dynamic strings*/typedef struct _trio_string_t trio_string_t;#if defined(TRIO_FUNC_STRING_APPEND)TRIO_PUBLIC_STRING inttrio_string_appendTRIO_PROTO((trio_string_t *self, trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_CONTAINS)TRIO_PUBLIC_STRING inttrio_string_containsTRIO_PROTO((trio_string_t *self, trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_COPY)TRIO_PUBLIC_STRING inttrio_string_copyTRIO_PROTO((trio_string_t *self, trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_CREATE)TRIO_PUBLIC_STRING trio_string_t *trio_string_createTRIO_PROTO((int initial_size));#endif#if defined(TRIO_FUNC_STRING_DESTROY)TRIO_PUBLIC_STRING voidtrio_string_destroyTRIO_PROTO((trio_string_t *self));#endif#if defined(TRIO_FUNC_STRING_DUPLICATE)TRIO_PUBLIC_STRING trio_string_t *trio_string_duplicateTRIO_PROTO((trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_EQUAL)TRIO_PUBLIC_STRING inttrio_string_equalTRIO_PROTO((trio_string_t *self, trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_EQUAL_MAX)TRIO_PUBLIC_STRING inttrio_string_equal_maxTRIO_PROTO((trio_string_t *self, size_t max, trio_string_t *second));#endif#if defined(TRIO_FUNC_STRING_EQUAL_CASE)TRIO_PUBLIC_STRING inttrio_string_equal_caseTRIO_PROTO((trio_string_t *self, trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_EQUAL_CASE_MAX)TRIO_PUBLIC_STRING inttrio_string_equal_case_maxTRIO_PROTO((trio_string_t *self, size_t max, trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_EXTRACT)TRIO_PUBLIC_STRING char *trio_string_extractTRIO_PROTO((trio_string_t *self));#endif#if defined(TRIO_FUNC_STRING_FORMAT_DATE_MAX)TRIO_PUBLIC_STRING size_ttrio_string_format_date_maxTRIO_PROTO((trio_string_t *self, size_t max, TRIO_CONST char *format, TRIO_CONST struct tm *datetime));#endif#if defined(TRIO_FUNC_STRING_GET)TRIO_PUBLIC_STRING char *trio_string_getTRIO_PROTO((trio_string_t *self, int offset));#endif#if defined(TRIO_FUNC_STRING_INDEX)TRIO_PUBLIC_STRING char *trio_string_indexTRIO_PROTO((trio_string_t *self, int character));#endif#if defined(TRIO_FUNC_STRING_INDEX_LAST)TRIO_PUBLIC_STRING char *trio_string_index_lastTRIO_PROTO((trio_string_t *self, int character));#endif#if defined(TRIO_FUNC_STRING_LENGTH)TRIO_PUBLIC_STRING inttrio_string_lengthTRIO_PROTO((trio_string_t *self));#endif#if defined(TRIO_FUNC_STRING_LOWER)TRIO_PUBLIC_STRING inttrio_string_lowerTRIO_PROTO((trio_string_t *self));#endif#if defined(TRIO_FUNC_STRING_MATCH)TRIO_PUBLIC_STRING inttrio_string_matchTRIO_PROTO((trio_string_t *self, trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_MATCH_CASE)TRIO_PUBLIC_STRING inttrio_string_match_caseTRIO_PROTO((trio_string_t *self, trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_SIZE)TRIO_PUBLIC_STRING inttrio_string_sizeTRIO_PROTO((trio_string_t *self));#endif#if defined(TRIO_FUNC_STRING_SUBSTRING)TRIO_PUBLIC_STRING char *trio_string_substringTRIO_PROTO((trio_string_t *self, trio_string_t *other));#endif#if defined(TRIO_FUNC_STRING_TERMINATE)TRIO_PUBLIC_STRING voidtrio_string_terminateTRIO_PROTO((trio_string_t *self));#endif#if defined(TRIO_FUNC_STRING_UPPER)TRIO_PUBLIC_STRING inttrio_string_upperTRIO_PROTO((trio_string_t *self));#endif#if defined(TRIO_FUNC_XSTRING_APPEND)TRIO_PUBLIC_STRING inttrio_xstring_appendTRIO_PROTO((trio_string_t *self, TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_APPEND_CHAR)TRIO_PUBLIC_STRING inttrio_xstring_append_charTRIO_PROTO((trio_string_t *self, char character));#endif#if defined(TRIO_FUNC_XSTRING_CONTAINS)TRIO_PUBLIC_STRING inttrio_xstring_containsTRIO_PROTO((trio_string_t *self, TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_COPY)TRIO_PUBLIC_STRING inttrio_xstring_copyTRIO_PROTO((trio_string_t *self, TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_DUPLICATE)TRIO_PUBLIC_STRING trio_string_t *trio_xstring_duplicateTRIO_PROTO((TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_EQUAL)TRIO_PUBLIC_STRING inttrio_xstring_equalTRIO_PROTO((trio_string_t *self, TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_EQUAL_MAX)TRIO_PUBLIC_STRING inttrio_xstring_equal_maxTRIO_PROTO((trio_string_t *self, size_t max, TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_EQUAL_CASE)TRIO_PUBLIC_STRING inttrio_xstring_equal_caseTRIO_PROTO((trio_string_t *self, TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_EQUAL_CASE_MAX)TRIO_PUBLIC_STRING inttrio_xstring_equal_case_maxTRIO_PROTO((trio_string_t *self, size_t max, TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_MATCH)TRIO_PUBLIC_STRING inttrio_xstring_matchTRIO_PROTO((trio_string_t *self, TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_MATCH_CASE)TRIO_PUBLIC_STRING inttrio_xstring_match_caseTRIO_PROTO((trio_string_t *self, TRIO_CONST char *other));#endif#if defined(TRIO_FUNC_XSTRING_SET)TRIO_PUBLIC_STRING voidtrio_xstring_setTRIO_PROTO((trio_string_t *self, char *buffer));#endif#if defined(TRIO_FUNC_XSTRING_SUBSTRING)TRIO_PUBLIC_STRING char *trio_xstring_substringTRIO_PROTO((trio_string_t *self, TRIO_CONST char *other));#endif#ifdef __cplusplus}#endif#endif /* TRIO_TRIOSTR_H */