![]() |
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. |