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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1991-1994 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  * This product includes software developed by the University of
  16.  * California, Berkeley and the Network Research Group at
  17.  * Lawrence Berkeley Laboratory.
  18.  * 4. Neither the name of the University nor of the Laboratory may be used
  19.  *    to endorse or promote products derived from this software without
  20.  *    specific prior written permission.
  21.  *
  22.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32.  * SUCH DAMAGE.
  33.  *
  34.  */
  35. /* it is used to generate the Weight Spread Sequence of SRR 
  36.  * WSS and SRR are named by Dr. W. Qi 
  37.  */
  38. /*
  39. #include <stdio.h>
  40. #include <math.h>
  41. #include <string.h>
  42. #include <stdlib.h>
  43. */
  44. class PacketSRR;
  45. class SRR;
  46. int power( int base, int j)
  47. {
  48. int r=1; int i;
  49. if(j==0) return 1;
  50. else
  51. {
  52. for(i=0;i<j;i++)
  53. r*=base;
  54. }
  55. return r;
  56. }
  57. void rawScan( int i, int j, int N, int *p)
  58. {
  59. if(j==N)
  60. {
  61. *p=N;
  62. return;
  63. }
  64. if(i%(int)power(2,j))
  65. {
  66. *p=j;
  67. return;
  68. }
  69. else
  70. rawScan(i, j+1, N, p);
  71. }
  72. class WSS{
  73. public:WSS(): currOrder(1), items(0), ptr(0), pwss(0){ }
  74. friend class SRR;
  75. public:
  76. int maxOrder; // the order of the WSS
  77. int currOrder; // current order of WSS
  78. int items; //how many items are in the WSS
  79. unsigned int ptr;
  80. int *pwss;  // 
  81. void init(int i);
  82. int get_ptr()
  83. {
  84.   return ptr;
  85. }
  86. void set_ptr (int val){
  87. ptr = val;
  88. }
  89. void inc_ptr ( int order)
  90. {
  91. ptr += 1;
  92. if((int)ptr > ((1<<order)-2))
  93. {
  94. ptr = 0;
  95. }
  96. }
  97. int get(int order);
  98. void print(); // for debug purpose
  99. };
  100. void WSS::init(int i){
  101. int j;
  102. maxOrder=i;
  103. items= (1<<maxOrder)-1;
  104. ptr=0;
  105. pwss=(int*)malloc(sizeof(int)*items);
  106. for(j=1;j<=items; j++)
  107. rawScan(j, 1, maxOrder,  (int*)(pwss+j-1));
  108. }
  109. int WSS::get(int order)  // it should also tells the WSS the order
  110. {  
  111. int value;
  112. currOrder=order;
  113. //printf("get wssn");
  114. int tmp = 1 << order;
  115. if((int)ptr > (tmp-2))
  116. {
  117. printf("tmp :%d n", tmp);
  118. printf("error, too large ptr:%d, order:%dn", (int)ptr, order);
  119. exit(0);
  120. }
  121. value= *(pwss+ptr);
  122. return value;
  123. }
  124. void WSS::print(){
  125. int i;
  126. for(i=0;i<items;i++)
  127. printf("%4d", *(pwss+i));
  128. printf("n");
  129. }
  130. /*
  131. main(int argc,  char **argv)
  132. {
  133. WSS wss;
  134. if(argc!=2)
  135. {
  136. printf("usage:%s numbern", argv[0]);
  137. exit(0);
  138. }
  139. wss.init(atoi(argv[1]));
  140. wss.print();
  141. }
  142. */