package
0.5.1
Repository: https://github.com/awalterschulze/goderive.git
Documentation: pkg.go.dev

# README

The deriveMin function returns the minimum of two arguments or the minimum element in a list.

Given the following input:

package min

func positive(i, j int) bool {
	return deriveMin(i, j) >= 0
}

type boat struct {
	length int
}

func removeMin(boats []boat) []boat {
	if len(boats) == 0 {
		return boats
	}
	m := deriveMins(boats, boats[0])
	return deriveFilter(func(b boat) bool {
		return b != m
	}, boats)
}

goderive will generate the following code:

// Code generated by goderive DO NOT EDIT.

package min

// deriveFilter returns a list of all items in the list that matches the predicate.
//
// Deprecated: In favour of generics.
func deriveFilter(predicate func(boat) bool, list []boat) []boat {
	j := 0
	for i, elem := range list {
		if predicate(elem) {
			if i != j {
				list[j] = list[i]
			}
			j++
		}
	}
	return list[:j]
}

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

// deriveMins returns the minimum value from the list, or the default value if the list is empty.
//
// Deprecated: In favour of generics.
func deriveMins(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 {
	return deriveCompare_(&this, &that)
}

// 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
}