rewrite send to kdc to be more agressive, try kdcs in paralell and easier to configure behavior
This commit is contained in:
@@ -255,8 +255,12 @@ void
|
||||
heim_array_iterate_f(heim_array_t array, void *ctx, heim_array_iterator_f_t fn)
|
||||
{
|
||||
size_t n;
|
||||
for (n = 0; n < array->len; n++)
|
||||
fn(array->val[n], ctx);
|
||||
int stop = 0;
|
||||
for (n = 0; n < array->len; n++) {
|
||||
fn(array->val[n], ctx, &stop);
|
||||
if (stop)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __BLOCKS__
|
||||
@@ -268,11 +272,15 @@ heim_array_iterate_f(heim_array_t array, void *ctx, heim_array_iterator_f_t fn)
|
||||
*/
|
||||
|
||||
void
|
||||
heim_array_iterate(heim_array_t array, void (^fn)(heim_object_t))
|
||||
heim_array_iterate(heim_array_t array, void (^fn)(heim_object_t, int *))
|
||||
{
|
||||
size_t n;
|
||||
for (n = 0; n < array->len; n++)
|
||||
fn(array->val[n]);
|
||||
int stop = 0;
|
||||
for (n = 0; n < array->len; n++) {
|
||||
fn(array->val[n], &stop);
|
||||
if (stop)
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -288,8 +296,13 @@ void
|
||||
heim_array_iterate_reverse_f(heim_array_t array, void *ctx, heim_array_iterator_f_t fn)
|
||||
{
|
||||
size_t n;
|
||||
for (n = array->len; n > 0; n--)
|
||||
fn(array->val[n - 1], ctx);
|
||||
int stop = 0;
|
||||
|
||||
for (n = array->len; n > 0; n--) {
|
||||
fn(array->val[n - 1], ctx, &stop);
|
||||
if (stop)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __BLOCKS__
|
||||
@@ -301,11 +314,15 @@ heim_array_iterate_reverse_f(heim_array_t array, void *ctx, heim_array_iterator_
|
||||
*/
|
||||
|
||||
void
|
||||
heim_array_iterate_reverse(heim_array_t array, void (^fn)(heim_object_t))
|
||||
heim_array_iterate_reverse(heim_array_t array, void (^fn)(heim_object_t, int *))
|
||||
{
|
||||
size_t n;
|
||||
for (n = array->len; n > 0; n--)
|
||||
fn(array->val[n - 1]);
|
||||
int stop = 0;
|
||||
for (n = array->len; n > 0; n--) {
|
||||
fn(array->val[n - 1], &stop);
|
||||
if (stop)
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -414,12 +431,34 @@ heim_array_delete_value(heim_array_t array, size_t idx)
|
||||
heim_release(obj);
|
||||
}
|
||||
|
||||
#ifdef __BLOCKS__
|
||||
/**
|
||||
* Get value at idx
|
||||
* Filter out entres of array when function return true
|
||||
*
|
||||
* @param array the array to modify
|
||||
* @param idx the key to delete
|
||||
* @param fn filter function
|
||||
*/
|
||||
|
||||
void
|
||||
heim_array_filter_f(heim_array_t array, void *ctx, heim_array_filter_f_t fn)
|
||||
{
|
||||
size_t n = 0;
|
||||
|
||||
while (n < array->len) {
|
||||
if (fn(array->val[n], ctx)) {
|
||||
heim_array_delete_value(array, n);
|
||||
} else {
|
||||
n++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __BLOCKS__
|
||||
|
||||
/**
|
||||
* Filter out entres of array when block return true
|
||||
*
|
||||
* @param array the array to modify
|
||||
* @param block filter block
|
||||
*/
|
||||
|
||||
void
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define HEIM_BASE_API_VERSION 20130210
|
||||
|
||||
typedef void * heim_object_t;
|
||||
typedef unsigned int heim_tid_t;
|
||||
typedef heim_object_t heim_bool_t;
|
||||
@@ -121,15 +123,16 @@ typedef struct heim_array_data *heim_array_t;
|
||||
heim_array_t heim_array_create(void);
|
||||
heim_tid_t heim_array_get_type_id(void);
|
||||
|
||||
typedef void (*heim_array_iterator_f_t)(heim_object_t, void *);
|
||||
typedef void (*heim_array_iterator_f_t)(heim_object_t, void *, int *);
|
||||
typedef int (*heim_array_filter_f_t)(heim_object_t, void *);
|
||||
|
||||
int heim_array_append_value(heim_array_t, heim_object_t);
|
||||
int heim_array_insert_value(heim_array_t, size_t idx, heim_object_t);
|
||||
void heim_array_iterate_f(heim_array_t, void *, heim_array_iterator_f_t);
|
||||
void heim_array_iterate_reverse_f(heim_array_t, void *, heim_array_iterator_f_t);
|
||||
#ifdef __BLOCKS__
|
||||
void heim_array_iterate(heim_array_t, void (^)(heim_object_t));
|
||||
void heim_array_iterate_reverse(heim_array_t, void (^)(heim_object_t));
|
||||
void heim_array_iterate(heim_array_t, void (^)(heim_object_t, int *));
|
||||
void heim_array_iterate_reverse(heim_array_t, void (^)(heim_object_t, int *));
|
||||
#endif
|
||||
size_t heim_array_get_length(heim_array_t);
|
||||
heim_object_t
|
||||
@@ -138,6 +141,7 @@ heim_object_t
|
||||
heim_array_copy_value(heim_array_t, size_t);
|
||||
void heim_array_set_value(heim_array_t, size_t, heim_object_t);
|
||||
void heim_array_delete_value(heim_array_t, size_t);
|
||||
void heim_array_filter_f(heim_array_t, void *, heim_array_filter_f_t);
|
||||
#ifdef __BLOCKS__
|
||||
void heim_array_filter(heim_array_t, int (^)(heim_object_t));
|
||||
#endif
|
||||
|
||||
@@ -79,7 +79,7 @@ indent(struct twojson *j)
|
||||
}
|
||||
|
||||
static void
|
||||
array2json(heim_object_t value, void *ctx)
|
||||
array2json(heim_object_t value, void *ctx, int *stop)
|
||||
{
|
||||
struct twojson *j = ctx;
|
||||
if (j->ret)
|
||||
|
||||
@@ -795,7 +795,7 @@ struct test_array_iter_ctx {
|
||||
char buf[256];
|
||||
};
|
||||
|
||||
static void test_array_iter(heim_object_t elt, void *arg)
|
||||
static void test_array_iter(heim_object_t elt, void *arg, int *stop)
|
||||
{
|
||||
struct test_array_iter_ctx *iter_ctx = arg;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user