mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 16:30:41 +00:00
Improve performance of hash (for use as dictionary keys)
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@21691 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
198dde82bd
commit
4c7e6af282
4 changed files with 66 additions and 3 deletions
|
@ -1,8 +1,14 @@
|
||||||
|
2005-08-31 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* Source/NSNumber.m: Improve poor hash function.
|
||||||
|
* Source/NSConcreteNumber.m: Improve poor hash function.
|
||||||
|
* Testing/benchmark.m: Add some NSNumber tests.
|
||||||
|
|
||||||
2005-08-30 Saso Kiselkov <diablos@manga.sk>
|
2005-08-30 Saso Kiselkov <diablos@manga.sk>
|
||||||
|
|
||||||
* Headers/Foundation/NSSortDescriptor.h, Source/NSSortDescriptor.m:
|
* Headers/Foundation/NSSortDescriptor.h, Source/NSSortDescriptor.m:
|
||||||
New files
|
New files
|
||||||
* Headesr/Foundation/Foundation.h, Source/GNUmakefile: Add them to
|
* Headers/Foundation/Foundation.h, Source/GNUmakefile: Add them to
|
||||||
list.
|
list.
|
||||||
|
|
||||||
2005-08-25 Richard Frith-Macdonald <rfm@gnu.org>
|
2005-08-25 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
|
@ -121,7 +121,7 @@
|
||||||
val.d = [self doubleValue];
|
val.d = [self doubleValue];
|
||||||
for (i = 0; i < sizeof(double); i++)
|
for (i = 0; i < sizeof(double); i++)
|
||||||
{
|
{
|
||||||
hash += val.c[i];
|
hash = (hash << 5) + hash + val.c[i];
|
||||||
}
|
}
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2382,7 +2382,7 @@ static Class doubleNumberClass;
|
||||||
val.d = [self doubleValue];
|
val.d = [self doubleValue];
|
||||||
for (i = 0; i < sizeof(double); i++)
|
for (i = 0; i < sizeof(double); i++)
|
||||||
{
|
{
|
||||||
hash += val.c[i];
|
hash = (hash << 5) + hash + val.c[i];
|
||||||
}
|
}
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
|
@ -366,6 +366,62 @@ bench_dict()
|
||||||
AUTO_END;
|
AUTO_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bench_number()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
NSMutableDictionary *dict;
|
||||||
|
NSNumber *n[MAX_COUNT*10];
|
||||||
|
|
||||||
|
AUTO_START;
|
||||||
|
|
||||||
|
printf("NSNumber\n");
|
||||||
|
|
||||||
|
START_TIMER;
|
||||||
|
for (i = 0; i < MAX_COUNT*10; i++)
|
||||||
|
{
|
||||||
|
n[i] = [NSNumber numberWithInt: i];
|
||||||
|
}
|
||||||
|
END_TIMER;
|
||||||
|
PRINT_TIMER("NSNumber (creation) \t\t");
|
||||||
|
|
||||||
|
START_TIMER;
|
||||||
|
for (i = 0; i < MAX_COUNT; i++)
|
||||||
|
{
|
||||||
|
[n[i] hash];
|
||||||
|
}
|
||||||
|
END_TIMER;
|
||||||
|
PRINT_TIMER("NSNumber (hash) \t\t");
|
||||||
|
|
||||||
|
dict = [NSMutableDictionary dictionaryWithCapacity: MAX_COUNT];
|
||||||
|
START_TIMER;
|
||||||
|
for (i = 0; i < MAX_COUNT*10; i++)
|
||||||
|
{
|
||||||
|
[dict setObject: n[i] forKey: n[i]];
|
||||||
|
}
|
||||||
|
END_TIMER;
|
||||||
|
PRINT_TIMER("NSNumber (dictionary setObject:) \t\t");
|
||||||
|
|
||||||
|
START_TIMER;
|
||||||
|
for (i = 1; i < MAX_COUNT; i++)
|
||||||
|
{
|
||||||
|
[n[i] isEqual: n[i-1]];
|
||||||
|
}
|
||||||
|
END_TIMER;
|
||||||
|
PRINT_TIMER("NSNumber (isEqual:)\t\t");
|
||||||
|
|
||||||
|
START_TIMER;
|
||||||
|
for (i = 0; i < MAX_COUNT; i++)
|
||||||
|
{
|
||||||
|
[n[i] copyWithZone: NSDefaultMallocZone()];
|
||||||
|
}
|
||||||
|
END_TIMER;
|
||||||
|
PRINT_TIMER("NSNumber (copy)\t\t");
|
||||||
|
|
||||||
|
AUTO_END;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
bench_str()
|
bench_str()
|
||||||
{
|
{
|
||||||
|
@ -632,6 +688,7 @@ int main(int argc, char *argv[], char **env)
|
||||||
pool = [NSAutoreleasePool new];
|
pool = [NSAutoreleasePool new];
|
||||||
printf(" Test \t\t\t\t time (sec) \t index\n");
|
printf(" Test \t\t\t\t time (sec) \t index\n");
|
||||||
bench_object();
|
bench_object();
|
||||||
|
bench_number();
|
||||||
bench_str();
|
bench_str();
|
||||||
bench_array();
|
bench_array();
|
||||||
bench_dict();
|
bench_dict();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue