Skip to content

Commit 2b8ec1c

Browse files
committed
reduce amount of generics
1 parent cefb4fd commit 2b8ec1c

13 files changed

+755
-776
lines changed

src/details/common.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -36,37 +36,37 @@ impl_hashable_char!(u16, UNSIGNED, u64);
3636
impl_hashable_char!(u32, UNSIGNED, u64);
3737
impl_hashable_char!(u64, UNSIGNED, u64);
3838

39-
pub fn find_common_prefix<Iter1, Iter2, Elem1, Elem2>(s1: Iter1, s2: Iter2) -> usize
39+
pub fn find_common_prefix<Iter1, Iter2>(s1: Iter1, s2: Iter2) -> usize
4040
where
41-
Iter1: Iterator<Item = Elem1> + Clone,
42-
Iter2: Iterator<Item = Elem2> + Clone,
43-
Elem1: PartialEq<Elem2>,
44-
Elem2: PartialEq<Elem1>,
41+
Iter1: Iterator + Clone,
42+
Iter2: Iterator + Clone,
43+
Iter1::Item: PartialEq<Iter2::Item>,
44+
Iter2::Item: PartialEq<Iter1::Item>,
4545
{
4646
s1.zip(s2)
4747
.take_while(|(a_char, b_char)| a_char == b_char)
4848
.count()
4949
}
5050

51-
pub fn find_common_suffix<Iter1, Iter2, Elem1, Elem2>(s1: Iter1, s2: Iter2) -> usize
51+
pub fn find_common_suffix<Iter1, Iter2>(s1: Iter1, s2: Iter2) -> usize
5252
where
53-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
54-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
55-
Elem1: PartialEq<Elem2>,
56-
Elem2: PartialEq<Elem1>,
53+
Iter1: DoubleEndedIterator + Clone,
54+
Iter2: DoubleEndedIterator + Clone,
55+
Iter1::Item: PartialEq<Iter2::Item>,
56+
Iter2::Item: PartialEq<Iter1::Item>,
5757
{
5858
s1.rev()
5959
.zip(s2.rev())
6060
.take_while(|(a_char, b_char)| a_char == b_char)
6161
.count()
6262
}
6363

64-
pub struct RemovedAffix<Iter1, Iter2, Elem1, Elem2>
64+
pub struct RemovedAffix<Iter1, Iter2>
6565
where
66-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
67-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
68-
Elem1: PartialEq<Elem2>,
69-
Elem2: PartialEq<Elem1>,
66+
Iter1: DoubleEndedIterator + Clone,
67+
Iter2: DoubleEndedIterator + Clone,
68+
Iter1::Item: PartialEq<Iter2::Item>,
69+
Iter2::Item: PartialEq<Iter1::Item>,
7070
{
7171
pub s1: Skip<Take<Iter1>>,
7272
pub len1: usize,
@@ -76,17 +76,17 @@ where
7676
pub suffix_len: usize,
7777
}
7878

79-
pub fn remove_common_affix<Iter1, Iter2, Elem1, Elem2>(
79+
pub fn remove_common_affix<Iter1, Iter2>(
8080
s1: Iter1,
8181
mut len1: usize,
8282
s2: Iter2,
8383
mut len2: usize,
84-
) -> RemovedAffix<Iter1, Iter2, Elem1, Elem2>
84+
) -> RemovedAffix<Iter1, Iter2>
8585
where
86-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
87-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
88-
Elem1: PartialEq<Elem2> + HashableChar,
89-
Elem2: PartialEq<Elem1> + HashableChar,
86+
Iter1: DoubleEndedIterator + Clone,
87+
Iter2: DoubleEndedIterator + Clone,
88+
Iter1::Item: PartialEq<Iter2::Item> + HashableChar,
89+
Iter2::Item: PartialEq<Iter1::Item> + HashableChar,
9090
{
9191
let suffix_len = find_common_suffix(s1.clone(), s2.clone());
9292
let s1_iter_no_suffix = s1.take(len1 - suffix_len);

src/details/distance.rs

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::HashableChar;
44
pub trait MetricUsize {
55
fn maximum(&self, len1: usize, len2: usize) -> usize;
66

7-
fn _distance<Iter1, Iter2, Elem1, Elem2>(
7+
fn _distance<Iter1, Iter2>(
88
&self,
99
s1: Iter1,
1010
len1: usize,
@@ -14,10 +14,10 @@ pub trait MetricUsize {
1414
score_hint: Option<usize>,
1515
) -> Option<usize>
1616
where
17-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
18-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
19-
Elem1: PartialEq<Elem2> + HashableChar + Copy,
20-
Elem2: PartialEq<Elem1> + HashableChar + Copy,
17+
Iter1: DoubleEndedIterator + Clone,
18+
Iter2: DoubleEndedIterator + Clone,
19+
Iter1::Item: PartialEq<Iter2::Item> + HashableChar + Copy,
20+
Iter2::Item: PartialEq<Iter1::Item> + HashableChar + Copy,
2121
{
2222
let maximum = self.maximum(len1, len2);
2323

@@ -35,7 +35,7 @@ pub trait MetricUsize {
3535
Some(dist)
3636
}
3737

38-
fn _similarity<Iter1, Iter2, Elem1, Elem2>(
38+
fn _similarity<Iter1, Iter2>(
3939
&self,
4040
s1: Iter1,
4141
len1: usize,
@@ -45,10 +45,10 @@ pub trait MetricUsize {
4545
mut score_hint: Option<usize>,
4646
) -> Option<usize>
4747
where
48-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
49-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
50-
Elem1: PartialEq<Elem2> + HashableChar + Copy,
51-
Elem2: PartialEq<Elem1> + HashableChar + Copy,
48+
Iter1: DoubleEndedIterator + Clone,
49+
Iter2: DoubleEndedIterator + Clone,
50+
Iter1::Item: PartialEq<Iter2::Item> + HashableChar + Copy,
51+
Iter2::Item: PartialEq<Iter1::Item> + HashableChar + Copy,
5252
{
5353
let maximum = self.maximum(len1, len2);
5454
if let Some(cutoff) = score_cutoff {
@@ -73,7 +73,7 @@ pub trait MetricUsize {
7373
Some(sim)
7474
}
7575

76-
fn _normalized_distance<Iter1, Iter2, Elem1, Elem2>(
76+
fn _normalized_distance<Iter1, Iter2>(
7777
&self,
7878
s1: Iter1,
7979
len1: usize,
@@ -83,10 +83,10 @@ pub trait MetricUsize {
8383
score_hint: Option<f64>,
8484
) -> Option<f64>
8585
where
86-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
87-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
88-
Elem1: PartialEq<Elem2> + HashableChar + Copy,
89-
Elem2: PartialEq<Elem1> + HashableChar + Copy,
86+
Iter1: DoubleEndedIterator + Clone,
87+
Iter2: DoubleEndedIterator + Clone,
88+
Iter1::Item: PartialEq<Iter2::Item> + HashableChar + Copy,
89+
Iter2::Item: PartialEq<Iter1::Item> + HashableChar + Copy,
9090
{
9191
let maximum = self.maximum(len1, len2);
9292

@@ -121,7 +121,7 @@ pub trait MetricUsize {
121121
Some(norm_dist)
122122
}
123123

124-
fn _normalized_similarity<Iter1, Iter2, Elem1, Elem2>(
124+
fn _normalized_similarity<Iter1, Iter2>(
125125
&self,
126126
s1: Iter1,
127127
len1: usize,
@@ -131,10 +131,10 @@ pub trait MetricUsize {
131131
score_hint: Option<f64>,
132132
) -> Option<f64>
133133
where
134-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
135-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
136-
Elem1: PartialEq<Elem2> + HashableChar + Copy,
137-
Elem2: PartialEq<Elem1> + HashableChar + Copy,
134+
Iter1: DoubleEndedIterator + Clone,
135+
Iter2: DoubleEndedIterator + Clone,
136+
Iter1::Item: PartialEq<Iter2::Item> + HashableChar + Copy,
137+
Iter2::Item: PartialEq<Iter1::Item> + HashableChar + Copy,
138138
{
139139
let cutoff_score = score_cutoff.map(norm_sim_to_norm_dist);
140140
let hint_score = score_hint.map(norm_sim_to_norm_dist);
@@ -154,7 +154,7 @@ pub trait MetricUsize {
154154
pub trait Metricf64 {
155155
fn maximum(&self, len1: usize, len2: usize) -> f64;
156156

157-
fn _distance<Iter1, Iter2, Elem1, Elem2>(
157+
fn _distance<Iter1, Iter2>(
158158
&self,
159159
s1: Iter1,
160160
len1: usize,
@@ -164,10 +164,10 @@ pub trait Metricf64 {
164164
score_hint: Option<f64>,
165165
) -> Option<f64>
166166
where
167-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
168-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
169-
Elem1: PartialEq<Elem2> + HashableChar + Copy,
170-
Elem2: PartialEq<Elem1> + HashableChar + Copy,
167+
Iter1: DoubleEndedIterator + Clone,
168+
Iter2: DoubleEndedIterator + Clone,
169+
Iter1::Item: PartialEq<Iter2::Item> + HashableChar + Copy,
170+
Iter2::Item: PartialEq<Iter1::Item> + HashableChar + Copy,
171171
{
172172
let maximum = self.maximum(len1, len2);
173173

@@ -185,7 +185,7 @@ pub trait Metricf64 {
185185
Some(dist)
186186
}
187187

188-
fn _similarity<Iter1, Iter2, Elem1, Elem2>(
188+
fn _similarity<Iter1, Iter2>(
189189
&self,
190190
s1: Iter1,
191191
len1: usize,
@@ -195,10 +195,10 @@ pub trait Metricf64 {
195195
mut score_hint: Option<f64>,
196196
) -> Option<f64>
197197
where
198-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
199-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
200-
Elem1: PartialEq<Elem2> + HashableChar + Copy,
201-
Elem2: PartialEq<Elem1> + HashableChar + Copy,
198+
Iter1: DoubleEndedIterator + Clone,
199+
Iter2: DoubleEndedIterator + Clone,
200+
Iter1::Item: PartialEq<Iter2::Item> + HashableChar + Copy,
201+
Iter2::Item: PartialEq<Iter1::Item> + HashableChar + Copy,
202202
{
203203
let maximum = self.maximum(len1, len2);
204204
if let Some(cutoff) = score_cutoff {
@@ -223,7 +223,7 @@ pub trait Metricf64 {
223223
Some(sim)
224224
}
225225

226-
fn _normalized_distance<Iter1, Iter2, Elem1, Elem2>(
226+
fn _normalized_distance<Iter1, Iter2>(
227227
&self,
228228
s1: Iter1,
229229
len1: usize,
@@ -233,10 +233,10 @@ pub trait Metricf64 {
233233
score_hint: Option<f64>,
234234
) -> Option<f64>
235235
where
236-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
237-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
238-
Elem1: PartialEq<Elem2> + HashableChar + Copy,
239-
Elem2: PartialEq<Elem1> + HashableChar + Copy,
236+
Iter1: DoubleEndedIterator + Clone,
237+
Iter2: DoubleEndedIterator + Clone,
238+
Iter1::Item: PartialEq<Iter2::Item> + HashableChar + Copy,
239+
Iter2::Item: PartialEq<Iter1::Item> + HashableChar + Copy,
240240
{
241241
let maximum = self.maximum(len1, len2);
242242

@@ -253,7 +253,7 @@ pub trait Metricf64 {
253253
Some(norm_dist)
254254
}
255255

256-
fn _normalized_similarity<Iter1, Iter2, Elem1, Elem2>(
256+
fn _normalized_similarity<Iter1, Iter2>(
257257
&self,
258258
s1: Iter1,
259259
len1: usize,
@@ -263,10 +263,10 @@ pub trait Metricf64 {
263263
score_hint: Option<f64>,
264264
) -> Option<f64>
265265
where
266-
Iter1: Iterator<Item = Elem1> + DoubleEndedIterator + Clone,
267-
Iter2: Iterator<Item = Elem2> + DoubleEndedIterator + Clone,
268-
Elem1: PartialEq<Elem2> + HashableChar + Copy,
269-
Elem2: PartialEq<Elem1> + HashableChar + Copy,
266+
Iter1: DoubleEndedIterator + Clone,
267+
Iter2: DoubleEndedIterator + Clone,
268+
Iter1::Item: PartialEq<Iter2::Item> + HashableChar + Copy,
269+
Iter2::Item: PartialEq<Iter1::Item> + HashableChar + Copy,
270270
{
271271
let cutoff_score = score_cutoff.map(norm_sim_to_norm_dist);
272272
let hint_score = score_hint.map(norm_sim_to_norm_dist);

0 commit comments

Comments
 (0)