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

NCDValue: add NCDValue_ListShift

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

+ 17 - 0
ncd/NCDValue.c

@@ -311,3 +311,20 @@ NCDValue * NCDValue_ListGet (NCDValue *o, size_t pos)
     
     return e;
 }
+
+NCDValue NCDValue_ListShift (NCDValue *o)
+{
+    value_assert(o);
+    ASSERT(o->type == NCDVALUE_LIST)
+    ASSERT(o->list_count > 0)
+    
+    NCDListElement *e = UPPER_OBJECT(LinkedList2_GetFirst(&o->list), NCDListElement, list_node);
+    
+    NCDValue v = e->v;
+    
+    LinkedList2_Remove(&o->list, &e->list_node);
+    o->list_count--;
+    free(e);
+    
+    return v;
+}

+ 1 - 0
ncd/NCDValue.h

@@ -63,5 +63,6 @@ NCDValue * NCDValue_ListNext (NCDValue *o, NCDValue *ev);
 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);
 
 #endif