Source: resourceutilizationpoint.h


Annotated List
Files
Globals
Hierarchy
Index
// ##########################################################################
// ####                                                                  ####
// ####                    Master Thesis Implementation                  ####
// ####  Management of Layered Variable Bitrate Multimedia Streams over  ####
// ####                  DiffServ with A Priori Knowledge                ####
// ####                                                                  ####
// #### ================================================================ ####
// ####                                                                  ####
// ####                                                                  ####
// #### Resource Utilization Point                                       ####
// ####                                                                  ####
// #### Version 1.00  --  October 10, 2000                               ####
// ####                                                                  ####
// #### Copyright (C) 2000 Thomas Dreibholz                              ####
// #### University of Bonn, Department of Computer Science IV            ####
// #### EMail: Dreibholz@bigfoot.com                                     ####
// #### WWW:   http://www.bigfoot.com/~dreibholz/diplom/index.html       ####
// ####                                                                  ####
// ##########################################################################


#ifndef RESOURCEUTILIZATIONPOINT_H
#define RESOURCEUTILIZATIONPOINT_H


#include "system.h"
#include "rtppacket.h"
#include "bandwidthinfo.h"


namespace Coral {


/**
  * This class is a resource/utilization point used for the bandwidth mapping
  * algorithm.
  *
  * @short   Resource Utilization Point
  * @author  Thomas Dreibholz (Dreibholz@bigfoot.com)
  * @version 1.0
*/
class ResourceUtilizationPoint
{
   // ====== Public data ====================================================
   public:
   /**
     * Total bandwidth.
     */
   cardinal Bandwidth;

   /**
     * Total utilization.
     */
   double Utilization;

   /**
     * Total Cost.
     */
   double Cost;

   /**
     * Task ID.
     */
   cardinal TaskID;

   /**
     * Frame rate.
     */
   double FrameRate;

   /**
     * Number of layers.
     */
   cardinal Layers;

   /**
     * Array of layers' bandwidth requirements.
     */
   BandwidthInfo LayerBandwidthInfo[RTPConstants::RTPMaxQualityLayers];


   // ====== Operations =====================================================
   /**
     * Reset.
     */
   void reset();

   /**
     * Merge resource/utilization lists.
     *
     * @param destination Destination list.
     * @param listArray Array of lists to merge.
     * @param listSizeArray Array of list sizes.
     * @param listCount Number of lists.
     * @return Number of points in destination list.
     */
   static cardinal mergeResourceUtilizationLists(
                      ResourceUtilizationPoint*  destination,
                      ResourceUtilizationPoint** listArray,
                      const cardinal*            listSizeArray,
                      const cardinal             listCount);

   /**
     * Sort resource/utilization list by utilization.
     *
     * @param rup List.
     * @param start First point number.
     * @param end Last point number.
     */
   static void ResourceUtilizationPoint::sortResourceUtilizationList(
                                            ResourceUtilizationPoint* rup,
                                            const integer            start,
                                            const integer            end);

   /**
     * Compute convex hull on resource/utilization list using Graham Scan
     * algorithm.
     *
     * @param rup List.
     * @param start First point number.
     * @param end Last point number.
     */
   static cardinal grahamScanResourceUtilizationList(ResourceUtilizationPoint* rup,
                                                     const cardinal            count);


   // ====== Comparision operators ==========================================
   /**
     * Operator "==".
     */
   inline int operator==(const ResourceUtilizationPoint& rup) const;

   /**
     * Operator "!=".
     */
   inline int operator!=(const ResourceUtilizationPoint& rup) const;


   // ====== Private data ===================================================
   private:
   static inline void swapResourceUtilizationPoints(ResourceUtilizationPoint& a,
                                                    ResourceUtilizationPoint& b);
   static inline integer ccw(const ResourceUtilizationPoint& p0,
                             const ResourceUtilizationPoint& p1,
                             const ResourceUtilizationPoint& p2);
};


/**
  * Output operator.
  */
ostream& operator<<(ostream& os, const ResourceUtilizationPoint& rup);



}


#include "resourceutilizationpoint.icc"


#endif

Generated by: viper@odin on Mon Oct 16 11:49:26 2000, using kdoc 2.0a36.