/** Additional data for the callback.
Alternatively it can be used as a pointer to the data. */
void* data;
- //** Optional callback used to free the data field */
+ /** Optional callback used to free the data field */
void (*free_function)(void*);
};
-xbt_automaton_t xbt_automaton_new(){
+xbt_automaton_t xbt_automaton_new(void){
xbt_automaton_t automaton = NULL;
automaton = xbt_new0(struct xbt_automaton, 1);
automaton->states = xbt_dynar_new(sizeof(xbt_automaton_state_t), xbt_automaton_state_free_voidp);
xbt_automaton_exp_label_t label = NULL;
label = xbt_new0(struct xbt_automaton_exp_label, 1);
label->type = type;
-
+ xbt_automaton_exp_label_t left;
+ xbt_automaton_exp_label_t right;
+ xbt_automaton_exp_label_t exp_not;
+ char *p;
va_list ap;
va_start(ap, type);
switch(type){
- case 0 : {
- xbt_automaton_exp_label_t left = va_arg(ap, xbt_automaton_exp_label_t);
- xbt_automaton_exp_label_t right = va_arg(ap, xbt_automaton_exp_label_t);
+ case 0 :
+ left = va_arg(ap, xbt_automaton_exp_label_t);
+ right = va_arg(ap, xbt_automaton_exp_label_t);
label->u.or_and.left_exp = left;
label->u.or_and.right_exp = right;
break;
- }
- case 1 : {
- xbt_automaton_exp_label_t left = va_arg(ap, xbt_automaton_exp_label_t);
- xbt_automaton_exp_label_t right = va_arg(ap, xbt_automaton_exp_label_t);
+ case 1 :
+ left = va_arg(ap, xbt_automaton_exp_label_t);
+ right = va_arg(ap, xbt_automaton_exp_label_t);
label->u.or_and.left_exp = left;
label->u.or_and.right_exp = right;
break;
- }
- case 2 : {
- xbt_automaton_exp_label_t exp_not = va_arg(ap, xbt_automaton_exp_label_t);
+ case 2 :
+ exp_not = va_arg(ap, xbt_automaton_exp_label_t);
label->u.exp_not = exp_not;
break;
- }
- case 3 :{
- char* p = va_arg(ap, char*);
+ case 3 :
+ p = va_arg(ap, char*);
label->u.predicat = xbt_strdup(p);
break;
}
- }
va_end(ap);
return label;
}
-
xbt_dynar_t xbt_automaton_get_states(xbt_automaton_t a){
return a->states;
}
}
void xbt_automaton_display(xbt_automaton_t a){
- unsigned int cursor = 0;
+ unsigned int cursor;
xbt_automaton_state_t state = NULL;
- printf("\n\nEtat courant : %s\n", a->current_state->id);
+ printf("\n\nCurrent state: %s\n", a->current_state->id);
- printf("\nListe des états : %lu\n\n", xbt_dynar_length(a->states));
-
-
- xbt_dynar_foreach(a->states, cursor, state){
- printf("ID : %s, type : %d\n", state->id, state->type);
- }
+ printf("\nStates' List: %lu\n\n", xbt_dynar_length(a->states));
+
+ xbt_dynar_foreach(a->states, cursor, state)
+ printf("ID: %s, type: %d\n", state->id, state->type);
+
+ xbt_automaton_transition_t transition;
+ printf("\nTransitions: %lu\n\n", xbt_dynar_length(a->transitions));
- cursor=0;
- xbt_automaton_transition_t transition = NULL;
- printf("\nListe des transitions : %lu\n\n", xbt_dynar_length(a->transitions));
-
xbt_dynar_foreach(a->transitions, cursor, transition){
- printf("label :");
+ printf("label:");
xbt_automaton_exp_label_display(transition->label);
printf(", %s -> %s\n", transition->src->id, transition->dst->id);
}
}
void xbt_automaton_exp_label_display(xbt_automaton_exp_label_t label){
-
switch(label->type){
case 0 :
printf("(");
printf("(1)");
break;
}
-
}
xbt_automaton_state_t xbt_automaton_get_current_state(xbt_automaton_t a){
return 1;
switch(l1->type){
-
case 0 : // OR
case 1 : // AND
if(xbt_automaton_exp_label_compare(l1->u.or_and.left_exp, l2->u.or_and.left_exp))
else
return xbt_automaton_exp_label_compare(l1->u.or_and.right_exp, l2->u.or_and.right_exp);
break;
-
case 2 : // NOT
return xbt_automaton_exp_label_compare(l1->u.exp_not, l2->u.exp_not);
break;
-
case 3 : // predicat
return (strcmp(l1->u.predicat, l2->u.predicat));
break;
-
case 4 : // 1
return 0;
break;
-
default :
return -1;
break;
-
}
-
}
-
int xbt_automaton_propositional_symbols_compare_value(xbt_dynar_t s1, xbt_dynar_t s2){
-
int *iptr1, *iptr2;
unsigned int cursor;
unsigned int nb_elem = xbt_dynar_length(s1);
return 0;
}
-/************ Free functions ****************/
-
static void xbt_automaton_transition_free(xbt_automaton_transition_t t);
static void xbt_automaton_exp_label_free(xbt_automaton_exp_label_t e);
static void xbt_automaton_propositional_symbol_free(xbt_automaton_propositional_symbol_t ps);