示例#1
0
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;
		
}
示例#2
0
// Check the pipe to see if it's ready, ie... is gnash connected yet ?
bool
GnashPluginScriptObject::checkPipe()
{
    return checkPipe(_sockfds[WRITEFD]);
}