UniMRCP  1.3.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
apt_string.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008-2014 Arsen Chaloyan
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  * $Id: apt_string.h 2136 2014-07-04 06:33:36Z achaloyan@gmail.com $
17  */
18 
19 #ifndef APT_STRING_H
20 #define APT_STRING_H
21 
22 /**
23  * @file apt_string.h
24  * @brief String Representation
25  */
26 
27 #include "apt.h"
28 
30 
31 /** Empty string */
32 #define APT_EMPTY_STRING ""
33 
34 /** String declaration */
35 typedef struct apt_str_t apt_str_t;
36 
37 /** String representation */
38 struct apt_str_t {
39  /** String buffer (might be not NULL terminated) */
40  char *buf;
41  /** Length of the string (not counting terminating NULL character if exists) */
42  apr_size_t length;
43 };
44 
45 /** Reset string. */
46 static APR_INLINE void apt_string_reset(apt_str_t *str)
47 {
48  str->buf = NULL;
49  str->length = 0;
50 }
51 
52 /** Get string buffer. */
53 static APR_INLINE const char* apt_string_buffer_get(const apt_str_t *str)
54 {
55  if(str->buf) {
56  return str->buf;
57  }
58  return APT_EMPTY_STRING;
59 }
60 
61 /** Get string length. */
62 static APR_INLINE apr_size_t apt_string_length_get(const apt_str_t *str)
63 {
64  return str->length;
65 }
66 
67 /** Check whether string is empty. */
68 static APR_INLINE apr_size_t apt_string_is_empty(const apt_str_t *str)
69 {
70  return str->length ? FALSE : TRUE;
71 }
72 
73 /**
74  * Set NULL terminated string.
75  * @param str the destination string
76  * @param src the NULL terminated string to set
77  */
78 static APR_INLINE void apt_string_set(apt_str_t *str, const char *src)
79 {
80  str->buf = (char*)src;
81  str->length = src ? strlen(src) : 0;
82 }
83 
84 /**
85  * Assign (copy) NULL terminated string.
86  * @param str the destination string
87  * @param src the NULL terminated string to copy
88  * @param pool the pool to allocate memory from
89  */
90 static APR_INLINE void apt_string_assign(apt_str_t *str, const char *src, apr_pool_t *pool)
91 {
92  str->buf = NULL;
93  str->length = src ? strlen(src) : 0;
94  if(str->length) {
95  str->buf = apr_pstrmemdup(pool,src,str->length);
96  }
97 }
98 
99 /**
100  * Assign (copy) n characters from the src string.
101  * @param str the destination string
102  * @param src the NULL terminated string to copy
103  * @param pool the pool to allocate memory from
104  */
105 static APR_INLINE void apt_string_assign_n(apt_str_t *str, const char *src, apr_size_t length, apr_pool_t *pool)
106 {
107  str->buf = NULL;
108  str->length = length;
109  if(str->length) {
110  str->buf = apr_pstrmemdup(pool,src,str->length);
111  }
112 }
113 
114 /**
115  * Copy string.
116  * @param dest_str the destination string
117  * @param src_str the source string
118  * @param pool the pool to allocate memory from
119  */
120 static APR_INLINE void apt_string_copy(apt_str_t *str, const apt_str_t *src_str, apr_pool_t *pool)
121 {
122  str->buf = NULL;
123  str->length = src_str->length;
124  if(str->length) {
125  str->buf = apr_pstrmemdup(pool,src_str->buf,src_str->length);
126  }
127 }
128 
129 /**
130  * Compare two strings (case insensitive).
131  * @param str1 the string to compare
132  * @param str2 the string to compare
133  * @return TRUE if equal, FALSE otherwise
134  */
135 static APR_INLINE apt_bool_t apt_string_compare(const apt_str_t *str1, const apt_str_t *str2)
136 {
137  if(str1->length != str2->length || !str1->length) {
138  return FALSE;
139  }
140  return (strncasecmp(str1->buf,str2->buf,str1->length) == 0) ? TRUE : FALSE;
141 }
142 
143 /**
144  * Represent string as iovec.
145  * @param str the string to represent
146  * @param vec the iovec to set
147  */
148 static APR_INLINE void apt_string_to_iovec(const apt_str_t *str, struct iovec *vec)
149 {
150  vec->iov_base = str->buf;
151  vec->iov_len = str->length;
152 }
153 
155 
156 #endif /* APT_STRING_H */