jam/js/dos/afvm_queue.js

156 lines
3.5 KiB
JavaScript

/**
* Created by sbosse on 3/9/15.
*/
var Types = require('./afvm_types');
var Sch = require('./scheduler');
var assert = function(condition, message) {
if (!condition)
throw Error("[afvm_queue]" + (typeof message !== "undefined" ? ": " + message : ""));
};
var TokenQueue = function (tq_desc) {
this.tq_data = []; // Token list
this.tq_lock = 0; // integer
this.tq_desc = tq_desc; // string
};
TokenQueue.prototype.Lock = function () {
var _tk_myid;
_tk_myid = Sch.GetId();
this.tq_lock = _tk_myid;
};
TokenQueue.prototype.UnLock = function () {
this.tq_lock = 0
};
TokenQueue.prototype.Inq = function () {
var _tk_tq_elem;
_tk_tq_elem = undefined;
this.Lock();
if (this.tq_data.length == 0)
Sch.SetBlocked(true);
else {
Sch.SetBlocked(false);
_tk_tq_elem = this.tq_data[0];
this.tq_data.shift();
};
this.UnLock();
return _tk_tq_elem;
};
TokenQueue.prototype.Outq = function (t) {
// if LOGIT then LOG("outq("+tq.tq_desc+","+ToString(t.tk_id)+")");
this.Lock();
t.tk_place = this.tq_desc;
this.tq_data.push(t);
this.UnLock();
};
TokenQueue.prototype.Emptyq = function () {
var _tk_cond;
this.Lock();
_tk_cond = (this.tq_data.length == 0);
this.UnLock();
return _tk_cond;
};
var ContainerQueue = function (cq_desc) {
this.cq_data = []; // Container list,
this.cq_lock = 0; // integer,
this.cq_desc = cq_desc; // string
};
ContainerQueue.prototype.Lock = function () {
var _tk_myid;
_tk_myid = Sch.GetId();
this.cq_lock = _tk_myid;
};
ContainerQueue.prototype.UnLock = function () {
this.cq_lock = 0
};
ContainerQueue.prototype.Inq = function () {
var _tk_cq_elem;
_tk_cq_elem = undefined;
this.Lock();
if (this.cq_data.length == 0)
Sch.SetBlocked(true);
else {
Sch.SetBlocked(false);
_tk_cq_elem = this.cq_data[0];
this.cq_data.shift();
};
this.UnLock();
return _tk_cq_elem;
};
ContainerQueue.prototype.Outq = function (c) {
// if LOGIT then LOG("outq("+tq.tq_desc+","+ToString(t.tk_id)+")");
this.Lock();
this.cq_data.push(c);
this.UnLock();
};
ContainerQueue.prototype.Emptyq = function () {
var _tk_cond;
this.Lock();
_tk_cond = (this.cq_data.length == 0);
this.UnLock();
return _tk_cond;
};
var SignalQueue = function (sq_desc) {
this.sq_data = []; // Signal list,
this.sq_lock = 0; // integer,
this.sq_desc = sq_desc; // string
};
SignalQueue.prototype.Lock = function () {
var _tk_myid;
_tk_myid = Sch.GetId();
this.sq_lock = _tk_myid;
};
SignalQueue.prototype.UnLock = function () {
this.sq_lock = 0
};
SignalQueue.prototype.Inq = function () {
var _tk_sq_elem;
_tk_sq_elem = undefined;
this.Lock();
if (this.sq_data.length == 0)
Sch.SetBlocked(true);
else {
Sch.SetBlocked(false);
_tk_sq_elem = this.sq_data[0];
this.sq_data.shift();
};
this.UnLock();
return _tk_sq_elem;
};
SignalQueue.prototype.Outq = function (s) {
// if LOGIT then LOG("outq("+tq.tq_desc+","+ToString(t.tk_id)+")");
this.Lock();
this.sq_data.push(s);
this.UnLock();
};
SignalQueue.prototype.Emptyq = function () {
var _tk_cond;
this.Lock();
_tk_cond = (this.sq_data.length == 0);
this.UnLock();
return _tk_cond;
};
module.exports = {
TokenQueue: TokenQueue,
ContainerQueue: ContainerQueue,
SignalQueue: SignalQueue
};