Consumer.hh revision 6145
112854Sgabeblack@google.com
212854Sgabeblack@google.com/*
312854Sgabeblack@google.com * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
412854Sgabeblack@google.com * All rights reserved.
512854Sgabeblack@google.com *
612854Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without
712854Sgabeblack@google.com * modification, are permitted provided that the following conditions are
812854Sgabeblack@google.com * met: redistributions of source code must retain the above copyright
912854Sgabeblack@google.com * notice, this list of conditions and the following disclaimer;
1012854Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright
1112854Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the
1212854Sgabeblack@google.com * documentation and/or other materials provided with the distribution;
1312854Sgabeblack@google.com * neither the name of the copyright holders nor the names of its
1412854Sgabeblack@google.com * contributors may be used to endorse or promote products derived from
1512854Sgabeblack@google.com * this software without specific prior written permission.
1612854Sgabeblack@google.com *
1712854Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1812854Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1912854Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2012854Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2112854Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2212854Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2312854Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2412854Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2512854Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2612854Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2712854Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2812854Sgabeblack@google.com */
2912854Sgabeblack@google.com
3012854Sgabeblack@google.com/*
3112854Sgabeblack@google.com * $Id$
3212854Sgabeblack@google.com *
3312854Sgabeblack@google.com * Description: This is the virtual base class of all classes that can
3412854Sgabeblack@google.com * be the targets of wakeup events.  There is only two methods,
3512854Sgabeblack@google.com * wakeup() and print() and no data members.
3612854Sgabeblack@google.com *
3712854Sgabeblack@google.com */
3812854Sgabeblack@google.com
3912854Sgabeblack@google.com#ifndef CONSUMER_H
4012854Sgabeblack@google.com#define CONSUMER_H
4112854Sgabeblack@google.com
4212854Sgabeblack@google.com#include "Global.hh"
4312854Sgabeblack@google.com#include "EventQueue.hh"
4412854Sgabeblack@google.com
4512854Sgabeblack@google.comclass MessageBuffer;
4612854Sgabeblack@google.com
4712854Sgabeblack@google.comclass Consumer {
4812854Sgabeblack@google.compublic:
4912854Sgabeblack@google.com  // Constructors
5012854Sgabeblack@google.com  Consumer() { m_last_scheduled_wakeup = 0; m_last_wakeup = 0; m_out_link_vec.setSize(0); }
5112854Sgabeblack@google.com
5212854Sgabeblack@google.com  // Destructor
5312854Sgabeblack@google.com  virtual ~Consumer() { }
5412854Sgabeblack@google.com
5512854Sgabeblack@google.com  // Public Methods - pure virtual methods
5612854Sgabeblack@google.com  void triggerWakeup() { Time time = g_eventQueue_ptr->getTime(); if (m_last_wakeup != time) { wakeup(); m_last_wakeup = time; }}
5712854Sgabeblack@google.com  virtual void wakeup() = 0;
5812854Sgabeblack@google.com  virtual void print(ostream& out) const = 0;
5912854Sgabeblack@google.com  const Time& getLastScheduledWakeup() const { return m_last_scheduled_wakeup; }
6012854Sgabeblack@google.com  void setLastScheduledWakeup(const Time& time) { m_last_scheduled_wakeup = time; }
6112854Sgabeblack@google.com  Vector< Vector<MessageBuffer*> > getOutBuffers() { return m_out_link_vec; }
6212854Sgabeblack@google.com
6312854Sgabeblack@google.comprotected:
6413325Sgabeblack@google.com  Vector< Vector<MessageBuffer*> > m_out_link_vec;
6513325Sgabeblack@google.com
6612854Sgabeblack@google.comprivate:
6712854Sgabeblack@google.com  // Private Methods
6812854Sgabeblack@google.com
6912854Sgabeblack@google.com  // Data Members (m_ prefix)
7012854Sgabeblack@google.com  Time m_last_scheduled_wakeup;
7112854Sgabeblack@google.com  Time m_last_wakeup;
7212854Sgabeblack@google.com};
7312854Sgabeblack@google.com
7412854Sgabeblack@google.com// Output operator declaration
7512854Sgabeblack@google.cominline extern
7612854Sgabeblack@google.comostream& operator<<(ostream& out, const Consumer& obj);
7712854Sgabeblack@google.com
7812854Sgabeblack@google.com// ******************* Definitions *******************
7912854Sgabeblack@google.com
8012854Sgabeblack@google.com// Output operator definition
8112854Sgabeblack@google.cominline extern
8212854Sgabeblack@google.comostream& operator<<(ostream& out, const Consumer& obj)
8312854Sgabeblack@google.com{
8412854Sgabeblack@google.com  obj.print(out);
8512854Sgabeblack@google.com  out << flush;
8612854Sgabeblack@google.com  return out;
8712854Sgabeblack@google.com}
8812854Sgabeblack@google.com
8912854Sgabeblack@google.com#endif //CONSUMER_H
9012854Sgabeblack@google.com