p802_15_4hlist.cc
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /********************************************/
  2. /*     NS2 Simulator for IEEE 802.15.4      */
  3. /*           (per P802.15.4/D18)            */
  4. /*------------------------------------------*/
  5. /* by:        Jianliang Zheng               */
  6. /*        (zheng@ee.ccny.cuny.edu)          */
  7. /*              Myung J. Lee                */
  8. /*          (lee@ccny.cuny.edu)             */
  9. /*        ~~~~~~~~~~~~~~~~~~~~~~~~~         */
  10. /*           SAIT-CUNY Joint Lab            */
  11. /********************************************/
  12. // File:  p802_15_4hlist.cc
  13. // Mode:  C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t
  14. // $Header: /cvsroot/nsnam/ns-2/wpan/p802_15_4hlist.cc,v 1.2 2005/07/13 03:51:33 tomh Exp $
  15. /*
  16.  * Copyright (c) 2003-2004 Samsung Advanced Institute of Technology and
  17.  * The City University of New York. All rights reserved.
  18.  *
  19.  * Redistribution and use in source and binary forms, with or without
  20.  * modification, are permitted provided that the following conditions
  21.  * are met:
  22.  * 1. Redistributions of source code must retain the above copyright
  23.  *    notice, this list of conditions and the following disclaimer.
  24.  * 2. Redistributions in binary form must reproduce the above copyright
  25.  *    notice, this list of conditions and the following disclaimer in the
  26.  *    documentation and/or other materials provided with the distribution.
  27.  * 3. All advertising materials mentioning features or use of this software
  28.  *    must display the following acknowledgement:
  29.  * This product includes software developed by the Joint Lab of Samsung 
  30.  *      Advanced Institute of Technology and The City University of New York.
  31.  * 4. Neither the name of Samsung Advanced Institute of Technology nor of 
  32.  *    The City University of New York may be used to endorse or promote 
  33.  *    products derived from this software without specific prior written 
  34.  *    permission.
  35.  *
  36.  * THIS SOFTWARE IS PROVIDED BY THE JOINT LAB OF SAMSUNG ADVANCED INSTITUTE
  37.  * OF TECHNOLOGY AND THE CITY UNIVERSITY OF NEW YORK ``AS IS'' AND ANY EXPRESS 
  38.  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
  39.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 
  40.  * NO EVENT SHALL SAMSUNG ADVANCED INSTITUTE OR THE CITY UNIVERSITY OF NEW YORK 
  41.  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
  42.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
  43.  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  44.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  45.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
  46.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  47.  */
  48. #include <scheduler.h>
  49. #include "p802_15_4hlist.h"
  50. int addHListLink(HLISTLINK **hlistLink1, HLISTLINK **hlistLink2, UINT_16 hostid, UINT_8 sn)
  51. {
  52. HLISTLINK *tmp;
  53. if(*hlistLink2 == NULL) //not exist yet
  54. {
  55. *hlistLink2 = new HLISTLINK(hostid, sn);
  56. if (*hlistLink2 == NULL) return 1;
  57. *hlistLink1 = *hlistLink2;
  58. }
  59. else
  60. {
  61. tmp=new HLISTLINK(hostid, sn);
  62. if (tmp == NULL) return 1;
  63. tmp->last = *hlistLink2;
  64. (*hlistLink2)->next = tmp;
  65. *hlistLink2 = tmp;
  66. }
  67. return 0;
  68. }
  69. int updateHListLink(int oper, HLISTLINK **hlistLink1, HLISTLINK **hlistLink2, UINT_16 hostid, UINT_8 sn)
  70. {
  71. HLISTLINK *tmp;
  72. int ok;
  73. ok = 1;
  74. tmp = *hlistLink1;
  75. while(tmp != NULL)
  76. {
  77. if(tmp->hostID == hostid)
  78. {
  79. if (oper == hl_oper_del) //delete an element
  80. {
  81. if(tmp->last != NULL)
  82. {
  83. tmp->last->next = tmp->next;
  84. if(tmp->next != NULL)
  85. tmp->next->last = tmp->last;
  86. else
  87. *hlistLink2 = tmp->last;
  88. }
  89. else if (tmp->next != NULL)
  90. {
  91. *hlistLink1 = tmp->next;
  92. tmp->next->last = NULL;
  93. }
  94. else
  95. {
  96. *hlistLink1 = NULL;
  97. *hlistLink2 = NULL;
  98. }
  99. delete tmp;
  100. }
  101. if (oper == hl_oper_rpl) //replace
  102. {
  103. if (tmp->SN != sn)
  104. tmp->SN = sn;
  105. else
  106. {
  107. ok = 2;
  108. break;
  109. }
  110. }
  111. ok = 0;
  112. break;
  113. }
  114. tmp = tmp->next;
  115. }
  116. return ok;
  117. }
  118. int chkAddUpdHListLink(HLISTLINK **hlistLink1, HLISTLINK **hlistLink2, UINT_16 hostid, UINT_8 sn)
  119. {
  120. int i;
  121. i = updateHListLink(hl_oper_rpl, hlistLink1, hlistLink2, hostid, sn);
  122. if (i == 0) return 1;
  123. else if (i == 2) return 2;
  124. i = addHListLink(hlistLink1, hlistLink2, hostid, sn);
  125. if (i == 0) return 0;
  126. else return 3;
  127. }
  128. void emptyHListLink(HLISTLINK **hlistLink1, HLISTLINK **hlistLink2)
  129. {
  130. HLISTLINK *tmp, *tmp2;
  131. if(*hlistLink1 != NULL)
  132. {
  133. tmp = *hlistLink1;
  134. while(tmp != NULL)
  135. {
  136. tmp2 = tmp;
  137. tmp = tmp->next;
  138. delete tmp2;
  139. }
  140. *hlistLink1 = NULL;
  141. }
  142. *hlistLink2 = *hlistLink1;
  143. }
  144. void dumpHListLink(HLISTLINK *hlistLink1, UINT_16 hostid)
  145. {
  146. HLISTLINK *tmp;
  147. int i;
  148. fprintf(stdout, "[%.2f] --- dump host list (by host %d) ---n", Scheduler::instance().clock(), hostid);
  149. tmp = hlistLink1;
  150. i = 1;
  151. while(tmp != NULL)
  152. {
  153. fprintf(stdout, "t%d:tfrom host %d:tSN = %dn", i, tmp->hostID, tmp->SN);
  154. tmp = tmp->next;
  155. i++;
  156. }
  157. }
  158. // End of file: p802_15_4hlist.cc