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

ncd: NCDValue: add NCDValue_MapFindValueByString()

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

+ 18 - 0
ncd/NCDValue.c

@@ -536,6 +536,24 @@ void NCDValue_MapRemove (NCDValue *o, NCDValue *ekey, NCDValue *out_key, NCDValu
     free(e);
 }
 
+NCDValue * NCDValue_MapFindValueByString (NCDValue *o, const char *key_str)
+{
+    value_assert(o);
+    ASSERT(o->type == NCDVALUE_MAP)
+    ASSERT(key_str)
+    
+    NCDValue key;
+    key.type = NCDVALUE_STRING;
+    key.string = (char *)key_str;
+    
+    NCDValue *ekey = NCDValue_MapFindKey(o, &key);
+    if (!ekey) {
+        return NULL;
+    }
+    
+    return NCDValue_MapKeyValue(o, ekey);
+}
+
 int NCDValue_Compare (NCDValue *o, NCDValue *v)
 {
     value_assert(o);

+ 1 - 0
ncd/NCDValue.h

@@ -93,6 +93,7 @@ NCDValue * NCDValue_MapKeyValue (NCDValue *o, NCDValue *ekey);
 NCDValue * NCDValue_MapFindKey (NCDValue *o, NCDValue *key);
 NCDValue * NCDValue_MapInsert (NCDValue *o, NCDValue key, NCDValue val) WARN_UNUSED;
 void NCDValue_MapRemove (NCDValue *o, NCDValue *ekey, NCDValue *out_key, NCDValue *out_val);
+NCDValue * NCDValue_MapFindValueByString (NCDValue *o, const char *key_str);
 
 int NCDValue_Compare (NCDValue *o, NCDValue *v);