new message_set functions

FossilOrigin-Name: 8cdf87be9882ec0526b09102abf4e54cbfb944aac8eae0ca0e47af66b80b0b9a
This commit is contained in:
7u83@mail.ru
2018-02-23 23:30:44 +00:00
parent fbbc21b728
commit dcbbaf28a6
9 changed files with 162 additions and 7 deletions

View File

@ -85,6 +85,7 @@ MAVLOBJS= \
mlist.o \
cw_load_file.o \
cw_save_file.o \
message_set.o

View File

@ -115,6 +115,7 @@ typedef struct {
int type;
int * states;
cw_messagedef_t * elements;
const char * name;
}cw_message_t;
typedef struct {
@ -127,10 +128,10 @@ typedef struct {
const char * name;
}cw_message_element_t;
typefe struct {
}cw_message_set;
typedef struct {
mavl_t messages;
mavl_t all_elems;
}cw_message_set_t;

View File

@ -1,5 +1,118 @@
#include "cw.h"
#include "mavl.h"
#include "message_set.h"
struct message_search_elem{
cw_messagedef_t *message;
mavl_t elements_tree;
mlist_t elements_list;
};
void cw_message_set_create(){
static inline int cmp_cw_message_element(const void *elem1, const void *elem2){
cw_message_element_t * e1 = (cw_message_element_t*)elem1;
cw_message_element_t * e2 = (cw_message_element_t*)elem2;
int r;
r = e1->id - e2->id;
if (r!=0)
return r;
r = e1->vendor - e2->vendor;
if (r!=0)
return r;
r = e1->proto - e2->proto;
if (r != 0)
return r;
return 0;
}
static inline int msg_cmp(const void *elem1, const void *elem2)
{
/* struct cw_action_in *e1 = (struct cw_action_in *) elem1;
struct cw_action_in *e2 = (struct cw_action_in *) elem2;
int r;
r = e1->capwap_state - e2->capwap_state;
if (r != 0)
return r;
r = e1->msg_id - e2->msg_id;
if (r != 0)
return r;
r = e1->elem_id - e2->elem_id;
if (r != 0)
return r;
r = e1->vendor_id - e2->vendor_id;
if (r != 0)
return r;
r = e1->proto - e2->proto;
if (r != 0)
return r;
*/
return 0;
}
void cw_message_set_destroy(cw_message_set_t * set){
if (set->messages){
mavl_destroy(set->messages);
}
if (set->all_elems){
mavl_destroy(set->all_elems);
}
free(set);
}
cw_message_set_t * cw_message_set_create(){
/* allocate memory for a message_set */
cw_message_set_t * set = malloc(sizeof(cw_message_set_t));
if (set==NULL)
return NULL;
memset(set,0,sizeof(cw_message_set_t));
/* create mavl for all_elems */
set->all_elems = mavl_create(cmp_cw_message_element,NULL);
if (set->all_elems==NULL){
cw_message_set_destroy(set);
return NULL;
}
/* create mavl for messages */
set->messages = mavl_create(msg_cmp,NULL);
if (set->messages==NULL){
cw_message_set_destroy(set);
return NULL;
}
return set;
}
void cw_message_set_add(cw_message_set_t * set,
cw_message_t * messages,
cw_message_element_t * elements[]){
cw_message_element_t ** e;
for (e=elements; e->id!=0; e++){
// mavl_add(set->all_elems, e);
printf("Add: %d %d %d %s\n",
e->proto,
e->vendor,
e->id,
e->name
);
}
}

View File

@ -0,0 +1,11 @@
#ifndef __MESSAGE_SET_H
#define __MESSAGE_SET_H
#include "cw.h"
extern void cw_message_set_destroy(cw_message_set_t * set);
extern cw_message_set_t * cw_message_set_create();
extern void cw_message_set_add(cw_message_set_t * set,
cw_message_t * messages,
cw_message_element_t * elements[]);
#endif