系统程序员成长计划007第三章动态数组 --其他函数
//数组最前面添加元素 Ret darray_prepend(DArray* thiz, void* data) { void* temp; return_val_if_fail(thiz != NULL, RET_INVALID_PARAMS); darray_insert(thiz, 0, data); temp = thiz->data[0]; thiz->data[0] = thiz->data[1]; thiz->data[1] = temp; return RET_OK; } //最后面添加 Ret darray_append(DArray* thiz, void* data) { return_val_if_fail(thiz != NULL, RET_INVALID_PARAMS); return (darray_insert(thiz, thiz->alloc_size, data)); } Ret darray_get_by_index(DArray* thiz, size_t index, void** data) { return_val_if_fail(thiz != NULL, RET_INVALID_PARAMS); data = &(thiz->data[index]); return RET_OK; } Ret darray_set_by_index(DArray* thiz, size_t index, void* data) { return_val_if_fail(thiz != NULL, RET_INVALID_PARAMS); thiz->data[index] = data; return RET_OK; } size_t darray_length(DArray* thiz) { return_val_if_fail(thiz != NULL, RET_INVALID_PARAMS); return thiz->alloc_size; } /* 这两个函数的接口需要再思考 DataVisitFunc DataCompareFunc find和foreach有代码重复,但是find需要返回值。 如果是find调用foreach,那么visit和cmp两个函数的接口必须一致? cmp(赋给visit去操作)的返回值,foreach怎么传递给find. */ Ret darray_foreach(DArray* thiz, DataVisitFunc visit, void* ctx) { unsigned int i; return_val_if_fail(thiz != NULL, RET_INVALID_PARAMS); for(i=0; i<thiz->alloc_size; i++) { visit(ctx); } } int darray_find(DArray* thiz, DataCompareFunc cmp, void* ctx) { unsigned int i; int a; return_val_if_fail(thiz != NULL, RET_INVALID_PARAMS); a = 0; for(i=0; i<thiz->alloc_size; i++) { a = cmp(thiz->data[i], ctx); if(0 != a) { break; } } return a; }
【】
联我:shen5773384##163.com