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

ncd: NCDValue: add NCDValue_ListRemove()

ambrop7 14 лет назад
Родитель
Сommit
96638a599e
2 измененных файлов с 18 добавлено и 0 удалено
  1. 17 0
      ncd/NCDValue.c
  2. 1 0
      ncd/NCDValue.h

+ 17 - 0
ncd/NCDValue.c

@@ -329,6 +329,23 @@ NCDValue NCDValue_ListShift (NCDValue *o)
     return v;
 }
 
+NCDValue NCDValue_ListRemove (NCDValue *o, NCDValue *ev)
+{
+    value_assert(o);
+    ASSERT(o->type == NCDVALUE_LIST)
+    ASSERT(o->list_count > 0)
+    
+    NCDListElement *e = UPPER_OBJECT(ev, NCDListElement, v);
+    
+    NCDValue v = e->v;
+    
+    LinkedList2_Remove(&o->list, &e->list_node);
+    o->list_count--;
+    free(e);
+    
+    return v;
+}
+
 int NCDValue_Compare (NCDValue *o, NCDValue *v)
 {
     value_assert(o);

+ 1 - 0
ncd/NCDValue.h

@@ -64,6 +64,7 @@ int NCDValue_ListRead (NCDValue *o, int num, ...) WARN_UNUSED;
 int NCDValue_ListReadHead (NCDValue *o, int num, ...) WARN_UNUSED;
 NCDValue * NCDValue_ListGet (NCDValue *o, size_t pos);
 NCDValue NCDValue_ListShift (NCDValue *o);
+NCDValue NCDValue_ListRemove (NCDValue *o, NCDValue *ev);
 
 int NCDValue_Compare (NCDValue *o, NCDValue *v);