1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
% eventq_class.mw
% Simple event queue for use in MATLAB event-driven simulations.
% Uses the MATLAB OO system for encapsulating the event queue.
%
% Copyright (c) 2007 David Bindel
% See the file COPYING for copying permissions
$ #include <queue>
$
$ typedef std::pair<double, int> Event;
$ typedef std::priority_queue< Event,
$ std::vector<Event>,
$ std::greater<Event> > EventQueue;
@ @eventq/eventq.m -------------------------------------
function [qobj] = eventq();
qobj = [];
# EventQueue* q = new EventQueue();
qobj.q = q;
qobj = class(qobj, 'eventq');
@ @eventq/destroy.m -------------------------------------
function destroy(qobj);
q = qobj.q;
# delete(EventQueue* q);
@ @eventq/empty.m -------------------------------------
function [e] = empty(qobj)
q = qobj.q;
# int e = q->EventQueue.empty();
@ @eventq/pop.m -------------------------------------
function [id, t] = pop(qobj)
$ void pop_event(EventQueue* q, int& id, double& t) {
$ t = q->top().first;
$ id = q->top().second;
$ q->pop();
$ }
$
q = qobj.q;
# pop_event(EventQueue* q, output int& id, output double& t);
@ @eventq/push.m -------------------------------------
function push(qobj, id, t)
$ void push_events(EventQueue* q, int* id, double* t, int m)
$ {
$ for (int i = 0; i < m; ++i)
$ q->push(Event(t[i], id[i]));
$ }
$
q = qobj.q;
m = length(id);
# push_events(EventQueue* q, int[m] id, double[m] t, int m);
|