SOM_Scope long SOMLINK Close(Bank *somSelf, Environment *ev, string name, long acct_type, long pin) { Account *temp; somf_TSetIterator *itr; somf_TPrimitiveLinkedList *l; int freed = 0; somf_TSet *setptr; string user_name; BankData *somThis = BankGetData(somSelf); BankMethodDebug("Bank","Close"); itr = new somf_TSetIterator; switch (acct_type) { case Account_CHECKING: setptr = somSelf->_get_check_acct_set(ev); itr->somfTSetIteratorInit(ev, setptr); break; case Account_SAVINGS: setptr = somSelf->_get_save_acct_set(ev); itr->somfTSetIteratorInit(ev, setptr); break; case Account_MF: setptr = somSelf->_get_mf_acct_set(ev); itr->somfTSetIteratorInit(ev, setptr); break; default: somPrintf (" bad account type\n"); return 9; } temp = (Account *) itr->somfFirst(ev); while (!((SOMDObject *)temp)->is_nil((SOMDObject *)temp,ev)) { user_name = temp->_get_user_name(ev); if (strcmp(name, user_name) == 0) { if (temp->_get_pin(ev) == pin) { if (setptr->somfRemove(ev, temp) != SOMF_NIL) return Account_OK; else return 9; } else return Account_BAD_PIN; } else temp = (Account *)itr->somfNext(ev); } return Account_NO_ACCT; }