getObjByVnum( int vnum ) {
bucket = vnum % MAX_KEY_HASH;
iterate over obj_index_hash[bucket] as obj
return obj if obj.vnum == vnum
}
getObjByVnum( int vnum ) {
iterate over obj_index_list as obj
return obj if obj.vnum == vnum
}
#!/usr/bin/ruby
MAX_KEY_HASH = 1024
obj_index_hash = Array.new(MAX_KEY_HASH) { Array.new }
1.upto(30000) do |i|
bucket = i % MAX_KEY_HASH
obj_index_hash[bucket].push i
end
puts "Bucket 2"
p obj_index_hash[2]
puts "Bucket 5"
p obj_index_hash[5]
Bucket 2
[2, 1026, 2050, 3074, 4098, 5122, 6146, 7170, 8194, 9218, 10242, 11266, 12290, 13314, 14338, 15362, 16386, 17410, 18434, 19458, 20482, 21506, 22530, 23554, 24578, 25602, 26626, 27650, 28674, 29698]
Bucket 5
[5, 1029, 2053, 3077, 4101, 5125, 6149, 7173, 8197, 9221, 10245, 11269, 12293, 13317, 14341, 15365, 16389, 17413, 18437, 19461, 20485, 21509, 22533, 23557, 24581, 25605, 26629, 27653, 28677, 29701]
ROOM_INDEX_DATA * room_index[MAX_VNUM];
get_obj_index(int vnum)
{
if (vnum <= 0 || vnum >= MAX_VNUM)
{
return NULL;
}
return room_index[vnum];
}
I believe the MAX_KEY_HASH is 1024.
So if i had a vnum of 3001, why would i want the remainder of if i divided it by 1024?
Obviously I'm missing something :redface:
Would someone mind explaining this in detail?
Thanks.