static void _A_insert_aux1(c_pvector thiz, c_iterator pos, node_t val) { _c_vector_impl * pl = (_c_vector_impl *)thiz->_l; if(pl->_finish != pl->_end_of_storage) { node_t node; *pl->_finish = *(pl->_finish - 1); ++ pl->_finish; node = val; c_copy_backward(pos, _A_get_iterator(pl->_finish - 2), _A_get_iterator(pl->_finish - 1)); ITER_REF_ASSIGN(pos, node); } else { const size_type old_size = c_vector_size(thiz); const size_type len = old_size != 0 ? 2 * old_size : 1; c_iterator new_start = _A_get_iterator(_A_allocate(thiz, len)); c_iterator new_finish = new_start; new_finish = c_copy(_A_get_iterator(pl->_start), pos, new_start); ITER_REF_ASSIGN(new_finish, val); ITER_INC(new_finish); new_finish = c_copy(pos, _A_get_iterator(pl->_finish), new_finish); _A_deallocate(thiz, pl->_start, abs(pl->_end_of_storage - pl->_start)); pl->_start = (pnode_t)new_start._i; pl->_finish = (pnode_t)new_finish._i; pl->_end_of_storage = pl->_start + len; } }
static void vector_equal(c_vector * p) { c_iterator iter; int * old; c_vector vt; __c_vector(&vt, int_comparer); print_vector(&vt); print_vector(p); printf(c_vector_equal(&vt, p) ? "IS equal\n" : "NOT equal\n"); create_with_push_back(&vt); print_vector(&vt); print_vector(p); printf(c_vector_equal(&vt, p) ? "IS equal\n" : "NOT equal\n"); iter = c_vector_begin(&vt); old = (int*)ITER_REF(iter); ITER_REF_ASSIGN(iter, &array[5]); print_vector(&vt); print_vector(p); printf(c_vector_equal(&vt, p) ? "IS equal\n" : "NOT equal\n"); ITER_REF_ASSIGN(iter, old); c_vector_clear(&vt); c_vector_clear(p); print_vector(&vt); print_vector(p); printf(c_vector_equal(&vt, p) ? "IS equal\n" : "NOT equal\n"); __c_rotcev(&vt); }