@@ -11,6 +11,7 @@ use itertools::iproduct;
1111use serde:: Deserialize ;
1212use std:: collections:: { HashMap , HashSet } ;
1313use std:: path:: Path ;
14+ use std:: rc:: Rc ;
1415
1516mod availability;
1617use availability:: read_process_availabilities;
@@ -69,6 +70,8 @@ pub fn read_processes(
6970
7071 // Add data to Process objects
7172 for ( id, process) in processes. iter_mut ( ) {
73+ // This will always succeed as we know there will only be one reference to the process here
74+ let process = Rc :: get_mut ( process) . unwrap ( ) ;
7275 process. activity_limits = activity_limits
7376 . remove ( id)
7477 . with_context ( || format ! ( "Missing availabilities for process {id}" ) ) ?;
@@ -80,20 +83,14 @@ pub fn read_processes(
8083 . with_context ( || format ! ( "Missing parameters for process {id}" ) ) ?;
8184 }
8285
83- // Create ProcessMap
84- let mut process_map = ProcessMap :: new ( ) ;
85- for ( id, process) in processes {
86- process_map. insert ( id, process. into ( ) ) ;
87- }
88-
89- Ok ( process_map)
86+ Ok ( processes)
9087}
9188
9289fn read_processes_file (
9390 model_dir : & Path ,
9491 milestone_years : & [ u32 ] ,
9592 region_ids : & HashSet < RegionID > ,
96- ) -> Result < HashMap < ProcessID , Process > > {
93+ ) -> Result < ProcessMap > {
9794 let file_path = model_dir. join ( PROCESSES_FILE_NAME ) ;
9895 let processes_csv = read_csv ( & file_path) ?;
9996 read_processes_file_from_iter ( processes_csv, milestone_years, region_ids)
@@ -104,11 +101,11 @@ fn read_processes_file_from_iter<I>(
104101 iter : I ,
105102 milestone_years : & [ u32 ] ,
106103 region_ids : & HashSet < RegionID > ,
107- ) -> Result < HashMap < ProcessID , Process > >
104+ ) -> Result < ProcessMap >
108105where
109106 I : Iterator < Item = ProcessRaw > ,
110107{
111- let mut processes = HashMap :: new ( ) ;
108+ let mut processes = ProcessMap :: new ( ) ;
112109 for process_raw in iter {
113110 let start_year = process_raw. start_year . unwrap_or ( milestone_years[ 0 ] ) ;
114111 let end_year = process_raw
@@ -143,7 +140,7 @@ where
143140 } ;
144141
145142 ensure ! (
146- processes. insert( process_raw. id, process) . is_none( ) ,
143+ processes. insert( process_raw. id, process. into ( ) ) . is_none( ) ,
147144 "Duplicate process ID"
148145 ) ;
149146 }
0 commit comments