Ejemplo n.º 1
0
Archivo: pi.c Proyecto: abfeldman/lydia
static tv_literal_set resolve(tv_literal_set x, tv_literal_set y)
{
    unsigned int i;

    for (i = 0; i < x->pos->sz; i++) {
        unsigned l = x->pos->arr[i];
        if (member_int_list(y->neg, l)) {
            tv_literal_set result = rdup_tv_literal_set(x);
            result->pos = remove_int_list(merge_int_list(result->pos, y->pos), l);
            result->neg = remove_int_list(merge_int_list(result->neg, y->neg), l);
            return result;
        }
    }

    for (i = 0; i < x->neg->sz; i++) {
        unsigned l = x->neg->arr[i];
        if (member_int_list(y->pos, l)) {
            tv_literal_set result = rdup_tv_literal_set(x);
            result->pos = remove_int_list(merge_int_list(result->pos, y->pos), l);
            result->neg = remove_int_list(merge_int_list(result->neg, y->neg), l);
            return result;
        }
    }

    return tv_literal_setNIL;
}
Ejemplo n.º 2
0
Archivo: pi.c Proyecto: abfeldman/lydia
static tv_literal_set resolve_literal(tv_literal_set x, tv_literal_set y, int l)
{
    if ((member_int_list(x->pos, l) && member_int_list(y->neg, l)) ||
        (member_int_list(x->neg, l) && member_int_list(y->pos, l))) {
        tv_literal_set result = rdup_tv_literal_set(x);
        result->pos = remove_int_list(merge_int_list(result->pos, y->pos), l);
        result->neg = remove_int_list(merge_int_list(result->neg, y->neg), l);
        return result;
    }

    return tv_literal_setNIL;
}
Ejemplo n.º 3
0
void part_command(int connfd,char* channel_name,int need_writeback){
    char msg[MAX_MSG_LEN];

    /* find user of self */
    user *u = user_table[connfd];
    channel *c = u->located_channel;
    
    if(!find_channel(channel_name))
        snprintf(msg,MAX_MSG_LEN,"%s:No such channel\n",channel_name);
    else if(!c || !c->name || strcasecmp(channel_name,c->name))
        snprintf(msg,MAX_MSG_LEN,"%s:You're not on that channel\n",channel_name);
    else{
        snprintf(msg,MAX_MSG_LEN,":%s!%s@%s QUIT: See You!~\n",u->nick_name,u->user_name,u->host_name);
        /* if the channel has no one left, then remove it out*/
        int size = remove_int_list(c->member,connfd);
        if(size == 0){
            /* send message to daemon of REMOVECHAN */    
            send_command_to_daemon("REMOVECHAN",c->name);
            remove_channel(c);            
        }            
        
        /* if there is still someone at the channel, send a message to tell them 'u' has left */
        else
            invoke_channel(connfd, msg, c); 
        
        /* set located channel to null*/
        u->located_channel = NULL;
    }
    if(need_writeback)
        send_msg_back(connfd,msg);
}