Libcstl
2011年4月7日
11:52
一、自定义类型
// 申明时:
typedef int fm_int;
typedef double fm_num;
// 注册时:
type_duplicate(fm_int,int);
type_duplicate(fm_num,double);
二、void*自定义结构
static void _voidp_init(const void* cpv_input, void* pv_output)
{
assert(cpv_input != NULL && pv_output != NULL);
*cast(void**,cpv_input) = 0;
*(bool_t*)pv_output = true;
}
static void _voidp_copy(const void* cpv_first, const void* cpv_second, void* pv_output)
{
assert(cpv_first != NULL && cpv_second != NULL && pv_output != NULL);
*cast(void**,cpv_first) = *cast(void**,cpv_second);
*(bool_t*)pv_output = true;
}
static void _voidp_less(const void* cpv_first, const void* cpv_second, void* pv_output)
{
assert(cpv_first != NULL && cpv_second != NULL && pv_output != NULL);
*(bool_t*)pv_output = (*cast(void**,cpv_first)<*cast(void**,cpv_second))?true:false;
}
static void _voidp_destroy(const void* cpv_input, void* pv_output)
{
assert(cpv_input != NULL && pv_output != NULL);
*cast(void**,cpv_input) = 0;
*(bool_t*)pv_output = true;
}
// 注册时:
type_register(void*, _voidp_init, _voidp_copy, _voidp_less, _voidp_destroy);
// 压入数据
vector_push_back(info->inner.vars,cast(void**,&p));
// vector_t* v;
// vector_iterator_t vIterator;
// 循环迭代器
for(vIterator=vector_begin(v);!iterator_equal(vIterator,vector_end(v));vIterator=iterator_next(vIterator))
{
// 读取数据
if(string_equal((*cast(formula_Variable**,iterator_get_pointer(vIterator)))->name,info->inner.lex.sVal))
{
break;
}
}
Map_t
2011年4月7日
12:00
//创建集
pair_t* pair;
pair = create_pair(int,int);
pair_init_elem(pair,cast(int,type),cast(int,0));
// 可以insert多次
map_insert(statement2tick,pair); //map_t* statement2tick
pair_destroy(pair);
// 迭代器查找
map_iterator_t b;
pair_t* pair;
b = map_find(info->inner.statement2tick,cast(int,type));
if(iterator_equal(b,map_end(info->inner.statement2tick)))
{
pair = cast(pair_t*,iterator_get_pointer(b));
ret = *cast(int*,pair_second(pair));
}
List_t
2011年4月7日
11:59
list示例:
// list_t* ops; // 操作栈
// list_t* vals; // 操作数栈
// 创建
ops = create_list(fm_int);
list_init(ops);
vals = create_list(string_t);
list_init(vals);
// 销毁
list_destroy(calc->ops);
list_destroy(calc->vals);
// 压入
list_push_back(calc->ops,cast(fm_int*,&op)); // int op
list_push_back(calc->vals,val); //string_t* val
// 取值
cur = *cast(int*,list_back(calc->ops));
list_pop_back(calc->ops);
left = create_basic_string(char);
string_init_copy(left,cast(string_t*,list_back(calc->vals)));
list_pop_back(calc->vals);
No comments:
Post a Comment