Пример #1
0
static bool udf_arglist_foreach(const as_list * l, as_list_foreach_callback callback, void * context) {
	as_msg_field * field = (as_msg_field *) l->data;

	if ( field != NULL ) {
		as_unpacker unpacker;
		unpacker.buffer = (const unsigned char*)field->data;
		unpacker.length = as_msg_field_get_value_sz(field);
		unpacker.offset = 0;
		if ( unpacker.length == 0 )
			return true;

		as_val* val = 0;
		int ret = as_unpack_val(&unpacker, &val);

		if (ret == 0 && as_val_type(val) == AS_LIST) {
			as_list_iterator list_iter;
			as_iterator* iter = (as_iterator*) &list_iter;
			as_list_iterator_init(&list_iter, (as_list*)val);

			while (as_iterator_has_next(iter)) {
				const as_val* v = as_iterator_next(iter);
				callback((as_val *) v, context);
			}
			as_iterator_destroy(iter);
		}
		as_val_destroy(val);
		return ret == 0;
	}
	return true;
}
Пример #2
0
/**
 * Generator for map.values()
 */
static int mod_lua_map_values_next(lua_State * l) {
	as_iterator * iter  = mod_lua_toiterator(l, 1);
	if ( iter && as_iterator_has_next(iter) ) {
		as_pair * pair = (as_pair *) as_iterator_next(iter);
		if ( pair ) {
			mod_lua_pushval(l, pair->_2);
			return 1;
		}
	}
	return 0;
}