You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Philip Martin <ph...@wandisco.com> on 2011/10/10 12:48:58 UTC
Re: svn commit: r1180154 - in /subversion/trunk/subversion: include/svn_sorts.h libsvn_client/merge.c libsvn_subr/mergeinfo.c libsvn_subr/sorts.c tests/libsvn_subr/mergeinfo-test.c
pburba@apache.org writes:
> Author: pburba
> Date: Fri Oct 7 19:00:40 2011
> New Revision: 1180154
> + if (elements_to_delete)
> + for (i = starting_index; i < (elements_to_delete + starting_index); i++)
> + svn_sort__array_delete(rangelist, starting_index);
> +}
Given the pop optimisation it would be more efficient to delete the
elements in reverse order. Passing the number of elements to be deleted
to svn_sort__array_delete would be better.
> +void
> +svn_sort__array_delete(apr_array_header_t *arr,
> + int delete_index)
> +{
> + /* Do we have a valid index? */
> + if (delete_index >= 0 && delete_index < arr->nelts)
> + {
> + if (delete_index == (arr->nelts - 1))
> + {
> + /* Deleting the last or only element in an array is easy. */
> + apr_array_pop(arr);
> + }
> + else
> + {
> + memmove(arr->elts + arr->elt_size * delete_index,
> + arr->elts + arr->elt_size * (delete_index + 1),
> + arr->elt_size * (arr->nelts - 1 - delete_index));
> + --(arr->nelts);
> + }
> + }
> +}
--
Philip
Re: svn commit: r1180154 - in /subversion/trunk/subversion:
include/svn_sorts.h libsvn_client/merge.c libsvn_subr/mergeinfo.c
libsvn_subr/sorts.c tests/libsvn_subr/mergeinfo-test.c
Posted by Paul Burba <pt...@gmail.com>.
On Mon, Oct 10, 2011 at 3:48 AM, Philip Martin
<ph...@wandisco.com> wrote:
> pburba@apache.org writes:
>
>> Author: pburba
>> Date: Fri Oct 7 19:00:40 2011
>> New Revision: 1180154
>
>> + if (elements_to_delete)
>> + for (i = starting_index; i < (elements_to_delete + starting_index); i++)
>> + svn_sort__array_delete(rangelist, starting_index);
>> +}
>
> Given the pop optimisation it would be more efficient to delete the
> elements in reverse order. Passing the number of elements to be deleted
> to svn_sort__array_delete would be better.
Did the latter in r118109.0
Paul
>> +void
>> +svn_sort__array_delete(apr_array_header_t *arr,
>> + int delete_index)
>> +{
>> + /* Do we have a valid index? */
>> + if (delete_index >= 0 && delete_index < arr->nelts)
>> + {
>> + if (delete_index == (arr->nelts - 1))
>> + {
>> + /* Deleting the last or only element in an array is easy. */
>> + apr_array_pop(arr);
>> + }
>> + else
>> + {
>> + memmove(arr->elts + arr->elt_size * delete_index,
>> + arr->elts + arr->elt_size * (delete_index + 1),
>> + arr->elt_size * (arr->nelts - 1 - delete_index));
>> + --(arr->nelts);
>> + }
>> + }
>> +}
>
> --
> Philip
>