Defines | |
| #define | ur_blkFree ur_arrFree | 
| A block is a simple array.  | |
Functions | |
| UIndex | ur_makeBlock (UThread *ut, int size) | 
| Generate a single block of type UT_BLOCK.   | |
| UBuffer * | ur_makeBlockCell (UThread *ut, int type, int size, UCell *cell) | 
| Generate a single block and set cell to reference it.   | |
| void | ur_blkInit (UBuffer *buf, int type, int size) | 
| Initialize block buffer.   | |
| UCell * | ur_blkAppendNew (UBuffer *buf, int type) | 
| Add cell to end of block.   | |
| void | ur_blkAppendCells (UBuffer *buf, const UCell *cells, int count) | 
| Append cells to block.   | |
| void | ur_blkInsert (UBuffer *buf, UIndex it, const UCell *cells, int count) | 
| Insert cells into block.   | |
| void | ur_blkPush (UBuffer *buf, const UCell *cell) | 
| Copy cell to end of block.  | |
| UCell * | ur_blkPop (UBuffer *buf) | 
| Remove cell from end of block.   | |
| void | ur_blkSlice (UThread *ut, UBlockIter *bi, const UCell *cell) | 
| Set UBlockIter to block slice.   | |
| int | ur_blkSliceM (UThread *ut, UBlockIterM *bi, const UCell *cell) | 
| Set UBlockIterM to block slice.   | |
| UIndex | ur_blkClone (UThread *ut, UIndex blkN) | 
| Make deep copy of block.   | |
Append cells to block.
| buf | Initialized block buffer. | |
| cells | Cells to copy. | |
| count | Number of cells to copy. | 
Add cell to end of block.
| UIndex ur_blkClone | ( | UThread * | ut, | |
| UIndex | blkN | |||
| ) | 
Make deep copy of block.
| blkN | Buffer id of block to clone. | 
| void ur_blkInit | ( | UBuffer * | buf, | |
| int | type, | |||
| int | size | |||
| ) | 
Initialize block buffer.
| type | Buffer type (Normally UT_BLOCK). | |
| size | Number of cells to reserve. | 
Insert cells into block.
This performs a memcpy, so the source cells must not overlap the buf cells.
| buf | Initialized block buffer. | |
| it | Position in buf. | |
| cells | Cells to copy. | |
| count | Number of cells to copy. | 
Remove cell from end of block.
Set UBlockIter to block slice.
| bi | Iterator struct to fill. | |
| cell | Pointer to a valid block cell. | 
Set UBlockIterM to block slice.
If cell references a block in shared storage then an error is generated and UR_THROW is returned. Otherwise, bi is initialized. If the slice is empty then bi->it and bi->end are set to zero.
| bi | Iterator struct to fill. | |
| cell | Pointer to a valid block cell. | 
| UIndex ur_makeBlock | ( | UThread * | ut, | |
| int | size | |||
| ) | 
Generate a single block of type UT_BLOCK.
If you need multiple buffers then ur_genBuffers() should be used.
The caller must create a UCell for this block in a held block before the next ur_recycle() or else it will be garbage collected.
| size | Number of cells to reserve. | 
Generate a single block and set cell to reference it.
If you need multiple buffers then ur_genBuffers() should be used.
| type | Type (UT_BLOCK, UT_PAREN, etc.). | |
| size | Number of cells to reserve. | |
| cell | Cell to initialize. |