/** * Get the pointer that point to the iterator reference data, but ignore char*. */ const void* _vector_iterator_get_pointer_ignore_cstr(vector_iterator_t it_iter) { assert(_vector_iterator_belong_to_vector(_VECTOR_ITERATOR_CONTAINER(it_iter), it_iter)); assert(!_vector_iterator_equal(it_iter, vector_end(_VECTOR_ITERATOR_CONTAINER(it_iter)))); return _VECTOR_ITERATOR_COREPOS(it_iter); }
void test__vector_iterator_equal__different_iterator_type(void** state) { vector_iterator_t it_first = _create_vector_iterator(); vector_iterator_t it_second = _create_vector_iterator(); it_first._t_iteratortype = _INPUT_ITERATOR; expect_assert_failure(_vector_iterator_equal(it_first, it_second)); }
void test__vector_iterator_equal__different_container_type(void** state) { vector_iterator_t it_first = _create_vector_iterator(); vector_iterator_t it_second = _create_vector_iterator(); it_first._t_containertype = _LIST_CONTAINER; expect_assert_failure(_vector_iterator_equal(it_first, it_second)); }
/** * Get the pointer that point to the iterator reference data. */ const void* _vector_iterator_get_pointer(vector_iterator_t it_iter) { assert(_vector_iterator_belong_to_vector(_VECTOR_ITERATOR_CONTAINER(it_iter), it_iter)); assert(!_vector_iterator_equal(it_iter, vector_end(_VECTOR_ITERATOR_CONTAINER(it_iter)))); /* char* */ if (strncmp(_GET_VECTOR_TYPE_BASENAME(_VECTOR_ITERATOR_CONTAINER(it_iter)), _C_STRING_TYPE, _TYPE_NAME_SIZE) == 0) { return string_c_str((string_t*)_VECTOR_ITERATOR_COREPOS(it_iter)); } else { return _VECTOR_ITERATOR_COREPOS(it_iter); } }
/** * Test two iterator are equal or not. */ bool_t iterator_equal(iterator_t it_first, iterator_t it_second) { assert(_iterator_is_valid(it_first)); assert(_iterator_is_valid(it_second)); assert(_iterator_limit_type(it_first, _INPUT_ITERATOR)); assert(_iterator_limit_type(it_second, _INPUT_ITERATOR)); if (it_first._t_containertype != it_second._t_containertype) { return false; } switch (it_first._t_containertype) { case _VECTOR_CONTAINER: return _vector_iterator_equal(it_first, it_second); break; case _LIST_CONTAINER: return _list_iterator_equal(it_first, it_second); break; case _DEQUE_CONTAINER: return _deque_iterator_equal(it_first, it_second); break; /* case _SLIST_CONTAINER: return _slist_iterator_equal(it_first, it_second); break; */ case _SET_CONTAINER: return _set_iterator_equal(it_first, it_second); break; case _MAP_CONTAINER: return _map_iterator_equal(it_first, it_second); break; case _HASH_SET_CONTAINER: return _hash_set_iterator_equal(it_first, it_second); break; case _HASH_MAP_CONTAINER: return _hash_map_iterator_equal(it_first, it_second); break; case _BASIC_STRING_CONTAINER: return _basic_string_iterator_equal(it_first, it_second); break; default: assert(false); return false; break; } }
/** * Compare two iterators for equality. */ bool_t _basic_string_iterator_equal(basic_string_iterator_t it_first, basic_string_iterator_t it_second) { bool_t b_result; assert(_GET_BASIC_STRING_CONTAINER_TYPE(it_first) == _BASIC_STRING_CONTAINER); assert(_GET_BASIC_STRING_CONTAINER_TYPE(it_second) == _BASIC_STRING_CONTAINER); _GET_VECTOR_CONTAINER_TYPE(it_first) = _VECTOR_CONTAINER; _GET_VECTOR_CONTAINER_TYPE(it_second) = _VECTOR_CONTAINER; b_result = _vector_iterator_equal(it_first, it_second); _GET_BASIC_STRING_CONTAINER_TYPE(it_first) = _BASIC_STRING_CONTAINER; _GET_BASIC_STRING_CONTAINER_TYPE(it_second) = _BASIC_STRING_CONTAINER; return b_result; }
/** * Set iterator reference data. */ void _vector_iterator_set_value(vector_iterator_t it_iter, const void* cpv_value) { bool_t b_result = false; assert(cpv_value != NULL); assert(_vector_iterator_belong_to_vector(_VECTOR_ITERATOR_CONTAINER(it_iter), it_iter)); assert(!_vector_iterator_equal(it_iter, vector_end(_VECTOR_ITERATOR_CONTAINER(it_iter)))); /* char* */ if (strncmp(_GET_VECTOR_TYPE_BASENAME(_VECTOR_ITERATOR_CONTAINER(it_iter)), _C_STRING_TYPE, _TYPE_NAME_SIZE) == 0) { string_assign_cstr((string_t*)_VECTOR_ITERATOR_COREPOS(it_iter), (char*)cpv_value); } else { b_result = _GET_VECTOR_TYPE_SIZE(_VECTOR_ITERATOR_CONTAINER(it_iter)); _GET_VECTOR_TYPE_COPY_FUNCTION(_VECTOR_ITERATOR_CONTAINER(it_iter))(_VECTOR_ITERATOR_COREPOS(it_iter), cpv_value, &b_result); assert(b_result); } }