You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2015/07/14 16:05:55 UTC

[5/6] lucy-clownfish git commit: Minor optimizations in Vector.c

Minor optimizations in Vector.c


Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/cd346073
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/cd346073
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/cd346073

Branch: refs/heads/master
Commit: cd3460733a65570c89d3821a80331514431d9602
Parents: 5b9e316
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue Jul 14 13:13:31 2015 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Tue Jul 14 13:54:13 2015 +0200

----------------------------------------------------------------------
 runtime/core/Clownfish/Vector.c | 36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/cd346073/runtime/core/Clownfish/Vector.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Vector.c b/runtime/core/Clownfish/Vector.c
index 4cdfa96..7f87fa1 100644
--- a/runtime/core/Clownfish/Vector.c
+++ b/runtime/core/Clownfish/Vector.c
@@ -109,16 +109,20 @@ Vec_Pop_IMP(Vector *self) {
 
 void
 Vec_Insert_IMP(Vector *self, size_t tick, Obj *elem) {
-    if (tick >= self->size) {
-        Vec_Store(self, tick, elem);
-        return;
+    if (tick < self->size) {
+        SI_add_grow_and_oversize(self, self->size, 1);
+        memmove(self->elems + tick + 1, self->elems + tick,
+                (self->size - tick) * sizeof(Obj*));
+        self->size++;
+    }
+    else {
+        SI_add_grow_and_oversize(self, tick, 1);
+        memset(self->elems + self->size, 0,
+               (tick - self->size) * sizeof(Obj*));
+        self->size = tick + 1;
     }
 
-    SI_add_grow_and_oversize(self, self->size, 1);
-    memmove(self->elems + tick + 1, self->elems + tick,
-            (self->size - tick) * sizeof(Obj*));
     self->elems[tick] = elem;
-    self->size++;
 }
 
 void
@@ -149,11 +153,11 @@ Vec_Fetch_IMP(Vector *self, size_t num) {
 
 void
 Vec_Store_IMP(Vector *self, size_t tick, Obj *elem) {
-    SI_add_grow_and_oversize(self, tick, 1);
     if (tick < self->size) {
         DECREF(self->elems[tick]);
     }
     else {
+        SI_add_grow_and_oversize(self, tick, 1);
         memset(self->elems + self->size, 0,
                (tick - self->size) * sizeof(Obj*));
         self->size = tick + 1;
@@ -202,10 +206,10 @@ Vec_Clear_IMP(Vector *self) {
 void
 Vec_Resize_IMP(Vector *self, size_t size) {
     if (size < self->size) {
-        Vec_Excise(self, size, self->size - size);
+        Vec_Excise_IMP(self, size, self->size - size);
     }
     else if (size > self->size) {
-        Vec_Grow(self, size);
+        Vec_Grow_IMP(self, size);
         memset(self->elems + self->size, 0,
                (size - self->size) * sizeof(Obj*));
     }
@@ -255,8 +259,16 @@ Vec_Equals_IMP(Vector *self, Obj *other) {
         for (size_t i = 0, max = self->size; i < max; i++) {
             Obj *val       = elems[i];
             Obj *other_val = twin_elems[i];
-            if ((val && !other_val) || (other_val && !val)) { return false; }
-            if (val && !Obj_Equals(val, other_val))         { return false; }
+            if (val) {
+                if (!other_val || !Obj_Equals(val, other_val)) {
+                    return false;
+                }
+            }
+            else {
+                if (other_val) {
+                    return false;
+                }
+            }
         }
     }
     return true;