- if ((max_assoc_size!=0)&&
- (remember_strategy!=remember_strategies::delete_never)&&
- (size()>=max_assoc_size)) {
- // table is full, we must delete an older entry
- GINAC_ASSERT(size()>0); // there must be at least one entry
-
- switch (remember_strategy) {
- case remember_strategies::delete_cyclic:
- // delete oldest entry (first in list)
- erase(begin());
- break;
- case remember_strategies::delete_lru:
- {
- // delete least recently used entry
- iterator it=begin();
- iterator lowest_access_it=it;
- unsigned long lowest_access=it->get_last_access();
- ++it;
- while (it!=end()) {
- if (it->get_last_access()<lowest_access) {
- lowest_access=it->get_last_access();
- lowest_access_it=it;
- }
- ++it;
- }
- erase(lowest_access_it);
- }
- break;
- case remember_strategies::delete_lfu:
- {
- // delete least frequently used entry
- iterator it=begin();
- iterator lowest_hits_it=it;
- unsigned lowest_hits=it->get_successful_hits();
- ++it;
- while (it!=end()) {
- if (it->get_successful_hits()<lowest_hits) {
- lowest_hits=it->get_successful_hits();
- lowest_hits_it=it;
- }
- ++it;
- }
- erase(lowest_hits_it);
- }
- break;
- default:
- throw(std::logic_error("remember_table_list::add_entry(): invalid remember_strategy"));
+ if ((max_assoc_size!=0) &&
+ (remember_strategy!=remember_strategies::delete_never) &&
+ (size()>=max_assoc_size)) {
+ // table is full, we must delete an older entry
+ GINAC_ASSERT(size()>0); // there must be at least one entry
+
+ switch (remember_strategy) {
+ case remember_strategies::delete_cyclic: {
+ // delete oldest entry (first in list)
+ erase(begin());
+ break;
+ }
+ case remember_strategies::delete_lru: {
+ // delete least recently used entry
+ iterator it = begin();
+ iterator lowest_access_it = it;
+ unsigned long lowest_access = (*it).get_last_access();
+ ++it;
+ while (it!=end()) {
+ if ((*it).get_last_access()<lowest_access) {
+ lowest_access = (*it).get_last_access();
+ lowest_access_it = it;
+ }
+ ++it;
+ }
+ erase(lowest_access_it);
+ break;
+ }
+ case remember_strategies::delete_lfu: {
+ // delete least frequently used entry
+ iterator it = begin();
+ iterator lowest_hits_it = it;
+ unsigned lowest_hits = (*it).get_successful_hits();
+ ++it;
+ while (it!=end()) {
+ if ((*it).get_successful_hits()<lowest_hits) {
+ lowest_hits = (*it).get_successful_hits();
+ lowest_hits_it = it;
+ }
+ ++it;
+ }
+ erase(lowest_hits_it);
+ break;
+ }
+ default:
+ throw(std::logic_error("remember_table_list::add_entry(): invalid remember_strategy"));