Defines | |
| #define | ur_ctxCell(c, n) ((c)->ptr.cell + n) | 
| Get pointer of UCell in context by index.  | |
Functions | |
| UIndex | ur_makeContext (UThread *ut, int size) | 
| Generate and initialize a single context.   | |
| UBuffer * | ur_makeContextCell (UThread *ut, int size, UCell *cell) | 
| Generate a single context and set cell to reference it.   | |
| void | ur_ctxReserve (UBuffer *buf, int size) | 
| Allocates enough memory to hold size words.   | |
| UBuffer * | ur_ctxClone (UThread *ut, const UBuffer *src, UCell *cell) | 
| Clone a new context and set cell to reference it.   | |
| UBuffer * | ur_ctxMirror (UThread *ut, const UBuffer *src, UCell *cell) | 
| Create a shallow copy of a context and set cell to reference the new context.   | |
| void | ur_ctxSetWords (UBuffer *ctx, const UCell *it, const UCell *end) | 
| Add the set-word! values in a series of cells to the words in a context.   | |
| void | ur_ctxInit (UBuffer *buf, int size) | 
| Initialize context buffer.   | |
| void | ur_ctxFree (UBuffer *buf) | 
| Free context data.   | |
| int | ur_atomsSearch (const UAtomEntry *entries, int count, UAtom atom) | 
| Find an atom in a UAtomEntry table using a binary search.   | |
| int | ur_ctxLookupNoSort (const UBuffer *ctx, UAtom atom) | 
| Find word in context by atom.   | |
| int | ur_ctxAppendWord (UBuffer *ctx, UAtom atom) | 
| Append word to context.   | |
| int | ur_ctxAddWordI (UBuffer *ctx, UAtom atom) | 
| Add word to context if it does not already exist.   | |
| UCell * | ur_ctxAddWord (UBuffer *ctx, UAtom atom) | 
| Similar to ur_ctxAddWordI(), but safely returns the cell pointer.   | |
| void | ur_atomsSort (UAtomEntry *entries, int low, int high) | 
| Perform quicksort on UAtomEntry table.   | |
| UBuffer * | ur_ctxSort (UBuffer *ctx) | 
| Sort the internal context search table so ur_ctxLookup() can be used.   | |
| const UBuffer * | ur_sortedContext (UThread *ut, const UCell *cell) | 
| Get context and make sure it is ready for ur_ctxLookup().   | |
| int | ur_ctxLookup (const UBuffer *ctx, UAtom atom) | 
| Find word in context by atom.   | |
| void | ur_bindCells (UThread *ut, UCell *it, UCell *end, const UBindTarget *bt) | 
| Bind an array of cells to a target.   | |
| void | ur_bind (UThread *ut, UBuffer *blk, const UBuffer *ctx, int bindType) | 
| Bind block to context.   | |
| void | ur_infuse (UThread *ut, UCell *it, UCell *end, const UBuffer *ctx) | 
| Replace words in cells with their values from a context.   | |
| int ur_atomsSearch | ( | const UAtomEntry * | entries, | |
| int | count, | |||
| UAtom | atom | |||
| ) | 
Find an atom in a UAtomEntry table using a binary search.
The table must have been previously sorted with ur_atomsSort().
| void ur_atomsSort | ( | UAtomEntry * | entries, | |
| int | low, | |||
| int | high | |||
| ) | 
Perform quicksort on UAtomEntry table.
Pass low of 0 and high of (count - 1) to sort the entire table.
| entries | Array of initialized UAtomEntry structs. | |
| low | First entry in sort partition. | |
| high | Last entry in sort partition. | 
Bind block to context.
This recursively binds all sub-blocks.
| blk | Block to bind. | |
| ctx | Context. This may be a stand-alone context outside of any dataStore. | |
| bindType | UR_BIND_THREAD, UR_BIND_ENV, etc. | 
| void ur_bindCells | ( | UThread * | ut, | |
| UCell * | it, | |||
| UCell * | end, | |||
| const UBindTarget * | bt | |||
| ) | 
Bind an array of cells to a target.
This recursively binds all blocks in the range of cells.
| it | First cell. | |
| end | End of cell array. | |
| bt | Bind target. | 
Similar to ur_ctxAddWordI(), but safely returns the cell pointer.
| int ur_ctxAddWordI | ( | UBuffer * | ctx, | |
| UAtom | atom | |||
| ) | 
Add word to context if it does not already exist.
If added, the word is initialized as unset.
Note that the ctx->ptr may be changed by this function.
| int ur_ctxAppendWord | ( | UBuffer * | ctx, | |
| UAtom | atom | |||
| ) | 
Append word to context.
This should only be called if the word is known to not already exist in the context.
The new word is initialized as unset.
Clone a new context and set cell to reference it.
| src | Context to copy. | |
| cell | Cell to initialize. | 
| void ur_ctxFree | ( | UBuffer * | buf | ) | 
Free context data.
buf->ptr and buf->used are set to zero.
| void ur_ctxInit | ( | UBuffer * | buf, | |
| int | size | |||
| ) | 
Initialize context buffer.
| size | Number of words to reserve. | 
| int ur_ctxLookup | ( | const UBuffer * | ctx, | |
| UAtom | atom | |||
| ) | 
Find word in context by atom.
The internal context search table must sorted with ur_ctxSort() or ur_sortedContext() before ur_ctxLookup is called.
| ctx | Initialized and sorted context buffer. | |
| atom | Atom of word to find. | 
| int ur_ctxLookupNoSort | ( | const UBuffer * | ctx, | |
| UAtom | atom | |||
| ) | 
Find word in context by atom.
If the context is not sorted then a linear search will be done.
| cxt | Initialized context which has at least one word. | |
| atom | Atom of word to find. | 
Create a shallow copy of a context and set cell to reference the new context.
No binding is done, so any blocks remain bound to the source context.
| src | Context to copy. | |
| cell | Cell to initialize. | 
| void ur_ctxReserve | ( | UBuffer * | buf, | |
| int | size | |||
| ) | 
Allocates enough memory to hold size words.
buf->used is not changed.
| buf | Initialized context buffer. | |
| size | Number of words to reserve. | 
Add the set-word! values in a series of cells to the words in a context.
| ctx | Destination context. | |
| it | Start of cells. | |
| end | End of cells. | 
Sort the internal context search table so ur_ctxLookup() can be used.
If the context is already sorted then nothing is done. Each time new words are appended to the context it will become un-sorted.
| ctx | Initialized context buffer. | 
Replace words in cells with their values from a context.
This recursively infuses all sub-blocks.
Unlike bind, this only modifies UT_WORD cells in UT_BLOCK or UT_PAREN slices.
| bi | Cells to infuse. | |
| ctx | Context. | 
| UIndex ur_makeContext | ( | UThread * | ut, | |
| int | size | |||
| ) | 
Generate and initialize a single context.
If you need multiple buffers then ur_genBuffers() should be used.
| size | Number of words to reserve. | 
Generate a single context and set cell to reference it.
If you need multiple buffers then ur_genBuffers() should be used.
| size | Number of words to reserve. | |
| cell | Cell to initialize. | 
Get context and make sure it is ready for ur_ctxLookup().
If the context is shared and has not been sorted, then an error is generated with ur_error() and zero is returned.
| cell | Valid context cell. |