Closed Bazist closed 7 years ago
Works !
void testRange() { HArray ha; ha.init(26);
uint32 key1[] = {100, 200};
uint32 key2[] = {200, 300, 400};
uint32 key3[] = {200, 300, 500};
uint32 key4[] = {300, 400, 500, 600};
uint32 key5[] = {300, 500, 600};
uint32 key6[] = {300};
uint32 key7[] = {400, 500};
ha.insert(key1, sizeof(key1), 1);
ha.insert(key2, sizeof(key2), 2);
ha.insert(key3, sizeof(key3), 3);
ha.insert(key4, sizeof(key4), 4);
ha.insert(key5, sizeof(key5), 5);
ha.insert(key6, sizeof(key6), 6);
ha.insert(key7, sizeof(key7), 7);
HArrayPair* pairs = new HArrayPair[10];
uint32 count = ha.getKeysAndValuesByRange(pairs,
10,
key6,
8,
key2,
4);
for(uint32 i=0; i<count; i++)
{
printf("%u\n", pairs[i].Value);
}
}
Поиск по диапазону принимает указатель на ключи... но не принимает их длину. Таким образом, реально могут использоваться только ключи длиной в 32бита. 2хuint32 уже никак -- ибо мы не знаем, где ключ кончается:
`
include "stdafx.h"
include
include
include
include
include "HArrayInt.h"
include "HArrayVarRAM.h"
using namespace std;
uint32 totalHArrayTime = 0; uint32 totalDenseTime = 0; uint32 totalMapTime = 0; uint32 totalUnorderedMapTime = 0;
HArrayVarRAM ha;
ulong64 msclock() { return (ulong64)clock() * 1000 / CLOCKS_PER_SEC; //in ms }
uint32 key(const char c) { char key1 = new char[sizeof(uint32)]; memset(key1,0,sizeof(uint32)); strcpy(key1,c); return (uint32)(*key1); }
void search(const char msg, uint32 key1,uint32* key2) { HArrayFixPair pairs[32]; uint32 val = ha.getKeysAndValuesByRange(pairs,sizeof(pairs)/sizeof(HArrayFixPair),key1,key2); printf("%s %d\n",msg,val); for( int i=0; i<val; i++ ) { printf(" val %d = %d/%d\n",i,pairs[i].Key[0],pairs[i].Value);
} }
int main() { printf("Pointer size: %ld\n", sizeof(void*));
}; `
Тут передали указатели на ключ 22 и 23. Но код смотрит только на 100, так что и возвращает всё, что имеет 100 в первом сегменте`