📄 vector.c.svn-base
字号:
/* ****ROBOCON 2009 | BUPT TEAM******* * ------------------------------------------------------------------------ * FileName : vector.c * Version : 1.0 * Brief : * Code by : leaf * Date : Apr 3, 2009 * Note : * * * ------------------------------------------------------------------------ */#include "lib_bupt.h"#ifdef VECTOR_H_INCLUDED/*初始化Vector,分配数据空间*/void vectorInit(Vector *v, size_t bufSize){ if(bufSize <= 0){ v->capacity = 0; v->data = NULL; } else{ v->data = (VectorDataType *)malloc(bufSize * sizeof(VectorDataType)); if( v->data != NULL) v->capacity = bufSize; }}/*释放数据空间*/void vectorFree(Vector *v){ if(v->data != NULL && v->capacity > 0){ free(v->data); } v->data = NULL; v->capacity = 0;}/*设置某一位上的数据,如果空间不足,会扩展空间,如果无法分配空间,则直接返回*/inline void vectorSet(Vector *v, size_t idx, VectorDataType data){ if(idx >= v->capacity){ if( vectorExtends(v, idx + VECTOR_SIZE_INC) <= idx ) return; } v->data[idx] = data;}/*取得某一位上的数据*/inline VectorDataType vectorGet(const Vector *v, size_t idx){ if( idx >= v->capacity ){//不返回没有初始化的数据 return 0; } return(v->data[idx]);}/*扩展数据空间*/int vectorExtends(Vector *v, size_t size){ void *newarea; if(size < v->capacity){ return v->capacity; } newarea = realloc(v->data, size); if( newarea == NULL ) return v->capacity; v->data = (VectorDataType *)newarea; v->capacity = size; return size;}/*写入数据串,如果空间不足,会扩展空间*/int vectorWrite(Vector *v, size_t idx, const VectorDataType *buf, size_t len){ if( idx + len > v->capacity ){ if( vectorExtends( v, idx + len + VECTOR_SIZE_INC ) <= idx + len ) { len = v->capacity - idx; } } memcpy(&(v->data[idx]), buf, len); return len;}/*读出数据串,如果遇到结尾,则停止,返回实际读出的数据数*/int vectorRead(const Vector *v, size_t idx, VectorDataType *buf, size_t len){ if( idx + len > v->capacity ){ len = v->capacity - idx; } memcpy(buf, &(v->data[idx]), len); return len;}/*从另一个Vector中指定位置开始,拷贝指定长度的数据,到另一向量中指定位置*/inline int vectorCopy(Vector *src, size_t srcidx, Vector *dest, size_t destidx, size_t len){ return vectorWrite(dest, destidx, &(src->data[srcidx]), len);}/*获得缓冲区地址*/void *vectorGetBuffer(Vector *vec, size_t idx){ return (&vec->data[idx]);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -