+2007-03-15 Bruno Haible <bruno@clisp.org>
+
+ * lib/gl_list.h (gl_listelement_dispose_fn): New type.
+ (gl_list_create_empty, gl_list_create): Add dispose_fn argument.
+ (struct gl_list_implementation): Add dispose_fn argument to the
+ 'create_empty', 'create' methods.
+ (struct gl_list_impl_base): Add field 'dispose_fn'.
+ * lib/gl_list.c (gl_list_create_empty, gl_list_create): Add dispose_fn
+ argument.
+ * lib/gl_array_list.c (gl_array_create_empty, gl_array_create): Add
+ dispose_fn argument.
+ (gl_array_remove_node, gl_array_remove_at, gl_array_list_free): Call
+ dispose_fn on the dropped values.
+ * lib/gl_carray_list.c (gl_carray_create_empty, gl_carray_create): Add
+ dispose_fn argument.
+ (gl_carray_remove_at, gl_carray_list_free): Call dispose_fn on the
+ dropped values.
+ * lib/gl_anyavltree_list2.h (gl_tree_create): Add dispose_fn argument.
+ (gl_tree_remove_node): Call dispose_fn on the dropped value.
+ * lib/gl_anyrbtree_list2.h (gl_tree_create): Add dispose_fn argument.
+ (gl_tree_remove_node): Call dispose_fn on the dropped value.
+ * lib/gl_anytree_list2.h (gl_tree_create_empty): Add dispose_fn
+ argument.
+ (gl_tree_list_free): Call dispose_fn on the dropped values.
+ * lib/gl_anytreehash_list2.h (gl_tree_list_free): Call dispose_fn on
+ the dropped values.
+ * lib/gl_anylinked_list2.h (gl_linked_create_empty, gl_linked_create):
+ Add dispose_fn argument.
+ (gl_linked_remove_node, gl_linked_remove_at, gl_linked_list_free):
+ Call dispose_fn on the dropped values.
+ * lib/gl_sublist.c (gl_sublist_create_empty, gl_sublist_create_fill):
+ Add dispose_fn argument.
+ (gl_sublist_create): Initialize the 'dispose_fn' field.
+ * lib/clean-temp.c (create_temp_dir, register_fd): Update.
+ * tests/test-array_list.c (main): Update.
+ * tests/test-carray_list.c (main): Update.
+ * tests/test-avltree_list.c (main): Update.
+ * tests/test-rbtree_list.c (main): Update.
+ * tests/test-avltreehash_list.c (main): Update.
+ * tests/test-rbtreehash_list.c (main): Update.
+ * tests/test-linked_list.c (main): Update.
+ * tests/test-linkedhash_list.c (main): Update.
+ * tests/test-array_oset.c (main): Update.
+
2007-03-15 Bruno Haible <bruno@clisp.org>
* lib/gl_oset.h (gl_setelement_dispose_fn): New type.
Date Modules Changes
+2007-03-15 list The functions gl_list_create_empty and
+ gl_list_create now take an extra fourth argument.
+ You can pass NULL.
+
2007-03-15 oset The function gl_oset_create_empty now takes a
array-oset third argument. You can pass NULL.
avltree-oset
tmpdir->dirname = NULL;
tmpdir->cleanup_verbose = cleanup_verbose;
tmpdir->subdirs = gl_list_create_empty (GL_LINKEDHASH_LIST,
- string_equals, string_hash, false);
+ string_equals, string_hash, NULL,
+ false);
tmpdir->files = gl_list_create_empty (GL_LINKEDHASH_LIST,
- string_equals, string_hash, false);
+ string_equals, string_hash, NULL,
+ false);
/* Create the temporary directory. */
xtemplate = (char *) xallocsa (PATH_MAX);
register_fd (int fd)
{
if (descriptors == NULL)
- descriptors = gl_list_create_empty (GL_LINKEDHASH_LIST, NULL, NULL, false);
+ descriptors = gl_list_create_empty (GL_LINKEDHASH_LIST, NULL, NULL, NULL,
+ false);
gl_list_add_first (descriptors, (void *) (uintptr_t) fd);
}
/* Sequential list data type implemented by a binary tree.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
gl_tree_create (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates,
size_t count, const void **contents)
{
list->base.vtable = implementation;
list->base.equals_fn = equals_fn;
list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
list->base.allow_duplicates = allow_duplicates;
#if WITH_HASHTABLE
{
rebalance (list, child, -1, subst_parent != node ? subst_parent : subst);
}
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (node->value);
free (node);
return true;
}
/* Sequential list data type implemented by a linked list.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
gl_linked_create_empty (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates)
{
struct gl_list_impl *list = XMALLOC (struct gl_list_impl);
list->base.vtable = implementation;
list->base.equals_fn = equals_fn;
list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
list->base.allow_duplicates = allow_duplicates;
#if WITH_HASHTABLE
list->table_size = 11;
gl_linked_create (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates,
size_t count, const void **contents)
{
list->base.vtable = implementation;
list->base.equals_fn = equals_fn;
list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
list->base.allow_duplicates = allow_duplicates;
#if WITH_HASHTABLE
{
next->prev = prev;
list->count--;
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (node->value);
free (node);
return true;
}
#endif
list->count--;
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (removed_node->value);
free (removed_node);
return true;
}
static void
gl_linked_list_free (gl_list_t list)
{
+ gl_listelement_dispose_fn dispose = list->base.dispose_fn;
gl_list_node_t node;
for (node = list->root.next; node != &list->root; )
{
gl_list_node_t next = node->next;
+ if (dispose != NULL)
+ dispose (node->value);
free (node);
node = next;
}
/* Sequential list data type implemented by a binary tree.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
gl_tree_create (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates,
size_t count, const void **contents)
{
list->base.vtable = implementation;
list->base.equals_fn = equals_fn;
list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
list->base.allow_duplicates = allow_duplicates;
#if WITH_HASHTABLE
{
}
}
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (node->value);
free (node);
return true;
}
/* Sequential list data type implemented by a binary tree.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
gl_tree_create_empty (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates)
{
struct gl_list_impl *list = XMALLOC (struct gl_list_impl);
list->base.vtable = implementation;
list->base.equals_fn = equals_fn;
list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
list->base.allow_duplicates = allow_duplicates;
#if WITH_HASHTABLE
list->table_size = 11;
if (!stack_ptr->rightp)
break;
/* Free the current node. */
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (node->value);
free (node);
}
/* Descend on right branch. */
/* Sequential list data type implemented by a hash table with a binary tree.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
if (!stack_ptr->rightp)
break;
/* Free the current node. */
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (node->value);
free (node);
}
/* Descend on right branch. */
/* Sequential list data type implemented by an array.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
gl_array_create_empty (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates)
{
struct gl_list_impl *list = XMALLOC (struct gl_list_impl);
list->base.vtable = implementation;
list->base.equals_fn = equals_fn;
list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
list->base.allow_duplicates = allow_duplicates;
list->elements = NULL;
list->count = 0;
gl_array_create (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates,
size_t count, const void **contents)
{
list->base.vtable = implementation;
list->base.equals_fn = equals_fn;
list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
list->base.allow_duplicates = allow_duplicates;
if (count > 0)
{
abort ();
position = index;
elements = list->elements;
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (elements[position]);
for (i = position + 1; i < count; i++)
elements[i - 1] = elements[i];
list->count = count - 1;
/* Invalid argument. */
abort ();
elements = list->elements;
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (elements[position]);
for (i = position + 1; i < count; i++)
elements[i - 1] = elements[i];
list->count = count - 1;
gl_array_list_free (gl_list_t list)
{
if (list->elements != NULL)
- free (list->elements);
+ {
+ if (list->base.dispose_fn != NULL)
+ {
+ size_t count = list->count;
+
+ if (count > 0)
+ {
+ gl_listelement_dispose_fn dispose = list->base.dispose_fn;
+ const void **elements = list->elements;
+
+ do
+ dispose (*elements++);
+ while (--count > 0);
+ }
+ }
+ free (list->elements);
+ }
free (list);
}
/* Sequential list data type implemented by a circular array.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
static gl_list_t
gl_carray_create_empty (gl_list_implementation_t implementation,
- gl_listelement_equals_fn equals_fn,
- gl_listelement_hashcode_fn hashcode_fn,
- bool allow_duplicates)
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates)
{
struct gl_list_impl *list = XMALLOC (struct gl_list_impl);
list->base.vtable = implementation;
list->base.equals_fn = equals_fn;
list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
list->base.allow_duplicates = allow_duplicates;
list->elements = NULL;
list->offset = 0;
static gl_list_t
gl_carray_create (gl_list_implementation_t implementation,
- gl_listelement_equals_fn equals_fn,
- gl_listelement_hashcode_fn hashcode_fn,
- bool allow_duplicates,
- size_t count, const void **contents)
+ gl_listelement_equals_fn equals_fn,
+ gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
+ bool allow_duplicates,
+ size_t count, const void **contents)
{
struct gl_list_impl *list = XMALLOC (struct gl_list_impl);
list->base.vtable = implementation;
list->base.equals_fn = equals_fn;
list->base.hashcode_fn = hashcode_fn;
+ list->base.dispose_fn = dispose_fn;
list->base.allow_duplicates = allow_duplicates;
if (count > 0)
{
/* Here we must have list->offset > 0, hence list->allocated > 0. */
size_t i1 = list->allocated - 1;
i2 -= list->allocated;
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (elements[i2]);
for (i = i2; i > 0; i--)
elements[i] = elements[i - 1];
elements[0] = elements[i1];
}
else
{
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (elements[i2]);
for (i = i2; i > i0; i--)
elements[i] = elements[i - 1];
}
{
i1 -= list->allocated;
i3 -= list->allocated;
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (elements[i1]);
for (i = i1; i < i3; i++)
elements[i] = elements[i + 1];
}
/* Here we must have list->offset > 0, hence list->allocated > 0. */
size_t i2 = list->allocated - 1;
i3 -= list->allocated;
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (elements[i1]);
for (i = i1; i < i2; i++)
elements[i] = elements[i + 1];
elements[i2] = elements[0];
}
else
{
+ if (list->base.dispose_fn != NULL)
+ list->base.dispose_fn (elements[i1]);
for (i = i1; i < i3; i++)
elements[i] = elements[i + 1];
}
gl_carray_list_free (gl_list_t list)
{
if (list->elements != NULL)
- free (list->elements);
+ {
+ if (list->base.dispose_fn != NULL)
+ {
+ size_t count = list->count;
+
+ if (count > 0)
+ {
+ gl_listelement_dispose_fn dispose = list->base.dispose_fn;
+ const void **elements = list->elements;
+ size_t i1 = list->offset;
+ size_t i3 = list->offset + count - 1;
+
+ if (i3 >= list->allocated)
+ {
+ /* Here we must have list->offset > 0, hence
+ list->allocated > 0. */
+ size_t i2 = list->allocated - 1;
+ size_t i;
+
+ i3 -= list->allocated;
+ for (i = i1; i <= i2; i++)
+ dispose (elements[i]);
+ for (i = 0; i <= i3; i++)
+ dispose (elements[i]);
+ }
+ else
+ {
+ size_t i;
+
+ for (i = i1; i <= i3; i++)
+ dispose (elements[i]);
+ }
+ }
+ }
+ free (list->elements);
+ }
free (list);
}
/* Abstract sequential list data type.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
gl_list_create_empty (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates)
{
return implementation->create_empty (implementation, equals_fn, hashcode_fn,
- allow_duplicates);
+ dispose_fn, allow_duplicates);
}
gl_list_t
gl_list_create (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates,
size_t count, const void **contents)
{
return implementation->create (implementation, equals_fn, hashcode_fn,
- allow_duplicates, count, contents);
+ dispose_fn, allow_duplicates, count, contents);
}
size_t
/* Abstract sequential list data type.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
NULL denotes a function that depends only on the pointer itself. */
typedef size_t (*gl_listelement_hashcode_fn) (const void *elt);
+/* Type of function used to dispose an element once it's removed from a list.
+ NULL denotes a no-op. */
+typedef void (*gl_listelement_dispose_fn) (const void *elt);
+
struct gl_list_impl;
/* Type representing an entire list. */
typedef struct gl_list_impl * gl_list_t;
GL_RBTREEHASH_LIST.
EQUALS_FN is an element comparison function or NULL.
HASHCODE_FN is an element hash code function or NULL.
+ DISPOSE_FN is an element disposal function or NULL.
ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in
the list. The implementation may verify this at runtime. */
extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates);
/* Create a list with given contents.
GL_RBTREEHASH_LIST.
EQUALS_FN is an element comparison function or NULL.
HASHCODE_FN is an element hash code function or NULL.
+ DISPOSE_FN is an element disposal function or NULL.
ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in
the list. The implementation may verify this at runtime.
COUNT is the number of initial elements.
extern gl_list_t gl_list_create (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates,
size_t count, const void **contents);
gl_list_t (*create_empty) (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates);
gl_list_t (*create) (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates,
size_t count, const void **contents);
size_t (*size) (gl_list_t list);
const struct gl_list_implementation *vtable;
gl_listelement_equals_fn equals_fn;
gl_listelement_hashcode_fn hashcode_fn;
+ gl_listelement_dispose_fn dispose_fn;
bool allow_duplicates;
};
gl_list_create_empty (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates)
{
return implementation->create_empty (implementation, equals_fn, hashcode_fn,
- allow_duplicates);
+ dispose_fn, allow_duplicates);
}
# define gl_list_create gl_list_create_inline
gl_list_create (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates,
size_t count, const void **contents)
{
return implementation->create (implementation, equals_fn, hashcode_fn,
- allow_duplicates, count, contents);
+ dispose_fn, allow_duplicates, count, contents);
}
# define gl_list_size gl_list_size_inline
/* Sequential list data type backed by another list.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2006.
This program is free software; you can redistribute it and/or modify
gl_sublist_create_empty (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates)
{
/* Shouldn't be called. */
gl_sublist_create_fill (gl_list_implementation_t implementation,
gl_listelement_equals_fn equals_fn,
gl_listelement_hashcode_fn hashcode_fn,
+ gl_listelement_dispose_fn dispose_fn,
bool allow_duplicates,
size_t count, const void **contents)
{
list->base.vtable = &gl_sublist_list_implementation;
list->base.equals_fn = whole_list->base.equals_fn; /* actually unused */
list->base.hashcode_fn = whole_list->base.hashcode_fn; /* actually unused */
+ list->base.dispose_fn = whole_list->base.dispose_fn; /* actually unused */
list->base.allow_duplicates = whole_list->base.allow_duplicates; /* unused */
if (whole_list->base.vtable == &gl_sublist_list_implementation)
{
contents[i] = RANDOM_OBJECT ();
/* Create list1. */
- list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, true,
+ list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, NULL, true,
initial_size, contents);
/* Create list2. */
- list2 = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, true);
+ list2 = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, true);
for (i = 0; i < initial_size; i++)
gl_list_add_last (list2, contents[i]);
set1 = gl_oset_create_empty (GL_ARRAY_OSET, (gl_setelement_compar_fn) strcmp, NULL);
/* Create set2. */
- set2 = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, false);
+ set2 = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, false);
check_all (set1, set2);
contents[i] = RANDOM_OBJECT ();
/* Create list1. */
- list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, true,
+ list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, NULL, true,
initial_size, contents);
/* Create list2. */
- list2 = gl_list_create_empty (GL_AVLTREE_LIST, NULL, NULL, true);
+ list2 = gl_list_create_empty (GL_AVLTREE_LIST, NULL, NULL, NULL, true);
for (i = 0; i < initial_size; i++)
gl_list_add_last (list2, contents[i]);
/* Create list3. */
- list3 = gl_list_create (GL_AVLTREE_LIST, NULL, NULL, true,
+ list3 = gl_list_create (GL_AVLTREE_LIST, NULL, NULL, NULL, true,
initial_size, contents);
check_all (list1, list2, list3);
/* Create list1. */
list1 = gl_list_create (GL_ARRAY_LIST,
- string_equals, string_hash, true,
+ string_equals, string_hash, NULL, true,
initial_size, contents);
/* Create list2. */
list2 = gl_list_create_empty (GL_AVLTREEHASH_LIST,
- string_equals, string_hash, true);
+ string_equals, string_hash, NULL, true);
for (i = 0; i < initial_size; i++)
gl_list_add_last (list2, contents[i]);
/* Create list3. */
list3 = gl_list_create (GL_AVLTREEHASH_LIST,
- string_equals, string_hash, true,
+ string_equals, string_hash, NULL, true,
initial_size, contents);
check_all (list1, list2, list3);
contents[i] = RANDOM_OBJECT ();
/* Create list1. */
- list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, true,
+ list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, NULL, true,
initial_size, contents);
/* Create list2. */
- list2 = gl_list_create_empty (GL_CARRAY_LIST, NULL, NULL, true);
+ list2 = gl_list_create_empty (GL_CARRAY_LIST, NULL, NULL, NULL, true);
for (i = 0; i < initial_size; i++)
gl_list_add_last (list2, contents[i]);
/* Create list3. */
- list3 = gl_list_create (GL_CARRAY_LIST, NULL, NULL, true,
+ list3 = gl_list_create (GL_CARRAY_LIST, NULL, NULL, NULL, true,
initial_size, contents);
check_all (list1, list2, list3);
contents[i] = RANDOM_OBJECT ();
/* Create list1. */
- list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, true,
+ list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, NULL, true,
initial_size, contents);
/* Create list2. */
- list2 = gl_list_create_empty (GL_LINKED_LIST, NULL, NULL, true);
+ list2 = gl_list_create_empty (GL_LINKED_LIST, NULL, NULL, NULL, true);
for (i = 0; i < initial_size; i++)
gl_list_add_last (list2, contents[i]);
/* Create list3. */
- list3 = gl_list_create (GL_LINKED_LIST, NULL, NULL, true,
+ list3 = gl_list_create (GL_LINKED_LIST, NULL, NULL, NULL, true,
initial_size, contents);
check_all (list1, list2, list3);
/* Create list1. */
list1 = gl_list_create (GL_ARRAY_LIST,
- string_equals, string_hash, true,
+ string_equals, string_hash, NULL, true,
initial_size, contents);
/* Create list2. */
list2 = gl_list_create_empty (GL_LINKEDHASH_LIST,
- string_equals, string_hash, true);
+ string_equals, string_hash, NULL, true);
for (i = 0; i < initial_size; i++)
gl_list_add_last (list2, contents[i]);
/* Create list3. */
list3 = gl_list_create (GL_LINKEDHASH_LIST,
- string_equals, string_hash, true,
+ string_equals, string_hash, NULL, true,
initial_size, contents);
check_all (list1, list2, list3);
contents[i] = RANDOM_OBJECT ();
/* Create list1. */
- list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, true,
+ list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, NULL, true,
initial_size, contents);
/* Create list2. */
- list2 = gl_list_create_empty (GL_RBTREE_LIST, NULL, NULL, true);
+ list2 = gl_list_create_empty (GL_RBTREE_LIST, NULL, NULL, NULL, true);
for (i = 0; i < initial_size; i++)
gl_list_add_last (list2, contents[i]);
/* Create list3. */
- list3 = gl_list_create (GL_RBTREE_LIST, NULL, NULL, true,
+ list3 = gl_list_create (GL_RBTREE_LIST, NULL, NULL, NULL, true,
initial_size, contents);
check_all (list1, list2, list3);
/* Create list1. */
list1 = gl_list_create (GL_ARRAY_LIST,
- string_equals, string_hash, true,
+ string_equals, string_hash, NULL, true,
initial_size, contents);
/* Create list2. */
list2 = gl_list_create_empty (GL_RBTREEHASH_LIST,
- string_equals, string_hash, true);
+ string_equals, string_hash, NULL, true);
for (i = 0; i < initial_size; i++)
gl_list_add_last (list2, contents[i]);
/* Create list3. */
list3 = gl_list_create (GL_RBTREEHASH_LIST,
- string_equals, string_hash, true,
+ string_equals, string_hash, NULL, true,
initial_size, contents);
check_all (list1, list2, list3);