/////// File: RateTable.C /////// #include #include "RateTable.h" Rate RateTable::_table[] = { Rate ("Britan (Pound)", 0.5905), Rate ("Canada (Dollar)", 1.1802), Rate ("Germany (Mark)", 1.6760), Rate ("Italy (Lira)", 1233.50), Rate ("Japan (Yen)", 151.17), Rate ("Mexico (Peso)", 2827.01), Rate ("Spain (Peseta)", 104.15), Rate ("Taiwan (NT $)", 24.0) }; unsigned RateTable::_len = sizeof (RateTable::_table) / sizeof (Rate); // table lookup with binary search int RateTable::Lookup (char *cur) { int low = 0, high = _len - 1; int mid, test; while (low <= high) { mid = (high + low) / 2; test = strcmp (cur, _table[mid].GetName()); if (test == 0) { // found a match return (mid); } else if (test > 0) { low = mid + 1; } else { high = mid - 1; } } return (-1); // entry not on rate table } double RateTable::GetRate (char *cur) { int index = Lookup (cur); if (index > -1) { return (_table[index].GetRate()); } else { return (0.0); // no exchange rate } } int RateTable::SetRate (char *cur, double r) { int index = Lookup (cur); if (index > -1) { _table[index].SetRate (r); return (0); } else { return (-1); // lookup failed } } void RateTable::Display (char *cur) { int index = Lookup (cur); if (index > -1) { _table[index].Display(); } else { cout << cur << " not found" << endl; } } void RateTable::Display() { for (int i = 0; i < _len; i++) { _table[i].Display(); } }