--- parser3/src/include/pa_hash.h 2009/07/07 23:49:54 1.75 +++ parser3/src/include/pa_hash.h 2009/07/29 05:01:46 1.78 @@ -17,7 +17,7 @@ #ifndef PA_HASH_H #define PA_HASH_H -static const char * const IDENT_HASH_H="$Date: 2009/07/07 23:49:54 $"; +static const char * const IDENT_HASH_H="$Date: 2009/07/29 05:01:46 $"; #include "pa_memory.h" #include "pa_types.h" @@ -427,18 +427,28 @@ public: /// iterate over all pairs template void for_each(void callback(K, V, I), I info) const { +#ifdef HASH_ORDER + for(Pair *pair=first; pair; pair=pair->next) + callback(pair->key, pair->value, info); +#else Pair **ref=refs; for(int index=0; indexlink) callback(pair->key, pair->value, info); +#endif } /// iterate over all pairs template void for_each_ref(void callback(K, V&, I), I info) const { +#ifdef HASH_ORDER + for(Pair *pair=first; pair; pair=pair->next) + callback(pair->key, pair->value, info); +#else Pair **ref=refs; for(int index=0; indexlink) callback(pair->key, pair->value, info); +#endif } /// iterate over all pairs until condition becomes true, return that element @@ -835,18 +845,28 @@ public: /// iterate over all pairs template void for_each(void callback(K, V, I), I info) const { +#ifdef HASH_ORDER + for(Pair *pair=this->first; pair; pair=pair->next) + callback(pair->key, pair->value, info); +#else Pair **ref=this->refs; for(int index=0; indexallocated; index++) for(Pair *pair=*ref++; pair; pair=pair->link) callback(String::Body(pair->key, pair->code), pair->value, info); +#endif } /// iterate over all pairs template void for_each_ref(void callback(K, V&, I), I info) const { +#ifdef HASH_ORDER + for(Pair *pair=this->first; pair; pair=pair->next) + callback(pair->key, pair->value, info); +#else Pair **ref=this->refs; for(int index=0; indexallocated; index++) for(Pair *pair=*ref++; pair; pair=pair->link) callback(String::Body(pair->key, pair->code), pair->value, info); +#endif } /// iterate over all pairs until condition becomes true, return that element @@ -865,11 +885,11 @@ public: return V(0); } }; -#else +#else //HASH_CODE_CACHING template class HASH_STRING: public HASH{}; -#endif +#endif //HASH_CODE_CACHING #ifndef HASH_ORDER /// Auto-object used to temporarily substituting/removing string hash values