return count;
}
+/* Returns the first node in R0...R1 that has data TARGET.
+ Returns NULL if no node in R0...R1 equals TARGET. */
+struct llx *
+llx_find (const struct llx *r0, const struct llx *r1, const void *target)
+{
+ const struct llx *x;
+
+ for (x = r0; x != r1; x = llx_next (x))
+ if (llx_data (x) == target)
+ return CONST_CAST (struct llx *, x);
+
+ return NULL;
+}
+
/* Returns the first node in R0...R1 that equals TARGET
according to COMPARE given auxiliary data AUX.
Returns R1 if no node in R0...R1 equals TARGET. */
const struct llx_manager *);
/* Non-mutating algorithms. */
+struct llx *llx_find (const struct llx *r0, const struct llx *r1,
+ const void *target);
struct llx *llx_find_equal (const struct llx *r0, const struct llx *r1,
const void *target,
llx_compare_func *, void *aux);
/* PSPP - a program for statistical analysis.
- Copyright (C) 2006 Free Software Foundation, Inc.
+ Copyright (C) 2006, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
test_examine_equal_range (test_find_equal_helper);
}
+/* Tests llx_find(). */
+static void
+test_find (void)
+{
+ const int max_elems = 8;
+
+ int cnt;
+
+ for (cnt = 0; cnt <= max_elems; cnt++)
+ {
+ struct llx_list list;
+ struct element **elems;
+ struct llx **elemp;
+ int *values;
+
+ int i;
+
+ allocate_ascending (cnt, &list, &elems, &elemp, &values);
+
+ for (i = 0; i < cnt; i++)
+ check (llx_find (llx_head (&list), llx_null (&list), elems[i])
+ == elemp[i]);
+ check (llx_find (llx_head (&list), llx_null (&list), NULL) == NULL);
+
+ free_elements (cnt, &list, elems, elemp, values);
+ }
+}
+
/* Helper function for testing llx_find_if. */
static void
test_find_if_helper (int r0, int r1, int eq_pat, struct llx **elemp)
run_test (test_remove_equal, "remove_equal");
run_test (test_remove_if, "remove_if");
run_test (test_find_equal, "find_equal");
+ run_test (test_find, "find");
run_test (test_find_if, "find_if");
run_test (test_find_adjacent_equal, "find_adjacent_equal");
run_test (test_count_range, "count_range");