1 /*************************************************************************
5 * Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
11 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
12 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
13 * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
14 * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
16 ************************************************************************/
18 #ifndef TRIO_TRIOSTR_H
19 #define TRIO_TRIOSTR_H
34 #if !defined(TRIO_STRING_PUBLIC)
35 # if !defined(TRIO_PUBLIC)
38 # define TRIO_STRING_PUBLIC TRIO_PUBLIC
41 /*************************************************************************
45 TRIO_STRING_PUBLIC
int trio_copy_max
TRIO_PROTO((char *target
, size_t max
, const char *source
));
46 TRIO_STRING_PUBLIC
char *trio_create
TRIO_PROTO((size_t size
));
47 TRIO_STRING_PUBLIC
void trio_destroy
TRIO_PROTO((char *string
));
48 TRIO_STRING_PUBLIC
char *trio_duplicate
TRIO_PROTO((const char *source
));
49 TRIO_STRING_PUBLIC
int trio_equal
TRIO_PROTO((const char *first
, const char *second
));
50 TRIO_STRING_PUBLIC
int trio_equal_case
TRIO_PROTO((const char *first
, const char *second
));
51 TRIO_STRING_PUBLIC
int trio_equal_locale
TRIO_PROTO((const char *first
, const char *second
));
52 TRIO_STRING_PUBLIC
int trio_equal_max
TRIO_PROTO((const char *first
, size_t max
, const char *second
));
53 TRIO_STRING_PUBLIC TRIO_CONST
char *trio_error
TRIO_PROTO((int));
54 TRIO_STRING_PUBLIC
size_t trio_length
TRIO_PROTO((const char *string
));
55 TRIO_STRING_PUBLIC
double trio_to_double
TRIO_PROTO((const char *source
, char **endp
));
56 TRIO_STRING_PUBLIC
long trio_to_long
TRIO_PROTO((const char *source
, char **endp
, int base
));
57 TRIO_STRING_PUBLIC trio_long_double_t trio_to_long_double
TRIO_PROTO((const char *source
, char **endp
));
58 TRIO_STRING_PUBLIC
int trio_to_upper
TRIO_PROTO((int source
));
60 #if !defined(TRIO_MINIMAL)
62 TRIO_STRING_PUBLIC
int trio_append
TRIO_PROTO((char *target
, const char *source
));
63 TRIO_STRING_PUBLIC
int trio_append_max
TRIO_PROTO((char *target
, size_t max
, const char *source
));
64 TRIO_STRING_PUBLIC
int trio_contains
TRIO_PROTO((const char *string
, const char *substring
));
65 TRIO_STRING_PUBLIC
int trio_copy
TRIO_PROTO((char *target
, const char *source
));
66 TRIO_STRING_PUBLIC
char *trio_duplicate_max
TRIO_PROTO((const char *source
, size_t max
));
67 TRIO_STRING_PUBLIC
int trio_equal_case_max
TRIO_PROTO((const char *first
, size_t max
, const char *second
));
68 #if !defined(_WIN32_WCE)
69 TRIO_STRING_PUBLIC
size_t trio_format_date_max
TRIO_PROTO((char *target
, size_t max
, const char *format
, const struct tm
*datetime
));
71 TRIO_STRING_PUBLIC
unsigned long trio_hash
TRIO_PROTO((const char *string
, int type
));
72 TRIO_STRING_PUBLIC
char *trio_index
TRIO_PROTO((const char *string
, int character
));
73 TRIO_STRING_PUBLIC
char *trio_index_last
TRIO_PROTO((const char *string
, int character
));
74 TRIO_STRING_PUBLIC
int trio_lower
TRIO_PROTO((char *target
));
75 TRIO_STRING_PUBLIC
int trio_match
TRIO_PROTO((const char *string
, const char *pattern
));
76 TRIO_STRING_PUBLIC
int trio_match_case
TRIO_PROTO((const char *string
, const char *pattern
));
77 TRIO_STRING_PUBLIC
size_t trio_span_function
TRIO_PROTO((char *target
, const char *source
, int (*Function
) TRIO_PROTO((int))));
78 TRIO_STRING_PUBLIC
char *trio_substring
TRIO_PROTO((const char *string
, const char *substring
));
79 TRIO_STRING_PUBLIC
char *trio_substring_max
TRIO_PROTO((const char *string
, size_t max
, const char *substring
));
80 TRIO_STRING_PUBLIC
float trio_to_float
TRIO_PROTO((const char *source
, char **endp
));
81 TRIO_STRING_PUBLIC
int trio_to_lower
TRIO_PROTO((int source
));
82 TRIO_STRING_PUBLIC
unsigned long trio_to_unsigned_long
TRIO_PROTO((const char *source
, char **endp
, int base
));
83 TRIO_STRING_PUBLIC
char *trio_tokenize
TRIO_PROTO((char *string
, const char *delimiters
));
84 TRIO_STRING_PUBLIC
int trio_upper
TRIO_PROTO((char *target
));
86 #endif /* !defined(TRIO_MINIMAL) */
88 /*************************************************************************
89 * Dynamic string functions
93 * Opaque type for dynamic strings
96 typedef struct _trio_string_t trio_string_t
;
98 TRIO_STRING_PUBLIC
void trio_string_destroy
TRIO_PROTO((trio_string_t
*self
));
99 TRIO_STRING_PUBLIC
char *trio_string_extract
TRIO_PROTO((trio_string_t
*self
));
100 TRIO_STRING_PUBLIC
int trio_string_size
TRIO_PROTO((trio_string_t
*self
));
101 TRIO_STRING_PUBLIC
void trio_string_terminate
TRIO_PROTO((trio_string_t
*self
));
102 TRIO_STRING_PUBLIC
int trio_xstring_append_char
TRIO_PROTO((trio_string_t
*self
, char character
));
103 TRIO_STRING_PUBLIC trio_string_t
*trio_xstring_duplicate
TRIO_PROTO((const char *other
));
105 #if !defined(TRIO_MINIMAL)
107 TRIO_STRING_PUBLIC trio_string_t
*trio_string_create
TRIO_PROTO((int initial_size
));
108 TRIO_STRING_PUBLIC
char *trio_string_get
TRIO_PROTO((trio_string_t
*self
, int offset
));
109 TRIO_STRING_PUBLIC
void trio_xstring_set
TRIO_PROTO((trio_string_t
*self
, char *buffer
));
111 TRIO_STRING_PUBLIC
int trio_string_append
TRIO_PROTO((trio_string_t
*self
, trio_string_t
*other
));
112 TRIO_STRING_PUBLIC
int trio_string_contains
TRIO_PROTO((trio_string_t
*self
, trio_string_t
*other
));
113 TRIO_STRING_PUBLIC
int trio_string_copy
TRIO_PROTO((trio_string_t
*self
, trio_string_t
*other
));
114 TRIO_STRING_PUBLIC trio_string_t
*trio_string_duplicate
TRIO_PROTO((trio_string_t
*other
));
115 TRIO_STRING_PUBLIC
int trio_string_equal
TRIO_PROTO((trio_string_t
*self
, trio_string_t
*other
));
116 TRIO_STRING_PUBLIC
int trio_string_equal_max
TRIO_PROTO((trio_string_t
*self
, size_t max
, trio_string_t
*second
));
117 TRIO_STRING_PUBLIC
int trio_string_equal_case
TRIO_PROTO((trio_string_t
*self
, trio_string_t
*other
));
118 TRIO_STRING_PUBLIC
int trio_string_equal_case_max
TRIO_PROTO((trio_string_t
*self
, size_t max
, trio_string_t
*other
));
119 #if !defined(_WIN32_WCE)
120 TRIO_STRING_PUBLIC
size_t trio_string_format_date_max
TRIO_PROTO((trio_string_t
*self
, size_t max
, const char *format
, const struct tm
*datetime
));
122 TRIO_STRING_PUBLIC
char *trio_string_index
TRIO_PROTO((trio_string_t
*self
, int character
));
123 TRIO_STRING_PUBLIC
char *trio_string_index_last
TRIO_PROTO((trio_string_t
*self
, int character
));
124 TRIO_STRING_PUBLIC
int trio_string_length
TRIO_PROTO((trio_string_t
*self
));
125 TRIO_STRING_PUBLIC
int trio_string_lower
TRIO_PROTO((trio_string_t
*self
));
126 TRIO_STRING_PUBLIC
int trio_string_match
TRIO_PROTO((trio_string_t
*self
, trio_string_t
*other
));
127 TRIO_STRING_PUBLIC
int trio_string_match_case
TRIO_PROTO((trio_string_t
*self
, trio_string_t
*other
));
128 TRIO_STRING_PUBLIC
char *trio_string_substring
TRIO_PROTO((trio_string_t
*self
, trio_string_t
*other
));
129 TRIO_STRING_PUBLIC
int trio_string_upper
TRIO_PROTO((trio_string_t
*self
));
131 TRIO_STRING_PUBLIC
int trio_xstring_append
TRIO_PROTO((trio_string_t
*self
, const char *other
));
132 TRIO_STRING_PUBLIC
int trio_xstring_contains
TRIO_PROTO((trio_string_t
*self
, const char *other
));
133 TRIO_STRING_PUBLIC
int trio_xstring_copy
TRIO_PROTO((trio_string_t
*self
, const char *other
));
134 TRIO_STRING_PUBLIC
int trio_xstring_equal
TRIO_PROTO((trio_string_t
*self
, const char *other
));
135 TRIO_STRING_PUBLIC
int trio_xstring_equal_max
TRIO_PROTO((trio_string_t
*self
, size_t max
, const char *other
));
136 TRIO_STRING_PUBLIC
int trio_xstring_equal_case
TRIO_PROTO((trio_string_t
*self
, const char *other
));
137 TRIO_STRING_PUBLIC
int trio_xstring_equal_case_max
TRIO_PROTO((trio_string_t
*self
, size_t max
, const char *other
));
138 TRIO_STRING_PUBLIC
int trio_xstring_match
TRIO_PROTO((trio_string_t
*self
, const char *other
));
139 TRIO_STRING_PUBLIC
int trio_xstring_match_case
TRIO_PROTO((trio_string_t
*self
, const char *other
));
140 TRIO_STRING_PUBLIC
char *trio_xstring_substring
TRIO_PROTO((trio_string_t
*self
, const char *other
));
142 #endif /* !defined(TRIO_MINIMAL) */
144 #endif /* TRIO_TRIOSTR_H */