// // Copyright (C) 2015-2022 Charles E. Vejnar // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://www.mozilla.org/MPL/2.0/. // package feature import ( "fmt" "github.com/biogo/store/interval" ) // Integer-specific intervals type IntInterval struct { Start, End int UID uintptr Feature Feature } func (i IntInterval) OverlapLength(b interval.IntRange) int { return min(i.End, b.End) - max(i.Start, b.Start) } func (i IntInterval) Overlap(b interval.IntRange) bool { // Half-open interval indexing. return i.End > b.Start && i.Start < b.End } func (i IntInterval) ID() uintptr { return i.UID } func (i IntInterval) Range() interval.IntRange { return interval.IntRange{i.Start, i.End} } func (i IntInterval) String() string { return fmt.Sprintf("[%d,%d)#%d-%s", i.Start, i.End, i.UID, i.Feature.Name) } func min(a, b int) int { if a > b { return b } return a } func max(a, b int) int { if a < b { return b } return a }