AbstractSimObject Class Reference

#include <AbstractSimObject.h>

Inheritance diagram for AbstractSimObject:
SimObject LogicGate OneInputGate TwoInputGate Input Output

List of all members.

Classes

class  CustomPriorityQueue
 This implementation of PriorityQueue imitates std::prioirty_queue but allows reserving space in the underlying std::vector. More...

Public Member Functions

 AbstractSimObject (size_t id, size_t numOutputs, size_t numInputs)
 Instantiates a new simulation object.
 AbstractSimObject (const AbstractSimObject &that)
virtual ~AbstractSimObject ()
virtual AbstractSimObjectclone () const =0
 a way to construct different subtypes
EventTy makeEvent (SimObject *sendObj, SimObject *recvObj, const EventTy::Type &type, const LogicUpdate &act, const SimTime &sendTime, SimTime delay=MIN_DELAY)
 Make event.
void recvEvent (size_t inputIndex, const EventTy &e)
 Recv event.
virtual void execEvent (Graph &graph, GNode &myNode, const EventTy &e)=0
 Exec event.
size_t simulate (Graph &graph, GNode &myNode)
 Simulate.
bool isActive () const
 Checks if is active.
void updateActive ()
 active is set to true if there exists a pending event(s) on each input pq or if one input pq (not all) is empty and an event with INFINITY_SIM_TIME has already been received telling that no more events on this input will be received.
virtual size_t numPendingEvents () const
virtual const std::string toString () const
size_t getId () const
 Gets the id.

Static Public Attributes

static size_t NEVENTS_PER_ITER = 1024
 Upper limit on the number of events processed by a SimObject during a call to.

Private Types

typedef CustomPriorityQueue
< EventTy,
EventRecvTimeLocalTieBrkCmp
< EventTy > > 
PriorityQueue

Private Member Functions

void init (size_t id, size_t numOutputs, size_t numInputs)
 Inits the object.
void deepCopy (const AbstractSimObject &that)
 performs a deep copy.
void updateClock ()
 compute the min.

Private Attributes

size_t id
 The id.
size_t numInputs
 The number of inputs.
size_t numOutputs
 number of outputs
std::vector< SimTimeinputTimes
 store the timestamp of latest event received on an input line
SimTime clock
 local clock value, is the minimum of events received on all input lines
PriorityQueue pendingEvents
 Events received on any input go into pendingEvents and are stored here until processed.
bool active
 time stamp of the last message sent on output protected SimTime lastSent = 0;
size_t eventIdCntr
 Counter to assign id's to events sent by this SimObject.

Static Private Attributes

static const bool DEBUG = false
static const size_t PQ_OVER_RESERVE = 1024
 multiplication factor for space reserved in the prioirty queue

Detailed Description

Description

The Class AbstractSimObject represents an abstract simulation object (processing station). A simulation application would inherit from this class.


Member Typedef Documentation


Constructor & Destructor Documentation

AbstractSimObject::AbstractSimObject ( size_t  id,
size_t  numOutputs,
size_t  numInputs 
) [inline]

Instantiates a new simulation object.

Parameters:
id Must be unique
numOutputs the number of outputs
numInputs the number of inputs
AbstractSimObject::AbstractSimObject ( const AbstractSimObject that  )  [inline]
virtual AbstractSimObject::~AbstractSimObject (  )  [inline, virtual]

Member Function Documentation

virtual AbstractSimObject* AbstractSimObject::clone (  )  const [pure virtual]

a way to construct different subtypes

Returns:
a copy of this

Implements SimObject.

Implemented in Input, OneInputGate, Output, and TwoInputGate.

void AbstractSimObject::deepCopy ( const AbstractSimObject that  )  [inline, private]

performs a deep copy.

Parameters:
that the that
virtual void AbstractSimObject::execEvent ( Graph graph,
GNode myNode,
const EventTy e 
) [pure virtual]

Exec event.

The user code should override this method inorder to define the semantics of executing and event on a sub-type

Parameters:
graph,: the graph containg simulation objects as nodes and communication links as edges
myNode,: the node in the graph that has this SimObject as its node data
e,: the input event

Implements SimObject.

Implemented in Input, OneInputGate, Output, and TwoInputGate.

size_t AbstractSimObject::getId (  )  const [inline, virtual]

Gets the id.

Returns:
the id

Implements SimObject.

void AbstractSimObject::init ( size_t  id,
size_t  numOutputs,
size_t  numInputs 
) [inline, private]

Inits the object.

Parameters:
id unique identifier for this object
numOutputs the number of outputs
numInputs the number of inputs
bool AbstractSimObject::isActive (  )  const [inline, virtual]

Checks if is active.

Returns:
true, if is active

Implements SimObject.

EventTy AbstractSimObject::makeEvent ( SimObject sendObj,
SimObject recvObj,
const EventTy::Type type,
const LogicUpdate act,
const SimTime sendTime,
SimTime  delay = MIN_DELAY 
) [inline, virtual]

Make event.

Parameters:
sendObj the send obj
recvObj the recv obj
type the type
act the action to be performed
sendTime the send time
delay the delay
Returns:
the event

Implements SimObject.

virtual size_t AbstractSimObject::numPendingEvents (  )  const [inline, virtual]

Implements SimObject.

void AbstractSimObject::recvEvent ( size_t  inputIndex,
const EventTy e 
) [inline, virtual]

Recv event.

put in the input indexed by inputIndex

Parameters:
inputIndex 
e the event

Implements SimObject.

size_t AbstractSimObject::simulate ( Graph graph,
GNode myNode 
) [inline, virtual]

Simulate.

pre-condition: The object should be active

Computes the set of readyEvents, then executes the events in time-stamp order

Here the set of readyEvents is the subset of pendingEvents that have a recvTime <= this->clock

The parameter NEVENTS_PER_ITER defines an upper limit on the number of ready events that can be processed in one call to simulate

Parameters:
graph,: the graph containg simulation objects as nodes and communication links as edges
myNode the node in the graph that has this SimObject as its node data
Returns:
number of events ready to be executed.

Implements SimObject.

virtual const std::string AbstractSimObject::toString (  )  const [inline, virtual]
Returns:
a string representation for printing purposes

Implements SimObject.

Reimplemented in OneInputGate, and TwoInputGate.

void AbstractSimObject::updateActive (  )  [inline, virtual]

active is set to true if there exists a pending event(s) on each input pq or if one input pq (not all) is empty and an event with INFINITY_SIM_TIME has already been received telling that no more events on this input will be received.

We can tell if there are pending events on input i if inputTimes[i] >= pendingEvents.top () We can tell if there are no pending events by checking pendingEvents.empty ();

Implements SimObject.

void AbstractSimObject::updateClock (  )  [inline, private]

compute the min.

of the timestamps of latest message received so far for every input


Member Data Documentation

bool AbstractSimObject::active [private]

time stamp of the last message sent on output protected SimTime lastSent = 0;

whether it can process some events received on the input. i.e. if pendingEvents is computed, it'll be non-empty

local clock value, is the minimum of events received on all input lines

const bool AbstractSimObject::DEBUG = false [static, private]

Counter to assign id's to events sent by this SimObject.

size_t AbstractSimObject::id [private]

The id.

std::vector<SimTime> AbstractSimObject::inputTimes [private]

store the timestamp of latest event received on an input line

size_t AbstractSimObject::NEVENTS_PER_ITER = 1024 [static]

Upper limit on the number of events processed by a SimObject during a call to.

See also:
SimObject::simulate
size_t AbstractSimObject::numInputs [private]

The number of inputs.

number of outputs

Events received on any input go into pendingEvents and are stored here until processed.

readyEvents set, is a set of events that can safely be processed, if this AbstractSimObject is active. If minRecv is the min. of the latest timestamp received on any input i.e. min of inputTimes[i] for all i then events with timestamp <= minRecv go into readyEvents set. readyEvents set is a subset of pendingEvents.

const size_t AbstractSimObject::PQ_OVER_RESERVE = 1024 [static, private]

multiplication factor for space reserved in the prioirty queue


The documentation for this class was generated from the following file:
Generated on Tue Aug 2 11:51:26 2011 for Galois by  doxygen 1.6.3