node_list.c

00001 /* Copyright 2008 Michael Marsh, University of Maryland.
00002  *
00003  * This file is part of pydtn.
00004  *
00005  * pydtn is free software: you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation, either version 3 of the License, or
00008  * (at your option) any later version.
00009  *
00010  * pydtn is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with pydtn.  If not, see <http://www.gnu.org/licenses/>.
00017  *
00018  * The views and conclusions contained in the software and documentation
00019  * are those of the authors and should not be interpreted as representing
00020  * official policies, either expressed or implied, of the University
00021  * of Maryland.
00022  *
00023  * pydtn extends and embeds the Python interpreter, which is
00024  * Copyright 2001-2006 Python Software Foundation, All Rights Reserved,
00025  * and is released under the PSF License Agreement.
00026  *
00027  * RANLUX random number generation uses the Boost library,
00028  * Copyright 1994-2006 by various authors (details in individual files),
00029  * which is released under the Boost Software License, Version 1.0.
00030  */
00031 
00032 #include "aodv.h"
00033 
00034 int
00035 aodv_add_to_node_list( aodv_node_list_t** path,
00036                        const aodv_addr_t* addr,
00037                        uint32_t seq )
00038 {
00039    aodv_node_list_t* head = NULL;
00040    aodv_node_list_t* tail = NULL;
00041    aodv_node_list_t* curr = NULL;
00042 
00043    curr = (aodv_node_list_t*) malloc( sizeof(aodv_node_list_t) );
00044    if ( NULL == curr )
00045    {
00046       return 0;
00047    }
00048    curr->node.data = NULL;
00049    curr->node.length = 0U;
00050    set_aodv_addr( &(curr->node), addr );
00051    curr->seq  = seq;
00052 
00053    if ( NULL == *path )
00054    {
00055       curr->next = curr;
00056       curr->prev = curr;
00057       *path = curr;
00058    }
00059    else
00060    {
00061       head = *path;
00062       tail = head->prev;
00063       curr->prev = tail;
00064       curr->next = head;
00065       tail->next = curr;
00066       head->prev = curr;
00067    }
00068 
00069    return 1;
00070 }
00071 
00072 void
00073 free_aodv_node_list( aodv_node_list_t* head )
00074 {
00075    aodv_node_list_t* curr;
00076    aodv_node_list_t* next;
00077 
00078    if ( NULL == head ) return;
00079 
00080    curr = head;
00081    do
00082    {
00083       next = curr->next;
00084       if ( NULL != curr->node.data ) free( curr->node.data );
00085       free( curr );
00086       curr = next;
00087    } while ( curr != head );
00088 }
00089 
00090 const aodv_node_list_t*
00091 aodv_find_in_node_list( const aodv_node_list_t* nodes,
00092                         const aodv_addr_t* addr )
00093 {
00094    const aodv_node_list_t* curr;
00095    if ( NULL == nodes ) return NULL;
00096    curr = nodes;
00097    do
00098    {
00099       if ( 0 == aodv_cmp_addr( &(curr->node), addr ) ) return curr;
00100       curr = curr->next;
00101    } while ( curr != nodes );
00102    return NULL;
00103 }

Generated on Mon Mar 24 11:15:45 2008 for Pydtn Simulator by  doxygen 1.5.4