#include #include "RateTable.h" Rate RateTable::table[] = { RATES }; unsigned RateTable::len = sizeof(RateTable::table)/sizeof(Rate); double RateTable::rate(char *cur) { int index = lookup(cur); if ( index > -1 ) return( table[index].amount() ); else return(0.0); // no exchange rate } void RateTable::display(char *cur) { int index = lookup(cur); if ( index > -1 ) table[index].display(); else cout << "Entry " << cur << " not found.\n"; } void RateTable::display() { cout << "len =" << len << endl; for (int i = 0; i < len; i++) table[i].display(); } // table lookup with binary search int RateTable::lookup(char *cur) { int low = 0, high = len-1, mid, test; while (low <= high) { mid = (high + low)/2; test = strcmp(cur, table[mid].id()); if ( test == 0 ) return( mid ); else if ( test > 0 ) low = mid + 1; else high = mid - 1; } return(-1); // entry not on rate table } int RateTable::new_rate(char *cur, double r) { int index = lookup(cur); if ( index > -1 ) { table[index].rate(r); return(0); } else return(-1); // failed }