156 lines
3.5 KiB
JavaScript
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
|
|
};
|