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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (C) 2004-2005 by the University of Southern California
  3.  * $Id: difftimer.h,v 1.4 2005/09/13 20:47:35 johnh Exp $
  4.  *
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License,
  7.  * version 2, as published by the Free Software Foundation.
  8.  *
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License along
  15.  * with this program; if not, write to the Free Software Foundation, Inc.,
  16.  * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  17.  *
  18.  *
  19.  * The copyright of this module includes the following
  20.  * linking-with-specific-other-licenses addition:
  21.  *
  22.  * In addition, as a special exception, the copyright holders of
  23.  * this module give you permission to combine (via static or
  24.  * dynamic linking) this module with free software programs or
  25.  * libraries that are released under the GNU LGPL and with code
  26.  * included in the standard release of ns-2 under the Apache 2.0
  27.  * license or under otherwise-compatible licenses with advertising
  28.  * requirements (or modified versions of such code, with unchanged
  29.  * license).  You may copy and distribute such a system following the
  30.  * terms of the GNU GPL for this module and the licenses of the
  31.  * other code concerned, provided that you include the source code of
  32.  * that other code when and as the GNU GPL requires distribution of
  33.  * source code.
  34.  *
  35.  * Note that people who make modified versions of this module
  36.  * are not obligated to grant this special exception for their
  37.  * modified versions; it is their choice whether to do so.  The GNU
  38.  * General Public License gives permission to release a modified
  39.  * version without this exception; this exception also makes it
  40.  * possible to release a modified version which carries forward this
  41.  * exception.
  42.  *
  43.  */
  44. //
  45. // Diffusion-event handler object, Padma, nov 2001.
  46. #ifdef NS_DIFFUSION
  47. #ifndef diffevent_handler_h
  48. #define diffevent_handler_h
  49. #include <list>
  50. #include "scheduler.h"
  51. #include "timers.hh"
  52. class MapEntry;
  53. class DiffEventQueue;
  54. typedef long d_handle;
  55. typedef list<MapEntry *> UIDMap_t;
  56. class MapEntry {
  57. public:
  58. d_handle hdl_;
  59. scheduler_uid_t uid_;
  60. };
  61. /* This handler class keeps track of diffusion specific events. 
  62.    It schedules multiple events and irrespective of the event types, 
  63.    always calls back the callback function of its agent.
  64. */
  65. class DiffEvent : public Event {
  66. private:
  67. struct timeval tv_;
  68. d_handle handle_;
  69. void* payload_;
  70. public:
  71. DiffEvent(d_handle hdl, void *payload, int time);
  72. ~DiffEvent() { }
  73. int gettime() {
  74. return ((tv_.tv_sec) + ((tv_.tv_usec)/1000000));
  75. }
  76. d_handle getHandle() { return handle_; }
  77. void* payload() { return payload_; }
  78. };
  79. class DiffEventHandler : public Handler {
  80. public:
  81. DiffEventHandler(TimerManager *agent, DiffEventQueue *deq) { 
  82. a_ = agent; 
  83. queue_ = deq;
  84. }
  85. void handle(Event *);
  86. private:
  87. TimerManager *a_;
  88. DiffEventQueue *queue_;
  89. };
  90. class DiffEventQueue : public EventQueue { 
  91. public: 
  92. DiffEventQueue(TimerManager* a) { 
  93. a_ = a; 
  94. timerHandler_ = new DiffEventHandler(a_, this);
  95. ~DiffEventQueue() { delete timerHandler_; }
  96. // queue functions
  97. void eqAddAfter(d_handle hdl, void *payload, int delay_msec);
  98. DiffEvent *eqFindEvent(d_handle hdl);
  99. bool eqRemove(d_handle hdl);
  100. // mapping functions
  101. void setUID(d_handle hdl, scheduler_uid_t uid);
  102. scheduler_uid_t getUID(d_handle hdl);
  103. private: 
  104. TimerManager *a_;
  105. DiffEventHandler *timerHandler_;
  106. // map for diffusion handle and ns scheduler uid
  107. UIDMap_t uidmap_;
  108. }; 
  109. #endif //diffusion_timer_h
  110. #endif // NS