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; }
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; }
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); }