Added in 2.1.10
SRP Stacks are simple data structures useful for nested or recursive operations.
| Method | Description |
|---|---|
| Clear | Removes all values from an SRP Stack. |
| Create | Creates an SRP Stack. |
| Count | Gets the number of elements in the stack. |
| Peek | Returns the value at the top of an SRP Stack without removing it. |
| Pop | Removes and returns the value at the top of an SRP Stack. |
| Push | Inserts a value at the top of an SRP Stack. |
| Release | Releases the handle to an SRP Stack. |
Stack Defined
A stack is a last-in-first-out (LIFO) data structure. Values are pushed onto the top and popped off in reverse order.
When to Use SRP_Stack
Stacks are useful when you need to temporarily save some information before doing an operation and then restoring that information when you are done. A common use case in OpenInsight is the @Record, @Dict, and @ID global system variables. If we use these variables without preserving their existing values, we risk destroying other routines using them. A common practice should be to save these onto a stack. Of course, there are routines built into OI for this specific case, but this is still a good way to demonstrate the usefulness of SRP_Stack.
// Put the system variables onto the stack
SRP_Stack("Push", Handle, @Record)
SRP_Stack("Push", Handle, @Dict)
SRP_Stack("Push", Handle, @ID)
// Now we can use them in our own code
Open "SomeTable" to hTable then
Open "DICT.SomeTable" to @Dict then
@ID = "SomeKey"
Read @Record from hTable, @ID then
// Do stuff
end
end
end
// Restore the system variables, but make sure to do it in the correct order
@ID = SRP_Stack("Pop", Handle)
@Dict = SRP_Stack("Pop", Handle)
@Record = SRP_Stack("Pop", Handle)
This, of course, is not the only use case. Anytime you have nested operations that use the same global variables, you'll want to use a stack to protect them.
SRP Stacks are SRP Lists
SRP_Stack is a wrapper around SRP_List, so you can use an SRP_Stack handle with SRP_List. So, even though SRP_Stack doesn't have a GetVariable routine, you can use SRP_List's.
Remember
Don't forget to release your SRP Stack handles. Always.