questions

FossilOrigin-Name: 7143b9342fd901ee83e6004fe84e99303cd87b3fb717ef4ac6f7a8d49af5f4d4
This commit is contained in:
7u83@mail.ru
2018-05-22 05:15:52 +00:00
parent 59b08b31c0
commit df44708715
9 changed files with 84 additions and 38 deletions

View File

@ -44,13 +44,14 @@ int cw_out_radio_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemH
int cw_out_traverse0(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params
, uint8_t * dst, int i, const char *current, const char * next)
, uint8_t * dst, int i, const char *current, const char * next,
int * stack)
{
char *sl;
int l;
char key[CW_KTV_MAX_KEY_LEN];
char tcurrent[CW_KTV_MAX_KEY_LEN];
int len;
len = 0;
sl = strchr(next,'/');
if (sl==NULL){
@ -58,7 +59,25 @@ int cw_out_traverse0(struct cw_ElemHandler * handler, struct cw_ElemHandlerParam
sprintf(key,"%s/%s",current,next);
result = cw_ktv_base_exists(params->conn->local_cfg,key);
if (result != NULL){
int offset;
int i,l;
offset = params->conn->header_len(handler);
printf("Yea! We can do it: %s\n",result->key);
for (i=0;i<stack[0];i++){
printf("I=%i\n",stack[i+1]);
}
l= cw_ktv_write_struct(params->conn->local_cfg,params->conn->default_cfg,
handler->type,key,dst+offset);
printf("Write struct len %i\n",l);
l=params->conn->write_header(handler,dst,l);
printf("header wr len %d\n",l);
if (handler->patch){
handler->patch(dst+offset,stack);
}
return l;
}
return 0;
@ -88,28 +107,27 @@ int cw_out_traverse0(struct cw_ElemHandler * handler, struct cw_ElemHandlerParam
continue;
}
cw_out_traverse0(handler,params,dst,-1,basekey,next+l+1);
stack[0]++;
stack[stack[0]]=i;
len += cw_out_traverse0(handler,params,dst+len,-1,basekey,next+l+1, stack);
printf("Len is now %d\n", len);
}
return len;
}
int cw_out_traverse(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params
, uint8_t * dst)
{
int i;
char current[CW_KTV_MAX_KEY_LEN];
i=-1;
int stack[10];
stack[0]=0;
current[0]=0;
cw_out_traverse0(handler,params,dst,-1,current,handler->key);
printf("Hello world\n");
exit(0);
return cw_out_traverse0(handler,params,dst,-1,current,handler->key, stack);
}

View File

@ -50,6 +50,19 @@ static const char * get_type_name(cw_KTV_t *data)
{
return CW_TYPE_WORD->name;
}
static int cast(cw_KTV_t * data)
{
if (strcmp(data->type->name,CW_TYPE_WORD->name)==0)
return 1;
if (strcmp(data->type->name,CW_TYPE_STR->name)==0){
char *src = data->val.ptr;
CW_TYPE_WORD->from_str(data,src);
free(src);
return 1;
}
return 0;
}
const struct cw_Type cw_type_word = {
"Word", /* name */
@ -60,7 +73,8 @@ const struct cw_Type cw_type_word = {
from_str, /* from_str */
NULL,
NULL,
get_type_name
get_type_name,
cast
};

View File

@ -114,7 +114,7 @@ void *mavl_del ( struct mavl *t, const void *data );
void *mavl_replace ( struct mavl *t, const void *data, int * result );
void mavl_destroy ( struct mavl *t );
void mavl_del_all ( struct mavl *t );
void mavl_merge ( mavl_t m, mavl_t t );
void mavl_merge ( mavl_t target, mavl_t source );
void mavlnode_destroy ( struct mavl *t, struct mavlnode *n );
struct mavlnode *mavlnode_get ( struct mavl *t, void *data );
struct mavlnode * mavl_get_node_cmp(struct mavl *t ,void *data,

View File

@ -68,10 +68,10 @@ static void mavl_merge0(mavl_t m, mavl_t t ,struct mavlnode * n)
*
*
*/
void mavl_merge(mavl_t m, mavl_t t)
void mavl_merge(mavl_t target, mavl_t source)
{
mavl_merge0(m,t,t->root);
t->root=NULL;
mavl_merge0(target,source,source->root);
source->root=NULL;
}

View File

@ -58,6 +58,7 @@ struct cw_ElemHandler {
int (*put)(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params, uint8_t * dst);
int (*mkkey)(const char *pkey, uint8_t*data, int len, char *dst);
int (*patch)(uint8_t *dst, void *data );
};