@@ -7,9 +7,11 @@ use std::collections::btree_map::{Entry, OccupiedEntry};
77use std:: collections:: { BTreeMap , BTreeSet } ;
88
99#[ derive( Debug ) ]
10+ /// Do not allocate BTreeSet if there is just one task (per priority level)
11+ /// There may be a many tasks but each with different priority
1012pub ( crate ) enum OneOrMoreTaskIds {
1113 One ( TaskId ) ,
12- More ( Box < BTreeSet < TaskId > > ) ,
14+ More ( BTreeSet < TaskId > ) ,
1315}
1416
1517impl OneOrMoreTaskIds {
@@ -159,7 +161,7 @@ impl TaskQueue {
159161 let mut task_ids: BTreeSet < _ > = Default :: default ( ) ;
160162 task_ids. insert ( * t_id) ;
161163 task_ids. insert ( task_id) ;
162- e. insert ( OneOrMoreTaskIds :: More ( Box :: new ( task_ids) ) ) ;
164+ e. insert ( OneOrMoreTaskIds :: More ( task_ids) ) ;
163165 }
164166 OneOrMoreTaskIds :: More ( tasks) => {
165167 tasks. insert ( task_id) ;
@@ -174,16 +176,14 @@ impl TaskQueue {
174176 }
175177 match self . queue . entry ( Reverse ( priority) ) {
176178 Entry :: Vacant ( e) => {
177- e. insert ( OneOrMoreTaskIds :: More ( Box :: new (
178- task_ids. iter ( ) . copied ( ) . collect ( ) ,
179- ) ) ) ;
179+ e. insert ( OneOrMoreTaskIds :: More ( task_ids. iter ( ) . copied ( ) . collect ( ) ) ) ;
180180 }
181181 Entry :: Occupied ( mut e) => match e. get_mut ( ) {
182182 OneOrMoreTaskIds :: One ( t_id) => {
183183 let mut new_ids: BTreeSet < _ > = Default :: default ( ) ;
184184 new_ids. insert ( * t_id) ;
185185 new_ids. extend ( task_ids. iter ( ) . copied ( ) ) ;
186- e. insert ( OneOrMoreTaskIds :: More ( Box :: new ( new_ids) ) ) ;
186+ e. insert ( OneOrMoreTaskIds :: More ( new_ids) ) ;
187187 }
188188 OneOrMoreTaskIds :: More ( tasks) => {
189189 tasks. extend ( task_ids. iter ( ) . copied ( ) ) ;
@@ -355,9 +355,7 @@ impl TaskQueue {
355355 }
356356
357357 pub fn take_one ( & mut self ) -> Option < TaskId > {
358- let Some ( mut entry) = self . queue . first_entry ( ) else {
359- return None ;
360- } ;
358+ let mut entry = self . queue . first_entry ( ) ?;
361359 match entry. get_mut ( ) {
362360 OneOrMoreTaskIds :: One ( x) => {
363361 let r = * x;
0 commit comments