/** * Set iterator reference data. */ void _deque_iterator_set_value(deque_iterator_t it_iter, const void* cpv_value) { bool_t b_result = false; assert(cpv_value != NULL); assert(_deque_iterator_belong_to_deque(_DEQUE_ITERATOR_CONTAINER(it_iter), it_iter)); assert(!iterator_equal(it_iter, deque_end(_DEQUE_ITERATOR_CONTAINER(it_iter)))); /* char* */ if(strncmp(_GET_DEQUE_TYPE_BASENAME(_DEQUE_ITERATOR_CONTAINER(it_iter)), _C_STRING_TYPE, _TYPE_NAME_SIZE) == 0) { string_assign_cstr((string_t*)_deque_iterator_get_pointer_auxiliary(it_iter), (char*)cpv_value); } else { b_result = _GET_DEQUE_TYPE_SIZE(_DEQUE_ITERATOR_CONTAINER(it_iter)); _GET_DEQUE_TYPE_COPY_FUNCTION(_DEQUE_ITERATOR_CONTAINER(it_iter))( _deque_iterator_get_pointer_auxiliary(it_iter), cpv_value, &b_result); assert(b_result); } }
/** * Move element range to deque begin. */ deque_iterator_t _deque_move_elem_to_begin( deque_t* pdeq_deque, deque_iterator_t it_begin, deque_iterator_t it_end, size_t t_step) { assert(pdeq_deque != NULL); assert(_deque_is_inited(pdeq_deque)); assert(_deque_iterator_belong_to_deque(pdeq_deque, it_begin)); assert(_deque_iterator_belong_to_deque(pdeq_deque, it_end)); assert(iterator_equal(it_begin, it_end) || _deque_iterator_before(it_begin, it_end)); if(!iterator_equal(it_begin, it_end) && t_step != 0) { deque_iterator_t it_targetbegin; deque_iterator_t it_targetend; bool_t b_result = false; it_targetbegin = it_begin; it_targetend = it_end; it_targetbegin = iterator_prev_n(it_targetbegin, t_step); it_targetend = iterator_prev_n(it_targetend, t_step); assert(_deque_iterator_before(it_targetbegin, it_targetend)); for(; iterator_less(it_targetbegin, it_targetend) && iterator_less(it_begin, it_end); it_targetbegin = iterator_next(it_targetbegin), it_begin = iterator_next(it_begin)) { b_result = _GET_DEQUE_TYPE_SIZE(pdeq_deque); _GET_DEQUE_TYPE_COPY_FUNCTION(pdeq_deque)( _deque_iterator_get_pointer_auxiliary(it_targetbegin), _deque_iterator_get_pointer_auxiliary(it_begin), &b_result); assert(b_result); } assert(iterator_equal(it_targetbegin, it_targetend) && iterator_equal(it_begin, it_end)); return it_targetend; } else { return iterator_prev_n(it_end, t_step); } }
/** * Move element range to deque end. */ deque_iterator_t _deque_move_elem_to_end( deque_t* pdeq_deque, deque_iterator_t it_begin, deque_iterator_t it_end, size_t t_step) { assert(pdeq_deque != NULL); assert(_deque_is_inited(pdeq_deque)); assert(_deque_iterator_belong_to_deque(pdeq_deque, it_begin)); assert(_deque_iterator_belong_to_deque(pdeq_deque, it_end)); assert(iterator_equal(it_begin, it_end) || _deque_iterator_before(it_begin, it_end)); /* if it_begin != it_end then do move */ if(!iterator_equal(it_begin, it_end) && t_step != 0) { /* the target range of move */ deque_iterator_t it_targetbegin; deque_iterator_t it_targetend; bool_t b_result = false; it_targetbegin = it_begin; it_targetend = it_end; it_targetbegin = iterator_next_n(it_targetbegin, t_step); it_targetend = iterator_next_n(it_targetend, t_step); assert(_deque_iterator_before(it_targetbegin, it_targetend)); while(!iterator_equal(it_targetbegin, it_targetend) && !iterator_equal(it_begin, it_end)) { it_targetend = iterator_prev(it_targetend); it_end = iterator_prev(it_end); b_result = _GET_DEQUE_TYPE_SIZE(pdeq_deque); _GET_DEQUE_TYPE_COPY_FUNCTION(pdeq_deque)( _deque_iterator_get_pointer_auxiliary(it_targetend), _deque_iterator_get_pointer_auxiliary(it_end), &b_result); assert(b_result); } assert(iterator_equal(it_begin, it_end) && iterator_equal(it_targetbegin, it_targetend)); } return it_begin; }