[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.