static void *hashtest(void *data) { int my_els_removed = 0; int my_els_added = 0; int my_els_lookedup = 0; int my_els_found = 0; int my_els_traversals = 0; int my_testno = testno++; int its; /* data will be a random number == use as a seed for random numbers */ unsigned long seed = (unsigned long)data; printf("hashtest thread created... test beginning\n"); /* main test routine-- a global hashtab exists, pound it like crazy */ for(its=0;its<100000;its++) { void *seed2 = &seed; int op = my_rand(0,100, seed2); if (op<60) { my_els_lookedup++; #ifdef DEBUG printf("%d[%d]: LOOKUP\n", my_testno, its); #endif if ((my_els_lookedup%1000)==0) { printf("."); fflush(stdout); } if (lookup_element(seed2)) my_els_found++; } else if (op < 61) { /* make this 61 and it'll take 16 minutes to run */ #ifdef DEBUG printf("%d[%d]: TRAVERSE\n", my_testno, its); #endif traverse_elements(); my_els_traversals++; } else if (op < 80) { #ifdef DEBUG printf("%d[%d]: REMOVE\n", my_testno, its); #endif if (del_element(seed2)) my_els_removed++; } else { my_els_added++; #ifdef DEBUG printf("%d[%d]: ADD\n", my_testno, its); #endif add_element(); } } printf("\nhashtest thread %d exiting.... lookups=%d/%d, added=%d, removed=%d, traversals=%d;\n", my_testno, my_els_found, my_els_lookedup, my_els_added, my_els_removed, my_els_traversals); printf("\ntotals..................... lookups=%d/%d, added=%d, removed=%d; traversals=%d\n", els_found, els_lookedup, els_added, els_removed, els_traversals); pthread_exit(0); return NULL; }
Exec_stat MCVariableValue::append_element(MCExecPoint& ep, const MCString& key) { Exec_stat t_stat; MCVariableValue *t_value; t_stat = lookup_element(ep, key, t_value); if (t_stat == ES_NORMAL) t_value -> append(ep); return t_stat; }