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.
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_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.
Don't forget to release your SRP Stack handles. Always.