int cutstock::processRequest(vector<int> & requests, pipeStock & state) { cout << "processing remaining requests\n"; printvec(requests); cout << "at state\n"; printdvec(state); // static int memHit=0; if (requests.empty()) return state.size(); int nextReq=requests.back(); requests.pop_back(); set<int> numPipes; for (int i=0; i<state.size()+1; i++) { if (i == state.size() || checkPipe(state[i], nextReq)) { pipeStock newState=state; vector<int> newReq=requests; if (i == state.size()) { pipe p; newState.push_back(p); } newState[i].push_back(nextReq); int stocks; //search memory if (m.find(mapIndex(newState)) != m.end()) { stocks=m.find(mapIndex(newState))->second; memHit++; } else { //if not found in memory, go through recursion stocks=processRequest(newReq, newState); //record it in memory m[mapIndex(newState)]=stocks; } numPipes.insert(stocks); // numPipes.insert(processRequest(newReq, newState)); } } set<int>::iterator it=numPipes.begin(); return *it; }
// Check the pipe to see if it's ready, ie... is gnash connected yet ? bool GnashPluginScriptObject::checkPipe() { return checkPipe(_sockfds[WRITEFD]); }