zoukankan      html  css  js  c++  java
  • 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后面的元素向前移动。
         
         8. get_index_dynamic(DYNAMIC_ARRAY *array, uchar* element)
              获取element在数组中的位置。
  • 相关阅读:
    win7 64位操作系统下使用OFFICE2007 导入表格报错 未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0
    armxilinxeabigcc 不是内部或外部命令,也不是可运行的程序
    上位机 串口 通信 协议
    ZYNQ 调试遇到的种种问题汇总[转帖]
    ZedBoard 安装 Ubuntu11.04
    What the difference between .ipa and .app
    How to create a .ipa file for ios app?
    获取IOS客户端系统版本号
    ios软件支持双语(本地化、国际化)
    objectivec中判断对象是否属于某个类的方法
  • 原文地址:https://www.cnblogs.com/xpchild/p/3715569.html
Copyright © 2011-2022 走看看