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

ncd: NCDValue: add NCDValue_ListPrepend()

ambrop7 13 лет назад
Родитель
Сommit
e7ba5f8637
2 измененных файлов с 33 добавлено и 0 удалено
  1. 22 0
      ncd/NCDValue.c
  2. 11 0
      ncd/NCDValue.h

+ 22 - 0
ncd/NCDValue.c

@@ -281,6 +281,28 @@ int NCDValue_ListAppend (NCDValue *o, NCDValue v)
     return 1;
 }
 
+int NCDValue_ListPrepend (NCDValue *o, NCDValue v)
+{
+    value_assert(o);
+    value_assert(&v);
+    ASSERT(o->type == NCDVALUE_LIST)
+    
+    if (o->list_count == SIZE_MAX) {
+        return 0;
+    }
+    
+    NCDListElement *e = malloc(sizeof(*e));
+    if (!e) {
+        return 0;
+    }
+    
+    LinkedList2_Prepend(&o->list, &e->list_node);
+    o->list_count++;
+    e->v = v;
+    
+    return 1;
+}
+
 int NCDValue_ListAppendList (NCDValue *o, NCDValue l)
 {
     value_assert(o);

+ 11 - 0
ncd/NCDValue.h

@@ -219,6 +219,17 @@ void NCDValue_InitList (NCDValue *o);
  */
 int NCDValue_ListAppend (NCDValue *o, NCDValue v) WARN_UNUSED;
 
+/**
+ * Prepends a value to the beginning of a list.
+ * On success, the value that was passed for insertion must be assumed freed;
+ * on failure, it is unaffected.
+ * 
+ * @param o list value
+ * @param v value to prepend
+ * @return 1 on success, 0 on failure
+ */
+int NCDValue_ListPrepend (NCDValue *o, NCDValue v) WARN_UNUSED;
+
 /**
  * Appends values from a list to the end of a list.
  * On success, the list value that was passed with elements for insertion must be