data class PhoebenchVersion(val major: Int, val minor: Int, val patch: Int, val note: String = "") { operator fun compareTo(other: PhoebenchVersion): Int { // this > other -> return >0 val majorComp = major - other.major if(majorComp != 0) return majorComp val minorComp = minor - other.minor if(minorComp != 0) return minorComp return patch - other.patch } override fun toString(): String = if(note.isNotBlank()) "$major.$minor.$patch-$note" else safeString() fun safeString() = "$major.$minor.$patch" }