- 论坛徽章:
- 0
|
- /********************************************************************
- created: 2006/12/30
- filename: cgl_valuer.h
- author: Lichuang
-
- purpose: Providing generic assign and compare function
- for CGL
- *********************************************************************/
- #ifndef __CGL_VALUER_H__
- #define __CGL_VALUER_H__
- #include "cgl_commondef.h"
- CGL_BEGIN
- typedef struct valuer valuer;
- struct valuer
- {
- size_t nValueSize;
- value_type (*assign)(value_type data, value_type value, valuer *pValuer);
- int (*compare)(value_type data1, value_type data2, valuer *pValuer);
- };
- extern void valuer_ctor(valuer *pValuer, size_t nValueSize);
- CGL_END
- #endif /* __CGL_VALUER_H__ */
复制代码
- /********************************************************************
- created: 2006/12/30
- filename: cgl_valuer.c
- author: Lichuang
-
- purpose:
- *********************************************************************/
- #include "cgl_valuer.h"
- #include <string.h>
- CGL_BEGIN
- static int compare(value_type data1, value_type data2, valuer *pValuer);
- static value_type assign(value_type data, value_type value, valuer *pValuer);
- void
- valuer_ctor(valuer *pValuer, size_t nValueSize)
- {
- if (NULL == pValuer)
- return;
- pValuer->nValueSize = nValueSize;
- pValuer->assign = assign;
- pValuer->compare = compare;
- }
- static value_type
- assign(value_type data, value_type value, valuer *pValuer)
- {
- if (INVALID_VALUE == pValuer)
- return INVALID_VALUE;
- return memcpy(data, value, pValuer->nValueSize);
- }
- static int
- compare(value_type data1, value_type data2, valuer *pValuer)
- {
- if (INVALID_VALUE == pValuer)
- return INVALID_RESULT;
- return memcmp(data1, data2, pValuer->nValueSize);
- }
- CGL_END
复制代码
这个就是用于提供范型支持的struct, value_type是void*,初始化的时候传入一个这个struct的指针和所要支持的类型的数据长度就可以了.
想法和实现都很简单,欢迎板砖.
[ 本帖最后由 converse 于 2006-12-31 11:49 编辑 ] |
|