# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from _emerge.AbstractDepPriority import AbstractDepPriority
class DepPriority(AbstractDepPriority):

	__slots__ = ("satisfied", "optional", "ignored")

	def __int__(self):
		"""
		Note: These priorities are only used for measuring hardness
		in the circular dependency display via digraph.debug_print(),
		and nothing more. For actual merge order calculations, the
		measures defined by the DepPriorityNormalRange and
		DepPrioritySatisfiedRange classes are used.

		Attributes                            Hardness

		buildtime_slot_op                       0
		buildtime                              -1
		runtime                                -2
		runtime_post                           -3
		optional                               -4
		(none of the above)                    -5

		"""

		if self.optional:
			return -4
		if self.buildtime_slot_op:
			return 0
		if self.buildtime:
			return -1
		if self.runtime:
			return -2
		if self.runtime_post:
			return -3
		return -5

	def __str__(self):
		if self.ignored:
			return "ignored"
		if self.optional:
			return "optional"
		if self.buildtime_slot_op:
			return "buildtime_slot_op"
		if self.buildtime:
			return "buildtime"
		if self.runtime_slot_op:
			return "runtime_slot_op"
		if self.runtime:
			return "runtime"
		if self.runtime_post:
			return "runtime_post"
		return "soft"

