svec: Avoid calling svec_sort() when it is not necessary.
authorBen Pfaff <blp@nicira.com>
Wed, 15 Apr 2009 22:04:10 +0000 (15:04 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 15 Apr 2009 22:04:10 +0000 (15:04 -0700)
When we delete an item from a sorted array we just have to move the rest
of the items down to keep it sorted; we don't have to actually re-sort
the whole thing.

lib/svec.c

index e635d499e098bd3e8ac05684c6b548b235761078..4fc46af26061e3d9500feb9532eb3bdd38d28603 100644 (file)
@@ -90,9 +90,9 @@ svec_del(struct svec *svec, const char *name)
     offset = svec_find(svec, name);
     if (offset != SIZE_MAX) {
         free(svec->names[offset]);
-        svec->names[offset] = svec->names[svec->n-1];
+        memmove(&svec->names[offset], &svec->names[offset + 1],
+                sizeof *svec->names * (svec->n - offset - 1));
         svec->n--;
-        svec_sort(svec);
     }
 }