18 #include "heap_priv.h"
19 #include <drizzled/error_t.h>
28 int heap_rrnd(
register HP_INFO *info,
unsigned char *record,
unsigned char *pos)
33 if (!(info->current_ptr= pos))
36 return(errno= drizzled::HA_ERR_END_OF_FILE);
38 if (get_chunk_status(&share->recordspace, info->current_ptr) != CHUNK_STATUS_ACTIVE)
41 info->update= HA_STATE_PREV_FOUND | HA_STATE_NEXT_FOUND;
42 return(errno= drizzled::HA_ERR_RECORD_DELETED);
44 info->update=HA_STATE_PREV_FOUND | HA_STATE_NEXT_FOUND | HA_STATE_AKTIV;
45 hp_extract_record(share, record, info->current_ptr);
46 info->current_hash_ptr=0;
51 #ifdef WANT_OLD_HEAP_VERSION
61 int heap_rrnd_old(
register HP_INFO *info,
unsigned char *record, uint32_t pos)
66 if (pos == (uint32_t) -1)
68 pos= ++info->current_record;
69 if (pos % share->block.records_in_block &&
70 pos < share->used_chunk_count+share->deleted_chunk_count &&
71 (info->update & HA_STATE_PREV_FOUND))
73 info->current_ptr+=share->block.recbufferlen;
78 info->current_record=pos;
80 if (pos >= share->used_chunk_count+share->deleted_chunk_count)
83 return(errno= HA_ERR_END_OF_FILE);
87 hp_find_record(info, pos);
90 if (!info->current_ptr[share->reclength])
92 info->update= HA_STATE_PREV_FOUND | HA_STATE_NEXT_FOUND;
93 return(errno=HA_ERR_RECORD_DELETED);
95 info->update=HA_STATE_PREV_FOUND | HA_STATE_NEXT_FOUND | HA_STATE_AKTIV;
96 memcpy(record,info->current_ptr,(
size_t) share->reclength);
97 info->current_hash_ptr=0;