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

通讯编程

开发平台:

Visual C++

  1. /* -*- Mode:C++; c-basic-offset:3; tab-width:3; indent-tabs-mode:t -*- */
  2. /*
  3.  * Copyright (c) 2007 Regents of the SIGNET lab, University of Padova.
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. Neither the name of the University of Padova (SIGNET lab) nor the 
  15.  *    names of its contributors may be used to endorse or promote products 
  16.  *    derived from this software without specific prior written permission.
  17.  *
  18.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
  19.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
  20.  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  21.  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
  22.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  23.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  24.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
  25.  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  26.  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
  27.  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  28.  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29.  */
  30. #ifndef POWER_PROFILE_H
  31. #define POWER_PROFILE_H
  32. /* used to avoid long-run errors in the calculus of accumulated power */
  33. #define POWERPROFILE_ACC_POWER_ROUND_THRESH 1e-20
  34. #include <tclcl.h>
  35. /**
  36.  * Used to store the power level associated with a certain time
  37.  * 
  38.  */
  39. struct PowerElement {
  40. double power;  /**< power level, either absolute or differential depending on the context */
  41. double time;   /**< time, either absolute or differential depending on the context  */
  42. };
  43. class PowerElementListItem;
  44. #ifndef COMPILING_TEST_PROGRAM
  45. class PowerProfile : public TclObject {
  46. #else
  47. class PowerProfile {
  48. #endif
  49. public: 
  50. PowerProfile();
  51. ~PowerProfile();
  52. /** 
  53.  * Starts a new PowerProfile recording
  54.  * 
  55.  * Deletes all previosly recorded samples and
  56.  * sets the first sample to the current power level.
  57.  * 
  58.  */
  59. void startNewRecording();
  60. /** 
  61.  * Add a new element to the recording. 
  62.  *
  63.  * While recording, this method adds a new element to the record. 
  64.  * While not recording, this method has the only effect of updating the
  65.  * current accumulated power. 
  66.  * 
  67.  * @param el the element to be added. 
  68.  * Please note that in this case el.power is supposed to be the variation
  69.  * with the previous power sample (i.e. increment or decrement), while
  70.  * el.time is supposed to be an absolute time reference.
  71.  * 
  72.  */
  73. void addElement(PowerElement el);
  74. /** 
  75.  * Stops the current recording.
  76.  *
  77.  * All subseqent calls to addElement() will NOT result in newly recorded 
  78.  * values, only the accumulated power will be updated. 
  79.  * 
  80.  */
  81. void stopRecording();
  82. /** 
  83.  * Returns the number of elements currently recorded within the PowerProfile.
  84.  * 
  85.  * 
  86.  * @return the number of elements
  87.  */
  88. inline int getNumElements() {return numElements; }
  89. /** 
  90.  * Retrieve the previously recorded PowerElement in the given position
  91.  * 
  92.  * @param index the position index of the power elements, 
  93.  * ranging from 0 to getNumElements() - 1
  94.  * 
  95.  * @return the requested PwerElement. 
  96.  * An empty element (power=0, time=0) is returned if 
  97.  * the index is not valid
  98.  */
  99. PowerElement getElement(int index);
  100.   
  101. protected:
  102. bool statusRecording;                /**< True if recording, false if not recording */
  103. PowerElementListItem* powerListHead; /**< Pointer to head of list */
  104. PowerElementListItem* powerListTail; /**< Pointer to tail of list */
  105. int numElements;                     /**< Total elements stored in list */
  106. int lastReadElIndex;                 /**< Index of last element accessed thorugh getElement() */
  107. PowerElementListItem* lastReadElPtr; /**< Pointer to last elementaccessed thorugh getElement() */
  108. double referenceTime;                /**< this var holds the value of PowerElement.time in last call to 
  109.   * addElement() occured with statusRecording==false 
  110.   */
  111. double accumulatedPower;             /**< power accumulated through the life 
  112.   *of this power profile instance 
  113.   */
  114. int debug_;                          /**< debug variable to be exported via TCL */
  115. };
  116. #endif /*  POWER_PROFILE_H */
  117.