[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [Libevent-users] The function list operation of "_evdns_nameserver_add_impl"
On Tue, Dec 27, 2011 at 12:02 AM, wang qin <scpl0000@xxxxxxxxx> wrote:
> Dear,
>
> This is the double circle queue. But the operations are not enqueue
> the circle queue.
> Below is the standard operations:
>
> if (!base->server_head) {
> ns->next = ns->prev = ns;
> base->server_head = ns;
> } else {
> ns->next = base->server_head->next;
> ns->prev = base->server_head;
> base->server_head->next = ns;
> if (base->server_head->prev == base->server_head) {
> base->server_head->prev = ns;
> }else{
> base->server_head->next->next-prev = ns;
> }
> }
Ah, now I get what you were trying to say. But there's an even
simpler implementation:
if (!base->server_head) {
ns->next = ns->prev = ns;
base->server_head = ns;
} else {
ns->next = base->server_head->next;
ns->prev = base->server_head;
base->server_head->next = ns;
ns->next->prev = ns;
}
I'm adding this to patches-2.0 for the next release (commit
d6094b160f63fa6c6279), and marking that the whole data structure
should probably turn into a CIRCLEQ in 2.1.
yrs,
--
Nick
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users in the body.