@@ -10,8 +10,6 @@ use crate::lexer::Span;
1010use crate :: value:: Value ;
1111use crate :: * ;
1212
13- use alloc:: collections:: BTreeSet ;
14-
1513use anyhow:: { bail, Result } ;
1614
1715pub fn register ( m : & mut builtins:: BuiltinsMap < & ' static str , builtins:: BuiltinFcn > ) {
@@ -24,19 +22,19 @@ pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn
2422pub fn intersection ( expr1 : & Expr , expr2 : & Expr , v1 : Value , v2 : Value ) -> Result < Value > {
2523 let s1 = ensure_set ( "intersection" , expr1, v1) ?;
2624 let s2 = ensure_set ( "intersection" , expr2, v2) ?;
27- Ok ( Value :: from_set ( s1. intersection ( & s2) . cloned ( ) . collect ( ) ) )
25+ Ok ( Value :: from ( s1. intersection ( & s2) ) )
2826}
2927
3028pub fn union ( expr1 : & Expr , expr2 : & Expr , v1 : Value , v2 : Value ) -> Result < Value > {
3129 let s1 = ensure_set ( "union" , expr1, v1) ?;
3230 let s2 = ensure_set ( "union" , expr2, v2) ?;
33- Ok ( Value :: from_set ( s1. union ( & s2) . cloned ( ) . collect ( ) ) )
31+ Ok ( Value :: from ( s1. union ( & s2) ) )
3432}
3533
3634pub fn difference ( expr1 : & Expr , expr2 : & Expr , v1 : Value , v2 : Value ) -> Result < Value > {
3735 let s1 = ensure_set ( "difference" , expr1, v1) ?;
3836 let s2 = ensure_set ( "difference" , expr2, v2) ?;
39- Ok ( Value :: from_set ( s1. difference ( & s2) . cloned ( ) . collect ( ) ) )
37+ Ok ( Value :: from ( s1. difference ( & s2) ) )
4038}
4139
4240fn binary_set_union (
@@ -49,7 +47,7 @@ fn binary_set_union(
4947 ensure_args_count ( span, name, params, args, 2 ) ?;
5048 let left = ensure_set ( name, & params[ 0 ] , args[ 0 ] . clone ( ) ) ?;
5149 let right = ensure_set ( name, & params[ 1 ] , args[ 1 ] . clone ( ) ) ?;
52- Ok ( Value :: from_set ( left. union ( & right) . cloned ( ) . collect ( ) ) )
50+ Ok ( Value :: from ( left. union ( & right) ) )
5351}
5452
5553fn binary_set_intersection (
@@ -62,9 +60,7 @@ fn binary_set_intersection(
6260 ensure_args_count ( span, name, params, args, 2 ) ?;
6361 let left = ensure_set ( name, & params[ 0 ] , args[ 0 ] . clone ( ) ) ?;
6462 let right = ensure_set ( name, & params[ 1 ] , args[ 1 ] . clone ( ) ) ?;
65- Ok ( Value :: from_set (
66- left. intersection ( & right) . cloned ( ) . collect ( ) ,
67- ) )
63+ Ok ( Value :: from ( left. intersection ( & right) ) )
6864}
6965
7066fn intersection_of_set_of_sets (
@@ -77,7 +73,7 @@ fn intersection_of_set_of_sets(
7773 ensure_args_count ( span, name, params, args, 1 ) ?;
7874 let set = ensure_set ( name, & params[ 0 ] , args[ 0 ] . clone ( ) ) ?;
7975
80- let mut res = BTreeSet :: new ( ) ;
76+ let mut res = crate :: value :: Set :: new ( ) ;
8177 let mut first = true ;
8278
8379 for s in set. iter ( ) {
@@ -92,11 +88,11 @@ fn intersection_of_set_of_sets(
9288 res. clone_from ( s) ;
9389 first = false ;
9490 } else {
95- res = res. intersection ( s) . cloned ( ) . collect ( ) ;
91+ res = res. intersection ( s) ;
9692 }
9793 }
9894
99- Ok ( Value :: from_set ( res) )
95+ Ok ( Value :: from ( res) )
10096}
10197
10298fn union_of_set_of_sets (
@@ -109,7 +105,7 @@ fn union_of_set_of_sets(
109105 ensure_args_count ( span, name, params, args, 1 ) ?;
110106 let set = ensure_set ( name, & params[ 0 ] , args[ 0 ] . clone ( ) ) ?;
111107
112- let mut res = BTreeSet :: new ( ) ;
108+ let mut res = crate :: value :: Set :: new ( ) ;
113109
114110 for s in set. iter ( ) {
115111 let s = match s {
@@ -119,8 +115,8 @@ fn union_of_set_of_sets(
119115 ) ,
120116 } ;
121117
122- res = res. union ( s) . cloned ( ) . collect ( ) ;
118+ res = res. union ( s) ;
123119 }
124120
125- Ok ( Value :: from_set ( res) )
121+ Ok ( Value :: from ( res) )
126122}
0 commit comments