// Code generated by goderive DO NOT EDIT.

package max

// deriveCompare returns:
//   - 0 if this and that are equal,
//   - -1 is this is smaller and
//   - +1 is this is bigger.
func deriveCompare(this, that boat) int {
	return deriveCompare_(&this, &that)
}

// deriveMax returns the maximum of the two input values.
//
// Deprecated: In favour of generics.
func deriveMax(a, b int) int {
	if a > b {
		return a
	}
	return b
}

// deriveMaxs returns the maximum value from the input list and the default value, if the list is empty.
//
// Deprecated: In favour of generics.
func deriveMaxs(list []boat, def boat) boat {
	if len(list) == 0 {
		return def
	}
	m := list[0]
	list = list[1:]
	for i, v := range list {
		if deriveCompare(v, m) > 0 {
			m = list[i]
		}
	}
	return m
}

// deriveCompare_ returns:
//   - 0 if this and that are equal,
//   - -1 is this is smaller and
//   - +1 is this is bigger.
func deriveCompare_(this, that *boat) int {
	if this == nil {
		if that == nil {
			return 0
		}
		return -1
	}
	if that == nil {
		return 1
	}
	if c := deriveCompare_i(this.length, that.length); c != 0 {
		return c
	}
	return 0
}

// deriveCompare_i returns:
//   - 0 if this and that are equal,
//   - -1 is this is smaller and
//   - +1 is this is bigger.
func deriveCompare_i(this, that int) int {
	if this != that {
		if this < that {
			return -1
		} else {
			return 1
		}
	}
	return 0
}
