📄 __vector_inter.h
字号:
/**
*
* @file __vector_inter.h vector的内部接口定义
*
* @author lin shao chuan (email:lsccsl@tom.com, msn:lsccsl@163.net)
*
*/
#ifndef ____VECTOR_INTER_H__
#define ____VECTOR_INTER_H__
#include "myobj.h"
#include "MyAlgorithm.h"
#include "mymempool.h"
typedef struct __myvector_element_
{
/*
* 用户数据信息
*/
size_t data_size;
void * data;
}myvector_element;
typedef struct __myvector_t_
{
myvector_element ** el_array;
size_t el_array_size;
size_t el_count;
myobj_ops data_ops;
/*
* 比较回调与相应的用户上下文数据
*/
ALG_COMPARE compare;
/* 预留 */
void * context;
HMYMEMPOOL hm;
}myvector_t;
/**
* 获取第一个节点
*/
#define __vector_get_head(vt) (assert(vt && \
((myvector_t *)(vt))->el_array && \
((myvector_t *)(vt))->el_count && \
((myvector_t *)(vt))->el_array_size), \
((myvector_t *)(vt))->el_array[0])
/**
* 获取第一个节点
*/
#define __vector_get_head_data(vt) (__vector_get_head(vt)->data)
/**
* 获取最后一个节点
*/
#define __vector_get_tail(vt) (assert(vt && \
((myvector_t *)(vt))->el_array && \
((myvector_t *)(vt))->el_count && \
((myvector_t *)(vt))->el_array_size), \
((myvector_t *)vt)->el_array[((myvector_t *)(vt))->el_count - 1])
/**
* 获取最后一个节点的值
*/
#define __vector_get_tail_data(vt) (__vector_get_tail(vt)->data)
/**
* 获取迭代器的数据域
*/
#define __vector_inter_get_iter_data(el) (assert(el), ((myvector_element *)(el))->data)
/**
* 获取迭代器的数据域的长度
*/
#define __vector_inter_get_iter_datasize(el) (assert(el), ((myvector_element *)(el))->data_size)
/**
* 获取vector里元素的个数
*/
#define __vector_inter_get_count(vt) (assert(vt && ((myvector_t *)(vt))->el_array), ((myvector_t *)(vt))->el_count)
/**
* 获取数组的起始地址
*/
#define __vector_inter_get_array(vt) (assert(vt && ((myvector_t *)(vt))->el_array), ((myvector_t *)(vt))->el_array)
/**
* 获取数组中每个元素的大小
*/
#define __vector_inter_get_array_step_size(vt) (assert(vt), sizeof((vt)->el_array[0]))
/**
* 获取指定位置元素
*/
#define __vector_inter_getindex(vt, index) (assert(vt && ((myvector_t *)(vt))->el_array),\
(index >= ((myvector_t *)(vt))->el_count) ? NULL : ((myvector_t *)(vt))->el_array[index])
/**
* 获取指定位置元素
*/
#define __vector_inter_get_index_data(vt, index) (assert(__vector_inter_get_count((vt))), (__vector_inter_getindex((vt), (index)))->data)
/**
* 销毁一个节点
*/
#define __vector_inter_destroy_element(vt, el) do{\
assert((vt) && (el));\
\
if((vt)->data_ops.destruct && (el)->data_size && (el)->data)\
(vt)->data_ops.destruct((el)->data, (el)->data_size);\
\
MyMemPoolFree((vt)->hm, (el));\
}while(0)
/**
* 销毁vector
*/
#define __vector_inter_destroy(vt) do{\
if(NULL != (vt))\
__vector_inter_free_array((vt));\
MyMemPoolFree((vt)->hm, (vt));\
}while(0)
/**
* 释放数组
*/
#define __vector_inter_free_array(vt) do{\
assert(vt && vt->el_array && vt->el_array_size);\
\
__vector_inter_clear(vt);\
\
MyMemPoolFree(vt->hm, vt->el_array);\
}while(0)
/**
* 删除index处的节点
*/
#define __vector_inter_del(vt, index) do{\
myvector_element * el = NULL;\
\
assert((vt) && index < (vt)->el_count && (vt)->el_array && (vt)->el_array_size);\
\
el = (vt)->el_array[(index)];\
\
if(index < (vt)->el_count - 1)\
memcpy((vt)->el_array + (index), (vt)->el_array + (index) + 1, ((vt)->el_count - (index) - 1)*sizeof(myvector_element*));\
\
(vt)->el_count --;\
\
if(NULL != el)\
__vector_inter_destroy_element((vt), el);\
}while(0)
#define __vector_inter_get_temp_it(it, data, data_size) myvector_element __el__ = {data, data_size};HMYVECTOR_ITER it = &__el__
/**
* 创建vector
*/
extern myvector_t * __vector_inter_create(HMYMEMPOOL hm, size_t size, myobj_ops * data_ops, ALG_COMPARE compare);
/**
* 初始化数组
*/
extern int __vector_inter_init_array(myvector_t * vt, size_t size);
/**
* 清除数组中的元素
*/
extern void __vector_inter_clear(myvector_t * vt);
/**
* 往数组里添加元素
*/
extern myvector_element * __vector_inter_add(myvector_t * vt, const void * data, const size_t data_size);
/**
* 重构数组
*/
extern int __vector_inter_resize(myvector_t * vt, size_t size);
/**
* 创建数组元素
*/
extern myvector_element * __vector_inter_create_element(myvector_t * vt, const void * data, const size_t data_size);
/**
* 移动某个元素至另外一个数组的未尾
*/
extern void __vector_move_range_to_end(myvector_t * vt_dst, myvector_t * vt_src, size_t index_begin, size_t range);
///**
// * 从vector里取出,但不释放节点的空间
// */
//extern myvector_element * __vector_inter_out(myvector_t * vt, size_t index);
//
///**
// * 添加一个element
// */
//extern myvector_element * __vector_inter_add_el(myvector_t * vt, myvector_element * el);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -