Esempio n. 1
0
void connectionManager::releaseIfNotUsed(long inputTimeCoordinate, long connectionPinHeight, Pathfinder& pathfinder, bool checkInPoints)
{
	for(int boxType=0; boxType<2; boxType++)
	{
		std::set<size_t> toRelease;

		for(std::set<size_t>::iterator it = pool.toBeAvailable[boxType].begin();
				it != pool.toBeAvailable[boxType].end(); it++)
		{
			/*compute connection pin coordinates based on heuristic and depth*/
			int connNr = *it;
			pinpair connPins = getConnectionPinPair(connNr, inputTimeCoordinate, connectionPinHeight);

			printf("712: check conn %d @ coord %d\n", connNr, inputTimeCoordinate);

			bool isReleased = true;
			if(checkInPoints)
			{
				for(int i = 0; i < 2; i++)
				{
					Point* point = pathfinder.getOrCreatePoint(connPins.getPinDetail(i).coord[CIRCUITWIDTH],
							connPins.getPinDetail(i).coord[CIRCUITDEPTH],
							connPins.getPinDetail(i).coord[CIRCUITHEIGHT], false /*no boxes should exist in future*/);

					printf("712:         %s\n", connPins.getPinDetail(i).coord.toString(',').c_str());

					isReleased = isReleased && point->isFree();
				}
			}

			if(isReleased)
			{
				toRelease.insert(connNr);
			}
		}

		for(std::set<size_t>::iterator it = toRelease.begin();
					it != toRelease.end(); it++)
		{
			int connNr = *it;
			pool.releaseConnection(boxType, connNr);
		}
	}
}