changeset 839:2198701308ed

nvl: add nvl_clear to drop all key-value pairs in an nvlist Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Wed, 12 May 2021 09:57:51 -0400
parents 8ccd0c9ddaaa
children 3d96091853b6
files include/jeffpc/nvl.h mapfile-vers nvl.c val_impl.h val_nvl.c
diffstat 5 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/include/jeffpc/nvl.h	Wed May 12 09:56:49 2021 -0400
+++ b/include/jeffpc/nvl.h	Wed May 12 09:57:51 2021 -0400
@@ -85,6 +85,7 @@
  * Misc functions
  */
 
+extern void nvl_clear(struct nvlist *nvl);
 extern int nvl_merge(struct nvlist *dest, struct nvlist *src);
 
 static inline void nvl_dump_file(FILE *out, struct nvlist *nvl)
--- a/mapfile-vers	Wed May 12 09:56:49 2021 -0400
+++ b/mapfile-vers	Wed May 12 09:57:51 2021 -0400
@@ -168,6 +168,7 @@
 		mem_recallocarray;
 
 		# nvlist
+		nvl_clear;
 		nvl_convert;
 		nvl_exists;
 		nvl_exists_type;
--- a/nvl.c	Wed May 12 09:56:49 2021 -0400
+++ b/nvl.c	Wed May 12 09:57:51 2021 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2020 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
+ * Copyright (c) 2017-2021 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -26,6 +26,11 @@
 
 #include "val_impl.h"
 
+void nvl_clear(struct nvlist *nvl)
+{
+	__val_clear_nvl(nvl_cast_to_val(nvl));
+}
+
 int nvl_merge(struct nvlist *dest, struct nvlist *src)
 {
 	const struct nvpair *spair;
--- a/val_impl.h	Wed May 12 09:56:49 2021 -0400
+++ b/val_impl.h	Wed May 12 09:57:51 2021 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2018 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
+ * Copyright (c) 2017-2021 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -28,6 +28,7 @@
 
 extern struct val *__val_alloc(enum val_type type);
 extern void __val_free_nvl(struct val *val);
+extern void __val_clear_nvl(struct val *val);
 
 extern struct nvpair *__nvpair_alloc(struct str *name);
 extern void __nvpair_free(struct nvpair *pair);
--- a/val_nvl.c	Wed May 12 09:56:49 2021 -0400
+++ b/val_nvl.c	Wed May 12 09:57:51 2021 -0400
@@ -110,3 +110,11 @@
 {
 	__val_empty_nvl(val, true);
 }
+
+void __val_clear_nvl(struct val *val)
+{
+	__val_empty_nvl(val, false);
+
+	rb_create(&val->_set_nvl.values, val_nvl_cmp, sizeof(struct nvpair),
+		   offsetof(struct nvpair, node));
+}