summaryrefslogtreecommitdiffstats
path: root/contrib/libucl/ucl_util.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-02-14 11:42:36 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-02-14 14:45:25 +0000
commit9f0a4220decbb0adaf8aa63d506cf01c55e3204c (patch)
treebc1f044bb9b48872137b31b383ff7d89ab9d06a6 /contrib/libucl/ucl_util.c
parenta755e38112262b462ee2c95eedb71299c688ee5e (diff)
downloadrspamd-9f0a4220decbb0adaf8aa63d506cf01c55e3204c.tar.gz
rspamd-9f0a4220decbb0adaf8aa63d506cf01c55e3204c.zip
[Feature] Allow to reserve elements in libucl
Diffstat (limited to 'contrib/libucl/ucl_util.c')
-rw-r--r--contrib/libucl/ucl_util.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/contrib/libucl/ucl_util.c b/contrib/libucl/ucl_util.c
index 85b700a4d..8f5231e2f 100644
--- a/contrib/libucl/ucl_util.c
+++ b/contrib/libucl/ucl_util.c
@@ -2755,6 +2755,21 @@ ucl_object_new_full (ucl_type_t type, unsigned priority)
return new;
}
+void ucl_object_reserve (ucl_object_t *obj, size_t reserved)
+{
+ if (obj->type == UCL_ARRAY) {
+ UCL_ARRAY_GET (vec, obj);
+
+ if (vec->m < reserved) {
+ /* Preallocate some space for arrays */
+ kv_resize (ucl_object_t *, *vec, reserved);
+ }
+ }
+ else if (obj->type == UCL_OBJECT) {
+ ucl_hash_reserve (obj->value.ov, reserved);
+ }
+}
+
ucl_object_t*
ucl_object_new_userdata (ucl_userdata_dtor dtor,
ucl_userdata_emitter emitter,