![]() |
Boron 2.1.0
|
Blocks are a series of UCells. More...
Macros | |
| #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. | |
| UStatus | 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. | |
| void | ur_blkCollectType (UThread *ut, const UCell *blkCell, uint32_t typeMask, UBuffer *dest, int unique) |
| Find all values of a certain type and append them to another block. | |
Blocks are a series of UCells.
Append cells to block.
| buf | Initialized block buffer. |
| cells | Cells to copy. |
| count | Number of cells to copy. |
Add cell to end of block.
Make deep copy of block.
| blkN | Buffer id of block to clone. |
| void ur_blkCollectType | ( | UThread * | ut, |
| const UCell * | blkCell, | ||
| uint32_t | typeMask, | ||
| UBuffer * | dest, | ||
| int | unique ) |
Find all values of a certain type and append them to another block.
| blkCell | Cell of block or paren to recursively search. |
| typeMask | Bit mask of datatypes to collect. |
| dest | Matching values are copied to this block buffer. |
| unique | Only add equal values once to dest. |
| 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.
If the UBlockIter::buf pointer is not needed it is recommended to use ur_blockIt() instead.
| 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. |
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. |