Search / Sort

This commit is contained in:
2026-08-31 11:50:04 +08:00
parent 0cb98557da
commit 109e8af3d5
10 changed files with 818 additions and 219 deletions
+61 -5
View File
@@ -75,9 +75,8 @@ c_err_t c_ArrayList_Resize(c_ArrayList_t* self, c_size_t new_capacity) {
c_err_t c_ArrayList_Add(c_ArrayList_t* self, const void* item) {
if (!self || !item) return C_ERR_PARAM;
if (self->size>=self->capacity) {
c_err_t err = c_ArrayList_Resize(self, (self->capacity==0)?4:(self->capacity<<1));
if (err!=C_ERR_OK) return err;
if (self->size >= self->capacity) {
return C_ERR_FULL;
}
char* target = (char*)self->array + (self->size * self->item_size);
memcpy(target, item, self->item_size);
@@ -106,8 +105,11 @@ c_err_t c_ArrayList_Read(const c_ArrayList_t* self, c_size_t index, void* out_it
return C_ERR_OK;
}
c_err_t c_ArrayList_Remove(c_ArrayList_t* self, c_size_t index, void* out_item) {
if (!self || index>=self->size) return C_ERR_PARAM;
c_err_t c_ArrayList_RemoveAt(c_ArrayList_t* self, c_size_t index, void* out_item) {
if (!self) return C_ERR_PARAM;
if (self->size == 0) return C_ERR_EMPTY;
if (index >= self->size) return C_ERR_OUTOFBOUND;
char* target = (char*)self->array + (index * self->item_size);
if (out_item) {
@@ -124,3 +126,57 @@ c_err_t c_ArrayList_Remove(c_ArrayList_t* self, c_size_t index, void* out_item)
return C_ERR_OK;
}
c_err_t c_ArrayList_Set(const c_ArrayList_t* self, c_size_t index, const void* item) {
if (!self || !item) return C_ERR_PARAM;
if (index >= self->size) return C_ERR_OUTOFBOUND;
char* target = (char*)self->array + (index * self->item_size);
memcpy(target, item, self->item_size);
return C_ERR_OK;
}
c_err_t c_ArrayList_PopBack(c_ArrayList_t* self, void* out_item) {
if (!self ) return C_ERR_PARAM;
if (self->size==0) return C_ERR_EMPTY;
self->size--;
if (out_item) {
char* target = (char*)self->array + (self->size) * self->item_size;
memcpy(out_item, target, self->item_size);
}
return C_ERR_OK;
}
c_err_t c_ArrayList_PopBackResize(c_ArrayList_t* self, void* out_item) {
if (!self ) return C_ERR_PARAM;
if (self->size==0) return C_ERR_EMPTY;
self->size--;
if (out_item) {
char* target = (char*)self->array + (self->size) * self->item_size;
memcpy(out_item, target, self->item_size);
}
// 🌟【弹性内存缩容锁】:若当前存量过低 (N <= Capacity/4) 且长于基本配额,主动腰斩退还内存给系统
if (self->size > 0 && self->size <= (self->capacity >> 2)) {
c_ArrayList_Resize(self, self->capacity >> 1);
}
return C_ERR_OK;
}
c_err_t c_ArrayList_ResizeAdd(c_ArrayList_t* self, const void* item) {
if (!self || !item) return C_ERR_PARAM;
if (self->size >= self->capacity) {
c_err_t err = c_ArrayList_Resize(self, (self->capacity==0)?4:(self->capacity<<1));
if (err!=C_ERR_OK) return err;
}
char* target = (char*)self->array + (self->size * self->item_size);
memcpy(target, item, self->item_size);
self->size++;
return C_ERR_OK;
}