00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <string.h>
00025 #include "cr-string.h"
00026
00027
00028
00029
00030
00031
00032 CRString *
00033 cr_string_new (void)
00034 {
00035 CRString *result = NULL ;
00036
00037 result = g_try_malloc (sizeof (CRString)) ;
00038 if (!result) {
00039 cr_utils_trace_info ("Out of memory") ;
00040 return NULL ;
00041 }
00042 memset (result, 0, sizeof (CRString)) ;
00043 result->stryng = g_string_new (NULL) ;
00044 return result ;
00045 }
00046
00047
00048
00049
00050
00051
00052
00053 CRString *
00054 cr_string_new_from_string (const gchar * a_string)
00055 {
00056 CRString *result = NULL ;
00057
00058 result = cr_string_new () ;
00059 if (!result) {
00060 cr_utils_trace_info ("Out of memory") ;
00061 return NULL ;
00062 }
00063 if (a_string)
00064 g_string_append (result->stryng, a_string) ;
00065 return result ;
00066 }
00067
00068
00069
00070
00071
00072
00073
00074 CRString *
00075 cr_string_new_from_gstring (GString const *a_string)
00076 {
00077 CRString *result = NULL ;
00078
00079 result = cr_string_new () ;
00080 if (!result) {
00081 cr_utils_trace_info ("Out of memory") ;
00082 return NULL ;
00083 }
00084 if (a_string) {
00085 result->stryng = g_string_new_len
00086 (a_string->str, a_string->len) ;
00087 } else {
00088 result->stryng = g_string_new (NULL) ;
00089 }
00090 return result ;
00091 }
00092
00093 CRString *
00094 cr_string_dup (CRString const *a_this)
00095 {
00096 CRString *result = NULL ;
00097 g_return_val_if_fail (a_this, NULL) ;
00098
00099 result = cr_string_new_from_gstring (a_this->stryng) ;
00100 if (!result) {
00101 cr_utils_trace_info ("Out of memory") ;
00102 return NULL ;
00103 }
00104 cr_parsing_location_copy (&result->location,
00105 &a_this->location) ;
00106 return result ;
00107 }
00108
00109 gchar *
00110 cr_string_dup2 (CRString const *a_this)
00111 {
00112 gchar *result = NULL ;
00113
00114 g_return_val_if_fail (a_this, NULL) ;
00115
00116 if (a_this
00117 && a_this->stryng
00118 && a_this->stryng->str) {
00119 result = g_strndup (a_this->stryng->str,
00120 a_this->stryng->len) ;
00121 }
00122 return result ;
00123 }
00124
00125
00126
00127
00128
00129
00130 const gchar *
00131 cr_string_peek_raw_str (CRString const *a_this)
00132 {
00133 g_return_val_if_fail (a_this, NULL) ;
00134
00135 if (a_this->stryng && a_this->stryng->str)
00136 return a_this->stryng->str ;
00137 return NULL ;
00138 }
00139
00140
00141
00142
00143
00144
00145
00146
00147 gint
00148 cr_string_peek_raw_str_len (CRString const *a_this)
00149 {
00150 g_return_val_if_fail (a_this && a_this->stryng,
00151 -1) ;
00152 return a_this->stryng->len ;
00153 }
00154
00155
00156
00157
00158 void
00159 cr_string_destroy (CRString *a_this)
00160 {
00161 g_return_if_fail (a_this) ;
00162
00163 if (a_this->stryng) {
00164 g_string_free (a_this->stryng, TRUE) ;
00165 a_this->stryng = NULL ;
00166 }
00167 g_free (a_this) ;
00168 }