int NzGuillotineBinPack::ScoreByHeuristic(int width, int height, const NzRectui& freeRect, FreeRectChoiceHeuristic rectChoice)
{
	switch (rectChoice)
	{
		case RectBestAreaFit:
			return ScoreBestAreaFit(width, height, freeRect);

		case RectBestLongSideFit:
			return ScoreBestLongSideFit(width, height, freeRect);

		case RectBestShortSideFit:
			return ScoreBestShortSideFit(width, height, freeRect);

		case RectWorstAreaFit:
			return ScoreWorstAreaFit(width, height, freeRect);

		case RectWorstLongSideFit:
			return ScoreWorstLongSideFit(width, height, freeRect);

		case RectWorstShortSideFit:
			return ScoreWorstShortSideFit(width, height, freeRect);
	}

	NazaraError("Rect choice heuristic out of enum (0x" + NzString::Number(rectChoice, 16) + ')');
	return std::numeric_limits<int>::max();
}
/// Returns the heuristic score value for placing a rectangle of size width*height longo freeRect. Does not try to rotate.
long GuillotineBinPack::ScoreByHeuristic(long width, long height, const Rect &freeRect, FreeRectChoiceHeuristic rectChoice)
{
	switch(rectChoice)
	{
	case RectBestAreaFit: return ScoreBestAreaFit(width, height, freeRect);
	case RectBestShortSideFit: return ScoreBestShortSideFit(width, height, freeRect);
	case RectBestLongSideFit: return ScoreBestLongSideFit(width, height, freeRect);
	case RectWorstAreaFit: return ScoreWorstAreaFit(width, height, freeRect);
	case RectWorstShortSideFit: return ScoreWorstShortSideFit(width, height, freeRect);
	case RectWorstLongSideFit: return ScoreWorstLongSideFit(width, height, freeRect);
	default: assert(false); return std::numeric_limits<long>::max();
	}
}