phypdu.cc
上传用户:hzie11
上传日期:2013-10-07
资源大小:1487k
文件大小:4k
源码类别:

网络

开发平台:

C/C++

  1. /* This software was developed at the National Institute of Standards and
  2.  * Technology by employees of the Federal Government in the course of
  3.  * their official duties. Pursuant to title 17 Section 105 of the United
  4.  * States Code this software is not subject to copyright protection and
  5.  * is in the public domain.
  6.  * NIST assumes no responsibility whatsoever for its use by other parties,
  7.  * and makes no guarantees, expressed or implied, about its quality,
  8.  * reliability, or any other characteristic.
  9.  * <BR>
  10.  * We would appreciate acknowledgement if the software is used.
  11.  * <BR>
  12.  * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
  13.  * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
  14.  * FROM THE USE OF THIS SOFTWARE.
  15.  * </PRE></P>
  16.  * @author  rouil
  17.  */
  18. #include "phypdu.h"
  19. /**
  20.  * Create a phy pdu with the given preamble size
  21.  * @param preamble The preamble size in OFDM symbols
  22.  */
  23. PhyPdu::PhyPdu (FrameMap *map, int preamble)
  24. {
  25.   assert (preamble >=0 && map);
  26.   preamble_ = preamble;
  27.   map_ = map;
  28.   nb_burst_=0;
  29.   LIST_INIT(&burst_list_);
  30. }
  31. /*
  32.  * Delete the object
  33.  */
  34. PhyPdu::~PhyPdu ()
  35. {
  36.   for (Burst *b = burst_list_.lh_first; b ; b=burst_list_.lh_first) {
  37.     b->remove_entry ();
  38.     delete (b);
  39.   }
  40. }
  41. /**
  42.  * Set the preamble size for the PDU in unit of OFDM symbols
  43.  * @param preamble the preamble size for the PDU
  44.  */
  45. void PhyPdu::setPreamble( int preamble )
  46. {
  47.   assert (preamble>=0);
  48.   preamble_ = preamble;
  49. }
  50. /**
  51.  * Return the preamble size for the PDU in unit of OFDM symbols
  52.  * @return the preamble size for the PDU
  53.  */
  54. int PhyPdu::getPreamble( )
  55. {
  56.   return preamble_;
  57. }
  58. /**
  59.  * Add a burst in the PDU
  60.  * @param pos The position of the burst 
  61.  */
  62. Burst* PhyPdu::addBurst(int pos)
  63. {
  64.   assert (pos >= 0 && pos <= nb_burst_ );
  65.   Burst *b = new Burst (this);
  66.   if (pos==0)
  67.     b->insert_entry_head (&burst_list_);
  68.   else {
  69.     Burst *prev = burst_list_.lh_first ;
  70.     Burst *b2 = prev->next_entry();
  71.     int index = 1;
  72.     while (index < pos) {
  73.       prev=b2;
  74.       b2=b2->next_entry();
  75.       index++;
  76.     }
  77.     b->insert_entry (prev);
  78.   }
  79.   nb_burst_++;
  80.   return b;
  81. }
  82. /**
  83.  * Remove a burst in the PDU
  84.  * @param burst The burst to remove
  85.  */
  86. void PhyPdu::removeBurst(Burst *b)
  87. {
  88.   b->remove_entry();
  89.   nb_burst_--;
  90. }
  91. /**
  92.  * Return the burst located at the given index
  93.  * @param pos The position of the burst
  94.  */
  95. Burst* PhyPdu::getBurst(int pos)
  96. {
  97.   assert (pos >= 0 && pos < nb_burst_ );
  98.   Burst *b = burst_list_.lh_first ;
  99.   for (int i = 0 ; i < pos ; i++) {
  100.     b=b->next_entry();
  101.   }
  102.   return b;
  103. }
  104. /** Methods for class DlPhyPdu **/
  105. /**
  106.  * Create a phy pdu with the given preamble size
  107.  * @param preamble The preamble size in OFDM symbols
  108.  */
  109. DlPhyPdu::DlPhyPdu (FrameMap *map, int preamble) : PhyPdu(map, preamble)
  110. {
  111. }
  112. /**
  113.  * Add a burst in the PDU
  114.  * @param pos The position of the burst 
  115.  */
  116. Burst* DlPhyPdu::addBurst(int pos)
  117. {
  118.   assert (pos >= 0 && pos <= nb_burst_ );
  119.   DlBurst *b = new DlBurst (this);
  120.   if (pos==0 || nb_burst_==0)
  121.     b->insert_entry_head (&burst_list_);
  122.   else {
  123.     Burst *prev = burst_list_.lh_first ;
  124.     Burst *b2 = prev->next_entry();
  125.     int index = 1;
  126.     while (b2 && index < pos) {
  127.       prev=b2;
  128.       b2=b2->next_entry();
  129.       index++;
  130.     }
  131.     b->insert_entry (prev);
  132.   }
  133.   nb_burst_++;
  134.   return b;
  135. }
  136. /** Methods for class UlPhyPdu **/
  137. /**
  138.  * Create a phy pdu with the given preamble size
  139.  * @param preamble The preamble size in OFDM symbols
  140.  */
  141. UlPhyPdu::UlPhyPdu (FrameMap *map, int preamble) : PhyPdu(map, preamble)
  142. {
  143. }
  144. /**
  145.  * Add a burst in the PDU
  146.  * @param pos The position of the burst 
  147.  */
  148. Burst* UlPhyPdu::addBurst(int pos)
  149. {
  150.   //UlPhyPdu only have one burst
  151.   assert (pos == 0 && nb_burst_==0 );
  152.   UlBurst *b = new UlBurst (this);
  153.   b->insert_entry_head (&burst_list_);
  154.   nb_burst_++;
  155.   return b;
  156. }