Exemple #1
0
void*	stack_pop(stack_t* s) {
	void* ret = list_getElem((list_t*)s, 0, true);
	list_remove((list_t*)s, ret);
	return ret;
}
Exemple #2
0
void stack_onEvent(void * sub, stack_t * sender, enum event_type type, int last_val)
{
    int count;
    char message[80];
    stack_t * stmp;

    stmp = (stack_t *)sub;
    if(type == OVER)
    {
        if(stmp->top < STACK_MAX_SIZE - 1)
        {
            sprintf(message, "Event OVER: Stack %i is FULL.\n", sender->num);
            printf(message);
            stack_push(stmp, last_val);
        }
        else
        {
            //Sub stack1
            count = list_getCount(stmp->dual);
            for(int i = 0; i < count; i++)
            {
                event_t * ev = list_getElem(stmp->dual, i);
                if(ev->callback != NULL)
                {
                    cb_fn fn = (cb_fn)ev->callback;

                    sprintf(message, "%s", (char *)ev->receiver);
					fn(ev->receiver, stmp, DUAL, 1);
                }
            }

            //Sub stack 2
            count = list_getCount(sender->dual);
            for(int i = 0; i < count; i++)
            {
                event_t * ev = list_getElem(sender->dual, i);
                if(ev->callback != NULL)
                {
                    cb_fn fn1 = (cb_fn)ev->callback;

                    sprintf(message, "%s", (char *)ev->receiver);
					fn1(ev->receiver, sender, DUAL, 1);
                }
            }
        }
    }

    if(type == EMPTY)
    {
        if(stmp->top >= STACK_MAX_SIZE)
        {
            sprintf(message, "Event EMPTY: Stack %i is EMPTY\n", sender->num);
            printf(message);
            stack_push(sender, stack_pop(stmp));
        }
        else
        {
            //Sub stack1
            count = list_getCount(stmp->dual);
            for(int i = 0; i < count; i++)
            {
                event_t * ev = list_getElem(stmp->dual, i);
                if(ev->callback != NULL)
                {
                    cb_fn fn = (cb_fn)ev->callback;

                    sprintf(message, "%s", (char *)ev->receiver);
					fn(ev->receiver, stmp, DUAL, 0);
                }
            }

            //Sub stack 2
            count = list_getCount(sender->dual);
            for(int i = 0; i < count; i++)
            {
                event_t * ev = list_getElem(sender->dual, i);
                if(ev->callback != NULL)
                {
                    cb_fn fn1 = (cb_fn)ev->callback;

                    sprintf(message, "%s", (char *)ev->receiver);
					fn1(ev->receiver, sender, DUAL, 0);
                }
            }
        }
    }
    if(type == DUAL)
    {
        user_t * user = (user_t *)sub;
        if(last_val)
            sprintf(message, "Event DUAL: User %s. Stack %i is FULL.\n", user->name, sender->num);
        else
            sprintf(message, "Event DUAL: User %s. Stack %i is EMPTY.\n", user->name, sender->num);
        printf(message);
    }

}
Exemple #3
0
void*	stack_get(stack_t* s) {
	return list_getElem((list_t*)s, 0, false);
}