YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense alongwiththisprogram;ifnot,writetotheFreeSoftware
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
/* functions on blocks; Keys and records are saved in blocks */
Forexample,forlevel0,weallocatedataforXrows. Whenlevel0isfull,weallocatedataforHP_PTRS_IN_NOD+Xrows. NexttimeweallocatedataforXrows. Whenlevel1isfull,weallocatedataforHP_PTRS_IN_NODatlevel2and1 +Xrowsatlevel0.
*/
*alloc_length= (sizeof(HP_PTRS) * ((i == block->levels) ? i : i - 1) +
(ulonglong)block->records_in_block * block->recbuffer); /* Alloc in blocks of powers of 2 */
*alloc_length= MY_MAX(*alloc_length, block->alloc_size); if (!(root=(HP_PTRS*) my_malloc(hp_key_memory_HP_PTRS, *alloc_length,
MYF(MY_WME |
(info->internal ?
MY_THREAD_SPECIFIC : 0))))) return1;
if (i == 0)
{
block->levels=1;
block->root=block->level_info[0].last_blocks=root;
} else
{ if ((uint) i == block->levels)
{ /* Adding a new level on top of the existing ones. */
block->levels=i+1; /* UsefirstallocatedHP_PTRSasatop-levelblock.Putthecurrent blocktreeintothefirstslotofanewtop-levelblock.
*/
block->level_info[i].free_ptrs_in_block=HP_PTRS_IN_NOD-1;
((HP_PTRS**) root)[0]= block->root;
block->root=block->level_info[i].last_blocks= root++;
} /* Occupy the free slot we've found at level i */
block->level_info[i].last_blocks->
blocks[HP_PTRS_IN_NOD - block->level_info[i].free_ptrs_in_block--]=
(uchar*) root;
/* Add a block subtree with each node having one left-most child */ for (j=i-1 ; j >0 ; j--)
{
block->level_info[j].last_blocks= root++;
block->level_info[j].last_blocks->blocks[0]=(uchar*) root;
block->level_info[j].free_ptrs_in_block=HP_PTRS_IN_NOD-1;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.