@@ -12,41 +12,33 @@ trait OrderingOps extends Base with Variables with OverloadHack {
12
12
implicit def varOrderingToOrderingOps [T : Ordering : Manifest ](n : Var [T ]) = new OrderingOpsCls (readVar(n))
13
13
14
14
class OrderingOpsCls [T : Ordering : Manifest ](lhs : Rep [T ]){
15
- def < (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_lt(lhs, rhs)
16
- def <= (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_lteq(lhs, rhs)
17
- def > (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_gt(lhs, rhs)
18
- def >= (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_gteq(lhs, rhs)
19
- def equiv (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_equiv(lhs, rhs)
20
- def max (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_max(lhs, rhs)
21
- def min (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_min(lhs, rhs)
22
- def compare (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_compare(lhs, rhs)
23
-
24
- def < [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_lt(lhs, c(rhs))
25
- def <= [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_lteq(lhs, c(rhs))
26
- def > [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_gt(lhs, c(rhs))
27
- def >= [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_gteq(lhs, c(rhs))
28
- def equiv [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_equiv(lhs, c(rhs))
29
- def max [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_max(lhs, c(rhs))
30
- def min [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_min(lhs, c(rhs))
31
- def compare [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_compare(lhs, c(rhs))
15
+ def < (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_lt(lhs, rhs)
16
+ def <= (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_lteq(lhs, rhs)
17
+ def > (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_gt(lhs, rhs)
18
+ def >= (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_gteq(lhs, rhs)
19
+ def equiv (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_equiv(lhs, rhs)
20
+ def max (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_max(lhs, rhs)
21
+ def min (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_min(lhs, rhs)
22
+ def compare (rhs : Rep [T ])(implicit pos : SourceContext ) = ordering_compare(lhs, rhs)
23
+
24
+ def < [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_lt(lhs, c(rhs))
25
+ def <= [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_lteq(lhs, c(rhs))
26
+ def > [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_gt(lhs, c(rhs))
27
+ def >= [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_gteq(lhs, c(rhs))
28
+ def equiv [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_equiv(lhs, c(rhs))
29
+ def max [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_max(lhs, c(rhs))
30
+ def min [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_min(lhs, c(rhs))
31
+ def compare [B ](rhs : B )(implicit c : B => Rep [T ], pos : SourceContext ) = ordering_compare(lhs, c(rhs))
32
32
}
33
33
34
- // def infix_<[T,B](lhs: Rep[T], rhs: B)(implicit o: Ordering[T], c: B => Rep[T], mT: Manifest[T]) = ordering_lt(lhs,c(rhs))
35
- // def infix_<=[T,B](lhs: Rep[T], rhs: B)(implicit o: Ordering[T], c: B => Rep[T], mT: Manifest[T]) = ordering_lteq(lhs,c(rhs))
36
- // def infix_>[T,B](lhs: Rep[T], rhs: B)(implicit o: Ordering[T], c: B => Rep[T], mT: Manifest[T]) = ordering_gt(lhs,c(rhs))
37
- // def infix_>=[T,B](lhs: Rep[T], rhs: B)(implicit o: Ordering[T], c: B => Rep[T], mT: Manifest[T]) = ordering_gteq(lhs,c(rhs))
38
- // def infix_equiv[T,B](lhs: Rep[T], rhs: B)(implicit o: Ordering[T], c: B => Rep[T], mT: Manifest[T]) = ordering_equiv(lhs,c(rhs))
39
- // def infix_max[T,B](lhs: Rep[T], rhs: B)(implicit o: Ordering[T], c: B => Rep[T], mT: Manifest[T]) = ordering_max(lhs,c(rhs))
40
- // def infix_min[T,B](lhs: Rep[T], rhs: B)(implicit o: Ordering[T], c: B => Rep[T], mT: Manifest[T]) = ordering_min(lhs,c(rhs))
41
-
42
- def ordering_lt [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
43
- def ordering_lteq [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
44
- def ordering_gt [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
45
- def ordering_gteq [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
46
- def ordering_equiv [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
47
- def ordering_max [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [T ]
48
- def ordering_min [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [T ]
49
- def ordering_compare [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Int ]
34
+ def ordering_lt [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
35
+ def ordering_lteq [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
36
+ def ordering_gt [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
37
+ def ordering_gteq [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
38
+ def ordering_equiv [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Boolean ]
39
+ def ordering_max [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [T ]
40
+ def ordering_min [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [T ]
41
+ def ordering_compare [T : Ordering : Manifest ](lhs : Rep [T ], rhs : Rep [T ])(implicit pos : SourceContext ): Rep [Int ]
50
42
}
51
43
52
44
@@ -55,47 +47,101 @@ trait OrderingOpsExp extends OrderingOps with VariablesExp {
55
47
def mev = manifest[T ]
56
48
def aev = implicitly[Ordering [T ]]
57
49
}
58
- case class OrderingLT [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
59
- case class OrderingLTEQ [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
60
- case class OrderingGT [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
61
- case class OrderingGTEQ [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
62
- case class OrderingEquiv [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
63
- case class OrderingMax [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,T ]
64
- case class OrderingMin [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,T ]
65
- case class OrderingCompare [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Int ]
66
-
67
- def ordering_lt [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingLT (lhs,rhs)
68
- def ordering_lteq [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingLTEQ (lhs,rhs)
69
- def ordering_gt [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingGT (lhs,rhs)
70
- def ordering_gteq [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingGTEQ (lhs,rhs)
71
- def ordering_equiv [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingEquiv (lhs,rhs)
72
- def ordering_max [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [T ] = OrderingMax (lhs,rhs)
73
- def ordering_min [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [T ] = OrderingMin (lhs,rhs)
74
- def ordering_compare [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Int ] = OrderingCompare (lhs,rhs)
75
-
76
- override def mirror [A : Manifest ](e : Def [A ], f : Transformer )(implicit pos : SourceContext ): Exp [A ] = {
77
- (e match {
78
- case e@ OrderingLT (a,b) => ordering_lt(f(a),f(b))(e.aev,e.mev,pos)
79
- case e@ OrderingLTEQ (a,b) => ordering_lteq(f(a),f(b))(e.aev,e.mev,pos)
80
- case e@ OrderingGT (a,b) => ordering_gt(f(a),f(b))(e.aev,e.mev,pos)
81
- case e@ OrderingGTEQ (a,b) => ordering_gteq(f(a),f(b))(e.aev,e.mev,pos)
82
- case e@ OrderingEquiv (a,b) => ordering_equiv(f(a),f(b))(e.aev,e.mev,pos)
83
- case e@ OrderingMax (a,b) => ordering_max(f(a),f(b))(e.aev.asInstanceOf [Ordering [A ]],mtype(e.mev),pos)
84
- case e@ OrderingMin (a,b) => ordering_min(f(a),f(b))(e.aev.asInstanceOf [Ordering [A ]],mtype(e.mev),pos)
85
- case e@ OrderingCompare (a,b) => ordering_compare(f(a),f(b))(e.aev,e.mev,pos)
86
- case Reflect (e@ OrderingLT (a,b), u, es) => reflectMirrored(Reflect (OrderingLT (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
87
- case Reflect (e@ OrderingLTEQ (a,b), u, es) => reflectMirrored(Reflect (OrderingLTEQ (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
88
- case Reflect (e@ OrderingGT (a,b), u, es) => reflectMirrored(Reflect (OrderingGT (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
89
- case Reflect (e@ OrderingGTEQ (a,b), u, es) => reflectMirrored(Reflect (OrderingGTEQ (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
90
- case Reflect (e@ OrderingEquiv (a,b), u, es) => reflectMirrored(Reflect (OrderingEquiv (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
91
- case Reflect (e@ OrderingMax (a,b), u, es) => reflectMirrored(Reflect (OrderingMax (f(a),f(b))(e.aev.asInstanceOf [Ordering [A ]],mtype(e.mev)), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
92
- case Reflect (e@ OrderingMin (a,b), u, es) => reflectMirrored(Reflect (OrderingMin (f(a),f(b))(e.aev.asInstanceOf [Ordering [A ]],mtype(e.mev)), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
50
+ case class OrderingLT [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
51
+ case class OrderingLTEQ [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
52
+ case class OrderingGT [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
53
+ case class OrderingGTEQ [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
54
+ case class OrderingEquiv [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Boolean ]
55
+ case class OrderingMax [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,T ]
56
+ case class OrderingMin [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,T ]
57
+ case class OrderingCompare [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ]) extends DefMN [T ,Int ]
58
+
59
+ def ordering_lt [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingLT (lhs,rhs)
60
+ def ordering_lteq [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingLTEQ (lhs,rhs)
61
+ def ordering_gt [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingGT (lhs,rhs)
62
+ def ordering_gteq [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingGTEQ (lhs,rhs)
63
+ def ordering_equiv [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = OrderingEquiv (lhs,rhs)
64
+ def ordering_max [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [T ] = OrderingMax (lhs,rhs)
65
+ def ordering_min [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [T ] = OrderingMin (lhs,rhs)
66
+ def ordering_compare [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Int ] = OrderingCompare (lhs,rhs)
67
+
68
+ override def mirror [A : Manifest ](e : Def [A ], f : Transformer )(implicit pos : SourceContext ): Exp [A ] = (e match {
69
+ case e@ OrderingLT (a,b) => ordering_lt(f(a),f(b))(e.aev,e.mev,pos)
70
+ case e@ OrderingLTEQ (a,b) => ordering_lteq(f(a),f(b))(e.aev,e.mev,pos)
71
+ case e@ OrderingGT (a,b) => ordering_gt(f(a),f(b))(e.aev,e.mev,pos)
72
+ case e@ OrderingGTEQ (a,b) => ordering_gteq(f(a),f(b))(e.aev,e.mev,pos)
73
+ case e@ OrderingEquiv (a,b) => ordering_equiv(f(a),f(b))(e.aev,e.mev,pos)
74
+ case e@ OrderingMax (a,b) => ordering_max(f(a),f(b))(e.aev.asInstanceOf [Ordering [A ]],mtype(e.mev),pos)
75
+ case e@ OrderingMin (a,b) => ordering_min(f(a),f(b))(e.aev.asInstanceOf [Ordering [A ]],mtype(e.mev),pos)
76
+ case e@ OrderingCompare (a,b) => ordering_compare(f(a),f(b))(e.aev,e.mev,pos)
77
+ case Reflect (e@ OrderingLT (a,b), u, es) => reflectMirrored(Reflect (OrderingLT (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
78
+ case Reflect (e@ OrderingLTEQ (a,b), u, es) => reflectMirrored(Reflect (OrderingLTEQ (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
79
+ case Reflect (e@ OrderingGT (a,b), u, es) => reflectMirrored(Reflect (OrderingGT (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
80
+ case Reflect (e@ OrderingGTEQ (a,b), u, es) => reflectMirrored(Reflect (OrderingGTEQ (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
81
+ case Reflect (e@ OrderingEquiv (a,b), u, es) => reflectMirrored(Reflect (OrderingEquiv (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
82
+ case Reflect (e@ OrderingMax (a,b), u, es) => reflectMirrored(Reflect (OrderingMax (f(a),f(b))(e.aev.asInstanceOf [Ordering [A ]],mtype(e.mev)), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
83
+ case Reflect (e@ OrderingMin (a,b), u, es) => reflectMirrored(Reflect (OrderingMin (f(a),f(b))(e.aev.asInstanceOf [Ordering [A ]],mtype(e.mev)), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
93
84
case Reflect (e@ OrderingCompare (a,b), u, es) => reflectMirrored(Reflect (OrderingCompare (f(a),f(b))(e.aev,e.mev), mapOver(f,u), f(es)))(mtype(manifest[A ]), pos)
94
85
case _ => super .mirror(e, f)
95
- }).asInstanceOf [Exp [A ]]
86
+ }).asInstanceOf [Exp [A ]]
87
+ }
88
+
89
+ /**
90
+ * @author Alen Stojanov ([email protected] )
91
+ */
92
+ trait OrderingOpsExpOpt extends OrderingOpsExp {
93
+
94
+ override def ordering_lt [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = (lhs, rhs) match {
95
+ case (Const (a), Const (b)) => Const (implicitly[Ordering [T ]].lt(a, b))
96
+ case (a, b) if a.equals(b) => Const (false )
97
+ case _ => super .ordering_lt(lhs, rhs)
98
+ }
99
+
100
+ override def ordering_lteq [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = (lhs, rhs) match {
101
+ case (Const (a), Const (b)) => Const (implicitly[Ordering [T ]].lteq(a, b))
102
+ case (a, b) if a.equals(b) => Const (true )
103
+ case _ => super .ordering_lteq(lhs, rhs)
104
+ }
105
+
106
+ override def ordering_gt [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = (lhs, rhs) match {
107
+ case (Const (a), Const (b)) => Const (implicitly[Ordering [T ]].gt(a, b))
108
+ case (a, b) if a.equals(b) => Const (false )
109
+ case _ => super .ordering_gt(lhs, rhs)
110
+ }
111
+
112
+ override def ordering_gteq [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = (lhs, rhs) match {
113
+ case (Const (a), Const (b)) => Const (implicitly[Ordering [T ]].gteq(a, b))
114
+ case (a, b) if a.equals(b) => Const (true )
115
+ case _ => super .ordering_gteq(lhs, rhs)
116
+ }
117
+
118
+ override def ordering_equiv [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Boolean ] = (lhs, rhs) match {
119
+ case (Const (a), Const (b)) => Const (implicitly[Ordering [T ]].equiv(a, b))
120
+ case (a, b) if a.equals(b) => Const (true )
121
+ case _ => super .ordering_equiv(lhs, rhs)
96
122
}
123
+
124
+ override def ordering_max [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [T ] = (lhs, rhs) match {
125
+ case (Const (a), Const (b)) => Const (implicitly[Ordering [T ]].max(a, b))
126
+ case (a, b) if a.equals(b) => a
127
+ case _ => super .ordering_max(lhs, rhs)
128
+ }
129
+
130
+ override def ordering_min [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [T ] = (lhs, rhs) match {
131
+ case (Const (a), Const (b)) => Const (implicitly[Ordering [T ]].min(a, b))
132
+ case (a, b) if a.equals(b) => a
133
+ case _ => super .ordering_min(lhs, rhs)
134
+ }
135
+
136
+ override def ordering_compare [T : Ordering : Manifest ](lhs : Exp [T ], rhs : Exp [T ])(implicit pos : SourceContext ): Rep [Int ] = (lhs, rhs) match {
137
+ case (Const (a), Const (b)) => Const (implicitly[Ordering [T ]].compare(a, b))
138
+ case (a, b) if a.equals(b) => Const [Int ](0 )
139
+ case _ => super .ordering_compare(lhs, rhs)
140
+ }
141
+
97
142
}
98
143
144
+
99
145
trait ScalaGenOrderingOps extends ScalaGenBase {
100
146
val IR : OrderingOpsExp
101
147
import IR ._
0 commit comments