⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 __vector_inter.h

📁 提供了rbtree ttree avltree list hashtable等常用容器的算法,代码经过uclinux + arm44b0平台验证
💻 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 + -