///|
/// Find all features with a matching key.
pub fn Record::features_by_key(self : Record, key : String) -> Array[Feature] {
self.features.filter(fn(feature) { feature.key == key })
}
///|
/// Return all features that carry a named qualifier.
pub fn Record::features_with_qualifier(
self : Record,
name : String,
) -> Array[Feature] {
self.features.filter(fn(feature) { feature.qualifier(name) is Some(_) })
}
///|
/// Look up the first qualifier value by name.
pub fn Feature::qualifier(self : Feature, name : String) -> String? {
for value = None, i = 0; i < self.qualifiers.length(); i = i + 1 {
if value is Some(_) {
continue value, i + 1
}
let qualifier = self.qualifiers[i]
if qualifier.name == name {
continue qualifier.value, i + 1
}
continue value, i + 1
} nobreak {
value
}
}
///|
/// True when any parsed range overlaps a 1-based inclusive query span.
pub fn Feature::overlaps(self : Feature, start : Int, end : Int) -> Bool {
if start > end {
false
} else {
self.location.ranges.any(fn(range) {
range.start <= end && start <= range.end
})
}
}