The DataQueue Service Class
The service class
DataQueue contains the core methods needed to provide a runtime data queue. The runtime data queue is a LIFO (Last In First Out) list of temporary arbitrary data items used by the runtime engine and string machine. All data stored in the queue is in raw form followed by a 2 word record which contains the length of the information in words and type code which describes the type of information stored. The base of the queue contains three values: the total size, the current top, and the current local base.
The method DataQueue_ClearBotton
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
void DataQueue_ClearBottom(int isEmpty)'
|
The
DataQueue_ClearBotton method clears the current bottom of the data queue. It checks to see if there is a bottom mark at the current top of the queue. If there is, then it removes that mark. If there is not a bottom mark at the top of the queue, then it either clears the queue or issues a fatal system error. Its parameter is:
Parameter | Description |
isEmpty | Specifies the desired state of the queue. If non-zero, then the queue must be positioned at the bottom; else this method empties the queue. |
This method has no return value. If the queue is supposed to be positioned at the bottom, but is not, then the message "SYSTEM ERROR#10009: Queue not at bottom mark, top=%d" is logged and control is returned to the operation system.
The method DataQueue_Close
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
void DataQueue_Close(void);
|
The
DataQueue_Close method closes the current data queue, if there is currently one active. All of its resources and any data in it is lost. This method has no parameters. If there currently is a backup queue, then that queue becomes the active one.
This method has no return value.
The method DataQueue_Compare
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
void DataQueue_Compare(void);
|
The
DataQueue_Compare method compares the top two entries on the stack and stores an integer value describing the result in their place. If the first entry is less than the second then a negative integer is stored. If the first entry equals the second then a zero is stored. If the first entry is greater than the second then a positive integer is stored. If the second entry in the comparison is a string, then a string comparison is done; else an integer comparison is done. This method has no parameters.
This method itself has no return value.
The method DataQueue_Concatenate
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
void DataQueue_Concatenate(void);
|
The
DataQueue_Concatenate method forms a string by concatenating the top two entries in the data queue and stores the result string in their place. If either of the entries are not strings as stored, then that entry is converted to a string prior to the concatenation. The resulting entry on the queue is always a string. This method has no parameters.
This method itself has no return value.
The method DataQueue_Create
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
void DataQueue_Create(int queueSize);
|
The
DataQueue_Create method creates and initializes a new data queue storage area. If there is a data queue currently defined, then it becomes the backup queue. Its resources and data are not lost. Its parameter is:
Parameter | Description |
queueSize | specifies the number of bytes of storage to be allocated to the new data queue storage area. |
This method itself has no return value.
The method DataQueue_GetBoolean
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
int DataQueue_GetBoolean(void);
|
The
DataQueue_GetBoolean method gets a zero/non-zero boolean value from the data queue. It examines the current top of the queue. This method has no parameters.
If anything other than a string is stored at the current top of the queue, there then it is removed from the queue and its value is returned by this method. If there is a string value at the top of the queue, then if it is empty a zero is returned; else a one is returned.
The method DataQueue_GetInteger
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
int DataQueue_GetInteger(void);
|
The
DataQueue_GetInteger method gets an integer value from the top of the queue, doing conversions to integer if necessary. It examines the current top of the queue. If an integer value is stored there then it is removed from the queue and returned. If there is a string value at the top of the queue, then it is converted into integer form and returned; else zero is returned. This method has no parameters.
This method returns the value from the top of the queue in integer form.
The method DataQueue_GetString
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
int DataQueue_GetString(char* buffer,int nBuffer);
|
The
DataQueue_GetString method gets a gets string value from the data queue, performing a conversion to string if necessary. It examines the current top of the queue. If a string value is stored there then it is removed from the queue and copied into the return buffer. If there is an integer value at the top of the queue, then it is converted into string form into the return buffer. Its parameters are:
Parameter | Description |
buffer | Receives the string value that was at the top of the queue in null-terminated form. |
nBuffer | Specifies the size of the buffer return area. It is used to prevent overflows. |
This method returns the number of characters returned in the buffer. This will never be greater than the size of the buffer minus 1. If loss of long string information is a potential problem then use a combination of
DataQueue_TestTop and
DataQueue_PopString to receive long strings.
The method DataQueue_PopEngine
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
int* DataQueue_PopEngine(int* length,int* top);
|
The
DataQueue_PopEngine method pops an information vector from the data queue. It examines the current top of the queue. If a user information vector is stored there then it is conditionally removed from the queue and a pointer to its value is returned. Note that this pointer is valid until additional values are pushed onto the stack. If the value stored at the top of the queue is not of the specified type, then a system error occurs. Its parameters are:
Parameter | Description |
length | optionally returns the length of the vector, if it is not NULL. Users of this method will usually already know the length. |
top | optionally returns a pointer to the new top of the queue, if this parameter is not NULL. In some situations the user needs to examine the information at the top of the queue before deciding to remove it. In this case, this parameter is set to a non-NULL pointer. The new top returned can later be passed to the DataQueue_SetTop service when and if the actual removal is desired. |
The method returns a
void* pointer to the start of the information in the queue. This pointer is valid until additional information is pushed. In particular it remains valid during subsequent pops of information.
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
int* DataQueue_PopInformation(int* iType,int* length);
|
The
DataQueue_PopInformation method pops an information value from the data queue. It returns a pointer to the top information vector on the queue and removes it from the queue. Its parameters are:
Parameter | Description |
iType | returns the type code of the information, if non-NULL. |
length | returns the length of the information, if non-NULL. |
This method returns an integer pointer to the actual start of the information vector for the requested value or a NULL if there is no information currently in the queue.
The method DataQueue_PopInteger
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
int DataQueue_PopInteger(void);
|
The
DataQueue_PopInteger method pops an integer value from the data queue. This method has no parameters.
It examines the current top of the queue. If an integer value is stored there then it is removed from the queue and its value is returned. If there is not an integer value at the top of the queue, then a fatal "SYSTEM ERROR#10005: Integer not at stack top, top = %d" error occurs.
The method DataQueue_PopString
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
char* DataQueue_PopString(int* nString);
|
The
DataQueue_PopString method pops a string value from the data queue. It examines the current top of the queue. If a string value is stored there then it is removed from the queue and a pointer to its value is returned. Note that this pointer is valid until additional values are pushed into the queue. If there is not a string value at the top of the queue, then a fatal "SYSTEM ERROR#10006: String not at stack top, top type=%d" error occurs. The string itself is returned in null-terminated form -- i.e., as a valid C-string. Its parameters is:
Parameter | Description |
nString | returns the length of the string. If nString is NULL, then no length is returned and if the string is a empty it is returned as a NULL |
The method returns a pointer to the start of the string. This may be a simple null-string,
The method DataQueue_PushEngine
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
int* DataQueue_PushEngine(int* information,int length);
|
The
DataQueue_PushEngine method pushes an arbitrary engine information vector into the data queue along with its length and type marker. Note that any variable length information may be stored using this method. It merely does a binary copy of the data. Note that the data queue is word aligned so no packing or unpacking is necessary to access its value directly from queue storage. Its parameters are:
Parameter | Description |
information | contains the vector to be stored in the queue. There are cases where it is convenient to allocate the space for the vector and then to copy values into that space. In this case, this parameter may be NULL. |
length | Specifies the length of the information vector expressed in words. |
After this method executes the top of the queue looks as follows:
Word | Description of content |
top | REP_ENGINE |
top-1 | length |
top-- | information |
This method returns a pointer to the start of the information. This pointer is valid until this unit of information is removed from the queue. If there is not enough room to store the vector then a fatal "SYSTEM ERROR#10004: Data queue stack overflow" error occurs.
The method DataQueue_PushInteger
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
void DataQueue_PushInteger(int iValue);
|
The
DataQueue_PushInteger method pushes an integer value into the data queue along with its length (1) and its type marker (REP_SHORT). The only error checked by this method is whether there is sufficient room in the queue for the new entry. If there is not, this method does a fatal SYSTEM ERROR#10001: Integer stack overflow" error exit. Its parameter is:
Parameter | Description |
iValue | Specifies the actual integer value. |
After this method executes the top of the queue looks as follows:
Word | Description of content |
top | REP_SHORT |
top-1 | 1 |
top-2 | iValue |
This method itself has no return value.
The method DataQueue_PushString
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
char* DataQueue_PushString(char* string,int nString);
|
The
DataQueue_PushString method pushes a string value into the data queue, preceded by its length in characters and followed by a null-byte. That record is then followed by its record length (nString/sizeof(int)+2) and its type marker (REP_FSTRING). The only error checked by this method is whether there is sufficient room in the queue for the new entry. If there is not, this method does a fatal "SYSTEM ERROR#10003: String stack overflow--size=%d top=%d nString=%d" exit. Its parameters are:
Parameter | Description |
string | Contains the actual string to the stored. There are cases where it is convenient to allocate the space for the string and then to copy values into that space. In this case this parameter may be NULL. |
nString | Specifies the length of the string in characters. Great care must be taken not to change any content in the queue storage area not allocated to this string via this parameter. |
After this method executes the top of the queue looks as follows:
Word | Description of content |
top | REP_FSTRING |
top-1 | (nString / sizeof(int)) + 2 |
top-- | nstring,string,'\0' |
The method returns a pointer to the string itself within the queue.
The method DataQueue_SetBottom
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
int DataQueue_SetBottom(void);
|
The
DataQueue_SetBotton method sets the current queue bottom. It marks the current spot in the queue as the current bottom. Any attempt to pop a value from the queue will fail until this mark is cleared. This method is needed to block any interference between the recursive engines using it, while allowing the processing of calls with a variable number of arguments. This method has no parameters. If there is no room for the bottom mark this method does a fatal "SYSTEM ERROR#10008: Bottom mark stack overflow" exit.
This method returns the integer offset of the mark in the queue.
The method DataQueue_SetTop
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
void DataQueue_SetTop(int top)
|
The
DataQueue_SetTop method sets the current queue top. This method should only be used after a recent use of a conditional Pop method which supplied the parameter value. Its parameter is:
Parameter | Description |
top | Specifies the new value of the top of the queue. It must be a value received from a conditional Pop method. |
This method has no return value.
The method DataQueue_TestTop
Prototype Code Block |
---|
language | cpp |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
|
int DataQueue_TestTop(void)
|
The
DataQueue_TestTop method tests the status of the top of the data queue. It examines the current top of the queue. This method has no parameters.
This method returns the binary representation code of the data item stored there. If there is a bottom mark at the top, then a zero is returned. If the queue is empty then a -1 is returned.