@@ -77,21 +77,44 @@ bool_t _basic_string_iterator_equal(basic_string_iterator_t it_first, basic_stri
77
77
*/
78
78
void _basic_string_iterator_get_value (basic_string_iterator_t it_iter , void * pv_value )
79
79
{
80
- bool_t b_result = false;
80
+ bool_t b_result = false;
81
+ basic_string_t * pt_basic_string = NULL ;
82
+ _byte_t * pby_terminator = NULL ;
83
+ size_t t_typesize = 0 ;
81
84
82
85
assert (pv_value != NULL );
83
86
assert (_basic_string_iterator_belong_to_basic_string (_BASIC_STRING_ITERATOR_CONTAINER (it_iter ), it_iter ));
84
87
assert (!_basic_string_iterator_equal (it_iter , basic_string_end (_BASIC_STRING_ITERATOR_CONTAINER (it_iter ))));
85
88
89
+ pt_basic_string = _BASIC_STRING_ITERATOR_CONTAINER (it_iter );
90
+ t_typesize = _GET_BASIC_STRING_TYPE_SIZE (pt_basic_string );
91
+ pby_terminator = pt_basic_string -> _pby_string + basic_string_size (pt_basic_string ) * t_typesize ;
92
+
86
93
/* char* */
87
- if (strncmp (_GET_BASIC_STRING_TYPE_BASENAME (_BASIC_STRING_ITERATOR_CONTAINER (it_iter )),
88
- _C_STRING_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
89
- * (char * * )pv_value = (char * )string_c_str ((string_t * )_BASIC_STRING_ITERATOR_COREPOS (it_iter ));
90
- } else {
91
- b_result = _GET_BASIC_STRING_TYPE_SIZE (_BASIC_STRING_ITERATOR_CONTAINER (it_iter ));
92
- _GET_BASIC_STRING_TYPE_COPY_FUNCTION (_BASIC_STRING_ITERATOR_CONTAINER (it_iter ))(
94
+ if (strncmp (_GET_BASIC_STRING_TYPE_BASENAME (pt_basic_string ), _C_STRING_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
95
+ if (memcmp (pby_terminator , _BASIC_STRING_ITERATOR_COREPOS (it_iter ), t_typesize ) != 0 ) {
96
+ * (char * * )pv_value = (char * )string_c_str ((string_t * )_BASIC_STRING_ITERATOR_COREPOS (it_iter ));
97
+ } else {
98
+ * (char * * )pv_value = NULL ;
99
+ }
100
+ } else if (_GET_BASIC_STRING_TYPE_STYLE (pt_basic_string ) == _TYPE_C_BUILTIN ) {
101
+ b_result = _GET_BASIC_STRING_TYPE_SIZE (pt_basic_string );
102
+ _GET_BASIC_STRING_TYPE_COPY_FUNCTION (pt_basic_string )(
93
103
pv_value , _BASIC_STRING_ITERATOR_COREPOS (it_iter ), & b_result );
94
104
assert (b_result );
105
+ } else {
106
+ if (memcmp (pby_terminator , _BASIC_STRING_ITERATOR_COREPOS (it_iter ), t_typesize ) != 0 ) {
107
+ b_result = _GET_BASIC_STRING_TYPE_SIZE (pt_basic_string );
108
+ _GET_BASIC_STRING_TYPE_COPY_FUNCTION (pt_basic_string )(
109
+ pv_value , _BASIC_STRING_ITERATOR_COREPOS (it_iter ), & b_result );
110
+ assert (b_result );
111
+ } else {
112
+ b_result = _GET_BASIC_STRING_TYPE_SIZE (pt_basic_string );
113
+ _GET_BASIC_STRING_TYPE_DESTROY_FUNCTION (pt_basic_string )(pv_value , & b_result );
114
+ assert (b_result );
115
+
116
+ memcpy (pv_value , pby_terminator , t_typesize );
117
+ }
95
118
}
96
119
}
97
120
@@ -100,21 +123,16 @@ void _basic_string_iterator_get_value(basic_string_iterator_t it_iter, void* pv_
100
123
*/
101
124
void _basic_string_iterator_set_value (basic_string_iterator_t it_iter , const void * cpv_value )
102
125
{
103
- bool_t b_result = false;
104
-
105
- assert (cpv_value != NULL );
106
126
assert (_basic_string_iterator_belong_to_basic_string (_BASIC_STRING_ITERATOR_CONTAINER (it_iter ), it_iter ));
107
127
assert (!_basic_string_iterator_equal (it_iter , basic_string_end (_BASIC_STRING_ITERATOR_CONTAINER (it_iter ))));
108
128
109
- /* char* */
110
- if ( strncmp (_GET_BASIC_STRING_TYPE_BASENAME ( _BASIC_STRING_ITERATOR_CONTAINER ( it_iter )),
111
- _C_STRING_TYPE , _TYPE_NAME_SIZE ) == 0 ) {
112
- string_assign_cstr (( string_t * ) _BASIC_STRING_ITERATOR_COREPOS (it_iter ), ( char * ) cpv_value );
129
+ if ( _iterator_get_typestyle ( it_iter ) == _TYPE_C_BUILTIN &&
130
+ strncmp (_iterator_get_typebasename ( it_iter ), _C_STRING_TYPE , _TYPE_NAME_SIZE ) != 0 ) {
131
+ _basic_string_copy_subcstr_auxiliary (
132
+ _BASIC_STRING_ITERATOR_CONTAINER ( it_iter ), _BASIC_STRING_ITERATOR_COREPOS (it_iter ), cpv_value , 1 );
113
133
} else {
114
- b_result = _GET_BASIC_STRING_TYPE_SIZE (_BASIC_STRING_ITERATOR_CONTAINER (it_iter ));
115
- _GET_BASIC_STRING_TYPE_COPY_FUNCTION (_BASIC_STRING_ITERATOR_CONTAINER (it_iter ))(
116
- _BASIC_STRING_ITERATOR_COREPOS (it_iter ), cpv_value , & b_result );
117
- assert (b_result );
134
+ _basic_string_copy_subcstr_auxiliary (
135
+ _BASIC_STRING_ITERATOR_CONTAINER (it_iter ), _BASIC_STRING_ITERATOR_COREPOS (it_iter ), & cpv_value , 1 );
118
136
}
119
137
}
120
138
0 commit comments