1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/pqueue/pqueue.c */ 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DTLS implementation written by Nagendra Modadugu 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ==================================================================== 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the above copyright 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the documentation and/or other materials provided with the 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * distribution. 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * software must display the following acknowledgment: 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software developed by the OpenSSL Project 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * endorse or promote products derived from this software without 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * prior written permission. For written permission, please contact 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * openssl-core@OpenSSL.org. 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5. Products derived from this software may not be called "OpenSSL" 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * nor may "OpenSSL" appear in their names without prior written 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * permission of the OpenSSL Project. 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 6. Redistributions of any form whatsoever must retain the following 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * acknowledgment: 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software developed by the OpenSSL Project 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF THE POSSIBILITY OF SUCH DAMAGE. 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ==================================================================== 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This product includes cryptographic software written by Eric Young 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (eay@cryptsoft.com). This product includes software written by Tim 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Hudson (tjh@cryptsoft.com). 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "cryptlib.h" 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/bn.h> 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "pqueue.h" 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttypedef struct _pqueue 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pitem *items; 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int count; 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } pqueue_s; 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpitem * 71221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrompitem_new(unsigned char *prio64be, void *data) 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pitem *item = (pitem *) OPENSSL_malloc(sizeof(pitem)); 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (item == NULL) return NULL; 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom memcpy(item->priority,prio64be,sizeof(item->priority)); 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project item->data = data; 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project item->next = NULL; 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return item; 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpitem_free(pitem *item) 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (item == NULL) return; 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OPENSSL_free(item); 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpqueue_s * 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpqueue_new() 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pqueue_s *pq = (pqueue_s *) OPENSSL_malloc(sizeof(pqueue_s)); 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (pq == NULL) return NULL; 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memset(pq, 0x00, sizeof(pqueue_s)); 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return pq; 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpqueue_free(pqueue_s *pq) 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (pq == NULL) return; 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OPENSSL_free(pq); 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpitem * 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpqueue_insert(pqueue_s *pq, pitem *item) 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pitem *curr, *next; 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (pq->items == NULL) 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pq->items = item; 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return item; 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(curr = NULL, next = pq->items; 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project next != NULL; 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project curr = next, next = next->next) 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 125221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom /* we can compare 64-bit value in big-endian encoding 126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom * with memcmp:-) */ 127221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom int cmp = memcmp(next->priority, item->priority,8); 128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (cmp > 0) /* next > item */ 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project item->next = next; 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (curr == NULL) 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pq->items = item; 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project curr->next = item; 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return item; 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 139221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 140221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom else if (cmp == 0) /* duplicates not allowed */ 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project item->next = NULL; 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project curr->next = item; 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return item; 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpitem * 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpqueue_peek(pqueue_s *pq) 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return pq->items; 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpitem * 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpqueue_pop(pqueue_s *pq) 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pitem *item = pq->items; 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (pq->items != NULL) 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pq->items = pq->items->next; 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return item; 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpitem * 168221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrompqueue_find(pqueue_s *pq, unsigned char *prio64be) 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 17043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom pitem *next; 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pitem *found = NULL; 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ( pq->items == NULL) 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 17643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom for ( next = pq->items; next->next != NULL; next = next->next) 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 178221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if ( memcmp(next->priority, prio64be,8) == 0) 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project found = next; 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project break; 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* check the one last node */ 186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if ( memcmp(next->priority, prio64be,8) ==0) 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project found = next; 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ( ! found) 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if 0 /* find works in peek mode */ 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ( prev == NULL) 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pq->items = next->next; 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project prev->next = next->next; 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return found; 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpqueue_print(pqueue_s *pq) 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pitem *item = pq->items; 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while(item != NULL) 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 209221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom printf("item\t%02x%02x%02x%02x%02x%02x%02x%02x\n", 210221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom item->priority[0],item->priority[1], 211221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom item->priority[2],item->priority[3], 212221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom item->priority[4],item->priority[5], 213221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom item->priority[6],item->priority[7]); 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project item = item->next; 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpitem * 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpqueue_iterator(pqueue_s *pq) 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return pqueue_peek(pq); 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpitem * 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpqueue_next(pitem **item) 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project pitem *ret; 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ( item == NULL || *item == NULL) 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* *item != NULL */ 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret = *item; 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *item = (*item)->next; 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 23998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom 24098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstromint 24198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrompqueue_size(pqueue_s *pq) 24298d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom{ 24398d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom pitem *item = pq->items; 24498d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom int count = 0; 24598d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom 24698d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom while(item != NULL) 24798d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom { 24898d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom count++; 24998d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom item = item->next; 25098d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom } 25198d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom return count; 25298d58bb80c64b02a33662f0ea80351d4a1535267Brian Carlstrom} 253