首页 > 代码库 > MySQL源码 数据结构array
MySQL源码 数据结构array
MySQL源码中自己定义了许多数据结构,放在mysys的目录下,源码中通常都使用这些数据结构来组织存放数据,也更容易实现跨平台。
下面先来看下MySQL定义的动态数组:
【源代码include/array.h mysys/array.c】
typedef struct st_dynamic_array { uchar *buffer; ulong elements, max_element; ulong alloc_increment; uint size_of_element; } DYNAMIC_ARRAY;
特点:
1. 动态数组中的元素具有固定的内存空间大小 size_of_element
2. 插入一个元素时,提供元素的指针,写入时会指针所指向的位置开始后的size_of_element字节的内存memcpy到数组中
3. 检索时,提供单个索引位置的直接定位,或者根据elements来for轮询所有的元素
下面看一下针对动态数组的函数:
1. init_dynamic_array2(DYNAMIC_ARRAY *array, uint element_size,
void *init_buffer, ulong init_alloc,
ulong alloc_increment)
初始化elements=max_element=0
malloc init_alloc*element_size大小的内存空间给array->buffer。
2. insert_dynamic(DYNAMIC_ARRAY *array, uchar* element)
插入一个元素 element
如果elements==max_element,则内存空间已经使用完,需要realloc空间,并把原来空间的内存memcpy过来。
最后追加element到数组的最后
3. alloc_dynamic(DYNAMIC_ARRAY *array)
分配一个新的元素空间,并把elements++;
4. pop_dynamic(DYNAMIC_ARRAY *array)
弹出数组的最后一个元素,这里只是把elements--即可。
5. get_dynamic(DYNAMIC_ARRAY *array, uchar* element, ulong idx)
获取array数组中位置是idx的元素,并把内存copy到element中,所以调用前需要给element分配好空间。
6. delete_dynamic(DYNAMIC_ARRAY *array)
删除动态数组,并使用my_free把内存释放出来
7. delete_dynamic_element(DYNAMIC_ARRAY *array, ulong idx)
删除数组中位置是indx的元素,并把indx后面的元素向前移动。
删除数组中位置是indx的元素,并把indx后面的元素向前移动。
8. get_index_dynamic(DYNAMIC_ARRAY *array, uchar* element)
获取element在数组中的位置。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。