Sunday, May 6, 2012

Open source

 
 

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: