@@ -4,27 +4,6 @@ use super::{Relation, Variable};
4
4
use std:: cell:: Ref ;
5
5
use std:: ops:: Deref ;
6
6
7
- pub ( crate ) trait JoinInput < ' me , Tuple : Ord > : Copy {
8
- type RecentTuples : Deref < Target = Relation < Tuple > > ;
9
- type StableTuples : Deref < Target = Vec < Relation < Tuple > > > ;
10
-
11
- fn recent ( self ) -> Self :: RecentTuples ;
12
- fn stable ( self ) -> Self :: StableTuples ;
13
- }
14
-
15
- impl < ' me , Tuple : Ord > JoinInput < ' me , Tuple > for & ' me Variable < Tuple > {
16
- type RecentTuples = Ref < ' me , Relation < Tuple > > ;
17
- type StableTuples = Ref < ' me , Vec < Relation < Tuple > > > ;
18
-
19
- fn recent ( self ) -> Self :: RecentTuples {
20
- self . recent . borrow ( )
21
- }
22
-
23
- fn stable ( self ) -> Self :: StableTuples {
24
- self . stable . borrow ( )
25
- }
26
- }
27
-
28
7
pub ( crate ) fn join_into < ' me , Key : Ord , Val1 : Ord , Val2 : Ord , Result : Ord > (
29
8
input1 : impl JoinInput < ' me , ( Key , Val1 ) > ,
30
9
input2 : impl JoinInput < ' me , ( Key , Val2 ) > ,
@@ -136,3 +115,24 @@ pub(crate) fn gallop<T>(mut slice: &[T], mut cmp: impl FnMut(&T) -> bool) -> &[T
136
115
137
116
slice
138
117
}
118
+
119
+ pub ( crate ) trait JoinInput < ' me , Tuple : Ord > : Copy {
120
+ type RecentTuples : Deref < Target = [ Tuple ] > ;
121
+ type StableTuples : Deref < Target = [ Relation < Tuple > ] > ;
122
+
123
+ fn recent ( self ) -> Self :: RecentTuples ;
124
+ fn stable ( self ) -> Self :: StableTuples ;
125
+ }
126
+
127
+ impl < ' me , Tuple : Ord > JoinInput < ' me , Tuple > for & ' me Variable < Tuple > {
128
+ type RecentTuples = Ref < ' me , [ Tuple ] > ;
129
+ type StableTuples = Ref < ' me , [ Relation < Tuple > ] > ;
130
+
131
+ fn recent ( self ) -> Self :: RecentTuples {
132
+ Ref :: map ( self . recent . borrow ( ) , |r| & r. elements [ ..] )
133
+ }
134
+
135
+ fn stable ( self ) -> Self :: StableTuples {
136
+ Ref :: map ( self . stable . borrow ( ) , |v| & v[ ..] )
137
+ }
138
+ }
0 commit comments