MCPcopy Create free account
hub / github.com/RedisGraph/RedisGraph / DataBlock_AllocateItem

Function DataBlock_AllocateItem

src/util/datablock/datablock.c:179–201  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

177}
178
179void *DataBlock_AllocateItem(DataBlock *dataBlock, uint64_t *idx) {
180 // make sure we've got room for items
181 if(dataBlock->itemCount >= dataBlock->itemCap) {
182 // allocate an additional block
183 _DataBlock_AddBlocks(dataBlock, 1);
184 }
185 ASSERT(dataBlock->itemCap > dataBlock->itemCount);
186
187 // get index into which to store item,
188 // prefer reusing free indicies
189 uint pos = dataBlock->itemCount;
190 if(array_len(dataBlock->deletedIdx) > 0) {
191 pos = array_pop(dataBlock->deletedIdx);
192 }
193 dataBlock->itemCount++;
194
195 if(idx) *idx = pos;
196
197 DataBlockItemHeader *item_header = DataBlock_GetItemHeader(dataBlock, pos);
198 MARK_HEADER_AS_NOT_DELETED(item_header);
199
200 return ITEM_DATA(item_header);
201}
202
203void DataBlock_DeleteItem(DataBlock *dataBlock, uint64_t idx) {
204 ASSERT(dataBlock != NULL);

Callers 6

ResultSet_AddRecordFunction · 0.85
Graph_CreateNodeFunction · 0.85
Graph_CreateEdgeFunction · 0.85
test_dataBlockAddItemFunction · 0.85
test_dataBlockScanFunction · 0.85
test_dataBlockRemoveItemFunction · 0.85

Calls 3

_DataBlock_AddBlocksFunction · 0.85
array_lenFunction · 0.85
DataBlock_GetItemHeaderFunction · 0.85

Tested by 3

test_dataBlockAddItemFunction · 0.68
test_dataBlockScanFunction · 0.68
test_dataBlockRemoveItemFunction · 0.68