![]() |
Show Changes |
![]() |
Edit |
![]() |
|
![]() |
Recent Changes |
![]() |
Subscriptions |
![]() |
Lost and Found |
![]() |
Find References |
![]() |
Rename |
![]() |
Administration Page |
![]() |
Topic Locks |
Search |
History
3/17/2017 2:10:48 AM |
-120.188.7.142 |
1/19/2017 4:01:27 AM |
-202.93.230.29 |
10/11/2016 8:55:01 AM |
-116.100.60.23 |
10/10/2016 7:50:58 AM |
-42.115.47.226 |
9/1/2016 5:52:37 PM |
-82.161.238.106 |
![]() |
List all versions |
One of the most important concepts to understand in order to embed squirrel,is 'the virtual machine stack'.
The majority of Squirrel's API functions exchanges values with C/C++ through a stack of squirrel objects.
Squirrel objects are strings, integers, floats, tables, arrays etc...
To better understand take a look at the following code C
sq_pushfloat(v,1.5f); //pushes a float sq_pushroottable(v); //pushes the root table sq_pushstring(v,"I'm a string",-1); //pushed a string
and immagine that the result in Squirrel's stack would be something like this table
positive index | negative index | object |
3(top) | -1 | "I'm a string" |
2 | -2 | root table |
1 | -3 | 1.5 |
After a virtual machine is created(calling *sq_open()) the stack is empty.
positive index | negative index | object |
let's assume we want to create a global variable called test and set its value to 123(integer). This is done through the API function sq_createslot.
from the reference manual sq_createslot: pops a key and a value from the stack and performs a set operation on the table or class that is at position idx in the stack, if the slot does not exits it will be created.
sq_pushroottable(v); sq_pushstring(v,"test",-1); sq_pushinteger(v,123); sq_createslot(v,-3);
this is the equivalent of the following squirrel code
test <- 123;
step by step
given an empty stack
positive index | negative index | object |
sq_pushroottable(v);
pushes the root table that is the target object where we want to create the new slot
positive index | negative index | object |
1 | -1 | root table |
sq_pushstring(v,"test",-1);
pushes the name of the slot we want to create
positive index | negative index | object |
2 | -1 | "test" |
1 | -2 | root table |
sq_pushinteger(v,123);
pushes the value of the slot we want to create
positive index | negative index | object |
3 | -1 | 123 |
2 | -2 | "test" |
1 | -3 | root table |
sq_createslot(v,-3);
pops the value and the key and sets the object at position -3 (from the top of the stack) that is the root table we pushed.
positive index | agen index | object |
1 | -1 | root table |
as you can notice in the tabular representation of the stack, there are 2 sets of indexes;positive and negative. All API function that expect a stack index as parameter can be used by passing an absolute positive index from of the stack. 0 is an invalid index.
It can sound wierd, but the negative index is the most useful because allows to write context independent code.
TO BE CONTINUED
merangsang wanita | Health Jobs Australia | Airless Spray | obat perangsang