14. Queue
The queue object is a built-in object that provides data queue functionality.
Functional overview:
- Provides FIFO queue functionality.
- Supports arbitrary strings and arbitrary numbers as elements to be stored in the queue.
Limitations:
- The number of queue instances that can be used simultaneously is
8
. - This feature is an extension option exclusively for the NEQTO Engine for Linux.
Depending on the queue size setting and the number of instances, system memory (RAM) will be consumed.
queue Global Object
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
queue.create() | Creates a queue instance. | 00.02.00+ |
queue.create(size)
Creates a queue instance.
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
size | number | mandatory | Specify the queue size [KB]. Range: 1 - 512 | If out of range, it will be rounded to the nearest valid value. |
return | {FIFO} | - | {FIFO} : Generated {FIFO} | When an error occurs, an exception is raised. |
About the number of elements that can be stored in a queue
The buffer allocated to the queue stores the element data without gaps. Therefore, if the element size is variable length, the number of elements that can be stored in the queue will increase or decrease. Consequently, the queue size is determined based on the expected maximum size of the elements and the minimum number of elements that must be stored.
The maximum data size consumed by a single element is "maximum arbitrary string size
+ 12 bytes
".
Therefore, the required queue size is "maximum data size consumed by a single element
× minimum number of elements that must be stored
".
{FIFO}
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
.push() | Adds an element to the FIFO queue. | ||
.pop() | Extracts an element from the FIFO queue. | ||
.getCount() | Gets the number of elements stored in the FIFO queue. | ||
.reset() | Initializes the FIFO queue. | ||
.release() | Releases the FIFO queue. |
Details
.push(str[,num])
Adds an element to the FIFO queue.
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
str | string, undefined | mandatory | Arbitrary string If undefined is specified, it will be treated as an empty string. | |
num | number | optional | Arbitrary number The default value is 0. | |
return | boolean | - | true : Success false : Failure | When an error occurs, an exception is raised. |
.pop()
Extracts an element from the FIFO queue.
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | {Element}, null | - | {Element}: The oldest element is returned. null: No elements |
{Element}
Name | Type | Summary | Note |
---|---|---|---|
.str | string | Arbitrary string | |
.num | number | Arbitrary number |
.getCount()
Gets the number of elements stored in the FIFO queue.
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | number | - | The number of stored elements |
.reset()
Initializes the FIFO queue.
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | undefined | - | - |
.release()
Releases the FIFO queue.
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | undefined | - | - |
Object Usage Examples
Sample 1
This is a sample of a basic FIFO queue.
var fifo = queue.create(4); //4KB
for(var i=0; i<10; i++) {
var str = 'TestData' + i;
var ret = fifo.push(str);
if(ret == false) { //overflow
print(`IN${i}: Full`);
} else {
print(`IN${i}: cnt=${fifo.getCount()}`);
}
}
var cnt = 0;
while(1) {
var obj = fifo.pop();
if(obj) {
print(`OUT${cnt++}: str=${obj['str']}, cnt=${fifo.getCount()}`);
} else {
print('Empty');
break;
}
}
fifo.release();
Sample 2
This is a sample that uses a FIFO queue to perform numerical calculations.
var fifo = queue.create(12); //12KB
for(var i=0; i<1000; i++) {
var ret = fifo.push(undefined, i);
if(!ret){ //overflow
print(`IN${i}: Full`);
} else {
print(`IN${i}: cnt=${fifo.getCount()}`);
}
}
var cnt = 0;
var total = 0;
while(1) {
var obj = fifo.pop();
if(obj) {
print(`OUT${cnt++}: num=${obj['num']}, cnt=${fifo.getCount()}`);
total += obj['num'];
} else {
print('Empty');
break;
}
}
print(`Sum of 0 to 999: ${total}`);
fifo.release();
Sample 3
This is a sample that utilizes a FIFO queue to construct a sequence branch processing.
var fifo = queue.create(1); //1KB
var seqName = [ //seq
"init", //0
"push", //1
"check", //2
"exit" //3
];
var seqTbl = [
//seq, arg
[ 0, "" ],
[ 1, "abcdefg" ],
[ 2, "" ],
[ 3, "" ]
];
for(var i=0; i<seqTbl.length; i++) {
var ret = fifo.push(seqTbl[i][1], seqTbl[i][0]);
if(!ret) { //overflow
print(`IN${i}: Full`);
} else {
print(`IN${i}: cnt=${fifo.getCount()}`);
}
}
var act = true;
var tmp = '';
while(act) {
obj = fifo.pop();
if(obj) {
var seq = obj['num'];
var arg = obj['str'];
print('seq:', seqName[seq], arg);
switch(seq) {
case 0: //init
tmp = '';
break;
case 1: //push
tmp = tmp + arg;
break;
case 2: //check
print(tmp, tmp.length);
break;
case 3: //exit
act = false;
break;
default:
print('Unknown');
break;
}
}
}
fifo.release();