void GMStandard::multiply ( const SetType & rowSet, const SetType & columnSet, NICE::Vector & y, const NICE::Vector & x) const { if ( x.size() != columnSet.size() ) fthrow(Exception, "Size of the column set is different from the size of the given input vector: " << columnSet.size() << " vs " << x.size()); y.resize( rowSet.size() ); // memory inefficient Matrix Asub ( rowSet.size(), columnSet.size() ); int ii = 0; for ( SetType::const_iterator i = rowSet.begin(); i != rowSet.end(); i++,ii++ ) { int jj = 0; for ( SetType::const_iterator j = columnSet.begin(); j != columnSet.end(); j++,jj++ ) Asub ( ii, jj ) = A( *i, *j ); } y.multiply ( Asub, x ); }
void process_commands(std::string preface) { for (;;) try { std::string command = menu_prompt(preface); if (command == "i") { std::string e = ics::prompt_string(preface+" Enter element to add"); std::cout << preface+" insert = " << s.insert(e) << std::endl; } else if (command == "I") { SetType s2(prompt_set(preface)); std::cout << " insert = " << s.insert(s2.abegin(),s2.aend()) << std::endl;; } else if (command == "e") { std::string e = ics::prompt_string(preface+" Enter element to erase"); std::cout << preface+" erase = " << s.erase(e) << std::endl; } else if (command == "E") { SetType s2(prompt_set(preface)); std::cout << " erase = " << s.erase(s2.abegin(),s2.aend()) << std::endl;; } else if (command == "x") s.clear(); else if (command == "R") { SetType s2(prompt_set(preface)); std::cout << " retain = " << s.retain(s2.abegin(),s2.aend()) << std::endl; } else if (command == "=") { SetType s2(prompt_set(preface)); s = s2; std::cout << " s now = " << s << std::endl; } else if (command == "m") std::cout << preface+" empty = " << s.empty(); else if (command == "s") std::cout << preface+" size = " << s.size() << std::endl; else if (command == "c") { std::string e = ics::prompt_string(preface+" Enter element to erase"); std::cout << preface+" contains = " << s.contains(e) << std::endl; } else if (command == "C") { SetType s2(prompt_set(preface)); std::cout << " contains = " << s.contains(s2.abegin(),s2.aend()) << std::endl; } else if (command == "<") std::cout << preface+" << = " << s.str() << std::endl; else if (command == "r") { std::cout << preface+" s == s = " << (s == s) << std::endl; std::cout << preface+" s != s = " << (s != s) << std::endl; std::cout << preface+" s <= s = " << (s <= s) << std::endl; std::cout << preface+" s < s = " << (s < s) << std::endl; std::cout << preface+" s > s = " << (s > s) << std::endl; std::cout << preface+" s >= s = " << (s >= s) << std::endl; SetType s2(prompt_set(preface)); std::cout << preface+" s = " << s << " ?? s2 = " << s2 << std::endl; std::cout << preface+" s == s2 = " << (s == s2) << std::endl; std::cout << preface+" s != s2 = " << (s != s2) << std::endl; std::cout << preface+" s <= s2 = " << (s <= s2) << std::endl; std::cout << preface+" s < s2 = " << (s < s2) << std::endl; std::cout << preface+" s > s2 = " << (s > s2) << std::endl; std::cout << preface+" s >= s2 = " << (s >= s2) << std::endl; } else if (command == "l") { std::ifstream in_set; ics::safe_open(in_set,preface+" Enter file name to read", "load.txt"); std::string e; while (getline(in_set,e)) s.insert(e); in_set.close(); } else if (command == "it") process_iterator_commands(s, "it: "+preface); else if (command == "q") break; else std::cout << preface+"\""+command+"\" is unknown command" << std::endl; } catch (ics::IcsError& e) { std::cout << preface+" " << e.what() << std::endl; } };