User:Inthar/Code: Difference between revisions

Inthar (talk | contribs)
Inthar (talk | contribs)
Line 653: Line 653:
use std::cmp::{min, max};
use std::cmp::{min, max};


type JIScaleProperty = fn(s: [r64]) -> bool;
type CentsScaleProperty = fn(s: [f64]) -> bool;
type AbstractScaleProperty = fn(s: &str) -> bool;
type EquivalenceRelation<T> = fn(&T, &T) -> bool;
type EquivalenceRelation<T> = fn(&T, &T) -> bool;
// Treating `scale` as a cyclic string (that is, "scale[i] == scale[i % scale.len()]"),
// take a slice of length `slice_length` from `basepoint`; assumes `slice_length` <= `scale`.len()
fn slice_cyclic_string(scale: &str, basepoint: usize, slice_length: usize) -> String {
let arr = scale;
if basepoint + slice_length < scale.len() {
return String::from(&arr[basepoint..(basepoint+slice_length)]);
} else {
let mut ret = String::new();
ret.push_str(&arr[basepoint..]);
ret.push_str(&arr[..(basepoint + slice_length - scale.len())]);
return ret;
}
}


pub fn are_rotationally_equivalent(scale1: &String, scale2: &String)-> bool{
pub fn are_rotationally_equivalent(scale1: &String, scale2: &String)-> bool{