📄 array.c
字号:
#include <array.h>#include <mem.h>#include <object.h>struct _Array{ Object parent; ADT* data; int item_size; int size;};Array* array_new (int p_item_size){ Array *self; self = (Array*)mem_new(sizeof(Array)); object_init_object (OBJECT (self), array_destroy); self->data = NULL; self->item_size = p_item_size; self->size = 0; return self;}Array* array_new_size (int p_item_size, int p_size){ Array* self; self = (Array*)mem_new(sizeof(Array)); object_init_object (OBJECT(self), array_destroy); self->data = mem_new(p_size*p_item_size); self->item_size = p_item_size; self->size = 0; }void array_destroy (Object* self){ array_clear ( (Array*)self ); mem_destroy ( ((Array*)self)->data); mem_destroy (self);}void array_clear (Array* self){ while (array_get_size (self))array_remove (self, 0);}Bool array_isempty (Array* self){ return self->size==0? TRUE:FALSE;}int array_get_size (Array* self){ return self->size;}void array_resize (Array* self, int p_newsize){ self->data = mem_resize( self->data, p_newsize * self->item_size); self->size = p_newsize;}ADT array_at (Array* self, int p_index){ if (p_index < self->size) return addref (Object, self->data+p_index*self->item_size); else return NULL;}void array_set (Array* self, int p_index, ADT p_item){ mem_copy(self->data+p_index*self->item_size, p_item, self->item_size);}void array_insert (Array* self, ADT p_item){ self->size++; array_resize (self, self->size); mem_copy(self->data+self->item_size*self->size, p_item, self->item_size);}void array_remove (Array* self, int p_index){ self->size--; unref (self->data[p_index]); mem_copy (&(self->data+p_index*self->item_size + 1), &(self->data+p_index*self->item_size), (self->size - p_index) * self->item_size);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -