Просмотр исходного кода

ncd: NCDValue: use LinkedList1 not LinkedList2 (which is slower)

ambrop7 13 лет назад
Родитель
Сommit
07ecc91235
2 измененных файлов с 29 добавлено и 39 удалено
  1. 26 36
      ncd/NCDValue.c
  2. 3 3
      ncd/NCDValue.h

+ 26 - 36
ncd/NCDValue.c

@@ -70,10 +70,7 @@ int NCDValue_InitCopy (NCDValue *o, NCDValue *v)
         case NCDVALUE_LIST: {
             NCDValue_InitList(o);
             
-            LinkedList2Iterator it;
-            LinkedList2Iterator_InitForward(&it, &v->list);
-            LinkedList2Node *n;
-            while (n = LinkedList2Iterator_Next(&it)) {
+            for (LinkedList1Node *n = LinkedList1_GetFirst(&v->list); n; n = LinkedList1Node_Next(n)) {
                 NCDListElement *e = UPPER_OBJECT(n, NCDListElement, list_node);
                 
                 NCDValue tmp;
@@ -90,7 +87,6 @@ int NCDValue_InitCopy (NCDValue *o, NCDValue *v)
             return 1;
             
         fail:
-            LinkedList2Iterator_Free(&it);
             NCDValue_Free(o);
             return 0;
         } break;
@@ -144,12 +140,12 @@ void NCDValue_Free (NCDValue *o)
         } break;
         
         case NCDVALUE_LIST: {
-            LinkedList2Node *n;
-            while (n = LinkedList2_GetFirst(&o->list)) {
+            LinkedList1Node *n;
+            while (n = LinkedList1_GetFirst(&o->list)) {
                 NCDListElement *e = UPPER_OBJECT(n, NCDListElement, list_node);
                 
                 NCDValue_Free(&e->v);
-                LinkedList2_Remove(&o->list, &e->list_node);
+                LinkedList1_Remove(&o->list, &e->list_node);
                 free(e);
             }
         } break;
@@ -262,7 +258,7 @@ int NCDValue_IsList (NCDValue *o)
 
 void NCDValue_InitList (NCDValue *o)
 {
-    LinkedList2_Init(&o->list);
+    LinkedList1_Init(&o->list);
     o->list_count = 0;
     
     o->type = NCDVALUE_LIST;
@@ -283,7 +279,7 @@ int NCDValue_ListAppend (NCDValue *o, NCDValue v)
         return 0;
     }
     
-    LinkedList2_Append(&o->list, &e->list_node);
+    LinkedList1_Append(&o->list, &e->list_node);
     o->list_count++;
     e->v = v;
     
@@ -305,7 +301,7 @@ int NCDValue_ListPrepend (NCDValue *o, NCDValue v)
         return 0;
     }
     
-    LinkedList2_Prepend(&o->list, &e->list_node);
+    LinkedList1_Prepend(&o->list, &e->list_node);
     o->list_count++;
     e->v = v;
     
@@ -323,11 +319,11 @@ int NCDValue_ListAppendList (NCDValue *o, NCDValue l)
         return 0;
     }
     
-    LinkedList2Node *n;
-    while (n = LinkedList2_GetFirst(&l.list)) {
+    LinkedList1Node *n;
+    while (n = LinkedList1_GetFirst(&l.list)) {
         NCDListElement *e = UPPER_OBJECT(n, NCDListElement, list_node);
-        LinkedList2_Remove(&l.list, &e->list_node);
-        LinkedList2_Append(&o->list, &e->list_node);
+        LinkedList1_Remove(&l.list, &e->list_node);
+        LinkedList1_Append(&o->list, &e->list_node);
     }
     
     o->list_count += l.list_count;
@@ -348,11 +344,13 @@ NCDValue * NCDValue_ListFirst (NCDValue *o)
     value_assert(o);
     ASSERT(o->type == NCDVALUE_LIST)
     
-    if (LinkedList2_IsEmpty(&o->list)) {
+    LinkedList1Node *ln = LinkedList1_GetFirst(&o->list);
+    
+    if (!ln) {
         return NULL;
     }
     
-    NCDListElement *e = UPPER_OBJECT(LinkedList2_GetFirst(&o->list), NCDListElement, list_node);
+    NCDListElement *e = UPPER_OBJECT(ln, NCDListElement, list_node);
     
     return &e->v;
 }
@@ -362,21 +360,16 @@ NCDValue * NCDValue_ListNext (NCDValue *o, NCDValue *ev)
     value_assert(o);
     ASSERT(o->type == NCDVALUE_LIST)
     
-    NCDListElement *e = UPPER_OBJECT(ev, NCDListElement, v);
-    
-    LinkedList2Iterator it;
-    LinkedList2Iterator_Init(&it, &o->list, 1, &e->list_node);
-    LinkedList2Iterator_Next(&it);
-    LinkedList2Node *nen = LinkedList2Iterator_Next(&it);
-    LinkedList2Iterator_Free(&it);
+    NCDListElement *cur_e = UPPER_OBJECT(ev, NCDListElement, v);
+    LinkedList1Node *ln = LinkedList1Node_Next(&cur_e->list_node);
     
-    if (!nen) {
+    if (!ln) {
         return NULL;
     }
     
-    NCDListElement *ne = UPPER_OBJECT(nen, NCDListElement, list_node);
+    NCDListElement *e = UPPER_OBJECT(ln, NCDListElement, list_node);
     
-    return &ne->v;
+    return &e->v;
 }
 
 int NCDValue_ListRead (NCDValue *o, int num, ...)
@@ -392,10 +385,7 @@ int NCDValue_ListRead (NCDValue *o, int num, ...)
     va_list ap;
     va_start(ap, num);
     
-    LinkedList2Iterator it;
-    LinkedList2Iterator_InitForward(&it, &o->list);
-    LinkedList2Node *n;
-    while (n = LinkedList2Iterator_Next(&it)) {
+    for (LinkedList1Node *n = LinkedList1_GetFirst(&o->list); n; n = LinkedList1Node_Next(n)) {
         NCDListElement *e = UPPER_OBJECT(n, NCDListElement, list_node);
         
         NCDValue **dest = va_arg(ap, NCDValue **);
@@ -420,7 +410,7 @@ int NCDValue_ListReadHead (NCDValue *o, int num, ...)
     va_list ap;
     va_start(ap, num);
     
-    LinkedList2Node *n = LinkedList2_GetFirst(&o->list);
+    LinkedList1Node *n = LinkedList1_GetFirst(&o->list);
     while (num > 0) {
         ASSERT(n)
         NCDListElement *e = UPPER_OBJECT(n, NCDListElement, list_node);
@@ -428,7 +418,7 @@ int NCDValue_ListReadHead (NCDValue *o, int num, ...)
         NCDValue **dest = va_arg(ap, NCDValue **);
         *dest = &e->v;
         
-        n = LinkedList2Node_Next(n);
+        n = LinkedList1Node_Next(n);
         num--;
     }
     
@@ -462,11 +452,11 @@ NCDValue NCDValue_ListShift (NCDValue *o)
     ASSERT(o->type == NCDVALUE_LIST)
     ASSERT(o->list_count > 0)
     
-    NCDListElement *e = UPPER_OBJECT(LinkedList2_GetFirst(&o->list), NCDListElement, list_node);
+    NCDListElement *e = UPPER_OBJECT(LinkedList1_GetFirst(&o->list), NCDListElement, list_node);
     
     NCDValue v = e->v;
     
-    LinkedList2_Remove(&o->list, &e->list_node);
+    LinkedList1_Remove(&o->list, &e->list_node);
     o->list_count--;
     free(e);
     
@@ -483,7 +473,7 @@ NCDValue NCDValue_ListRemove (NCDValue *o, NCDValue *ev)
     
     NCDValue v = e->v;
     
-    LinkedList2_Remove(&o->list, &e->list_node);
+    LinkedList1_Remove(&o->list, &e->list_node);
     o->list_count--;
     free(e);
     

+ 3 - 3
ncd/NCDValue.h

@@ -34,7 +34,7 @@
 #include <stdint.h>
 
 #include <misc/debug.h>
-#include <structure/LinkedList2.h>
+#include <structure/LinkedList1.h>
 #include <structure/BAVL.h>
 
 #define NCDVALUE_STRING 1
@@ -66,7 +66,7 @@ typedef struct {
             size_t string_len;
         };
         struct {
-            LinkedList2 list;
+            LinkedList1 list;
             size_t list_count;
         };
         struct {
@@ -80,7 +80,7 @@ typedef struct {
 } NCDValue;
 
 typedef struct {
-    LinkedList2Node list_node;
+    LinkedList1Node list_node;
     NCDValue v;
 } NCDListElement;