/**
 * Set value that pointed by iterator.
 */
void iterator_set_value(iterator_t it_iter, const void* cpv_value)
{
    assert(cpv_value != NULL);
    assert(_iterator_is_valid(it_iter));
    assert(_iterator_limit_type(it_iter, _OUTPUT_ITERATOR));
 
    switch (it_iter._t_containertype) {
        case _VECTOR_CONTAINER:
            _vector_iterator_set_value(it_iter, cpv_value);
            break;
        case _LIST_CONTAINER:
            _list_iterator_set_value(it_iter, cpv_value);
            break;
        case _DEQUE_CONTAINER:
            _deque_iterator_set_value(it_iter, cpv_value);
            break;
						/*  
        case _SLIST_CONTAINER:
            _slist_iterator_set_value(it_iter, cpv_value);
            break;
        */
				case _BASIC_STRING_CONTAINER:
            _basic_string_iterator_set_value(it_iter, cpv_value);
            break;
        default:
            assert(false);
            break;
    }
}
/**
 * Set iterator reference data.
 */
void _basic_string_iterator_set_value(basic_string_iterator_t it_iter, const void* cpv_value)
{
    assert(_GET_BASIC_STRING_CONTAINER_TYPE(it_iter) == _BASIC_STRING_CONTAINER);

    _GET_VECTOR_CONTAINER_TYPE(it_iter) = _VECTOR_CONTAINER;

    _vector_iterator_set_value(it_iter, cpv_value);

    _GET_BASIC_STRING_CONTAINER_TYPE(it_iter) = _BASIC_STRING_CONTAINER;
}