@@ -12,7 +12,6 @@ import '../state/domain.dart';
1212import '../state/geometry.dart' ;
1313import '../state/helix.dart' ;
1414import '../state/position3d.dart' ;
15- import 'package:tuple/tuple.dart' ;
1615
1716import '../state/address.dart' ;
1817import '../actions/actions.dart' as actions;
@@ -60,7 +59,7 @@ List<actions.UndoableAction> get_helix_position_and_roll_actions(AppState state)
6059 var group = state.design.groups[group_name]! ;
6160 var geometry = group.geometry ?? state.design.geometry;
6261 List <Helix > helices = _get_helices_to_process (state, group);
63- List <Tuple2 < Address , Address > >? addresses = _get_addresses_to_process (state, helices);
62+ List <( Address , Address ) >? addresses = _get_addresses_to_process (state, helices);
6463 if (addresses == null ) {
6564 continue ;
6665 }
@@ -100,17 +99,17 @@ List<Helix> _get_helices_to_process(AppState state, HelixGroup group) {
10099/// on the two helices it connects.
101100/// returns null if two such crossovers are selected
102101/// if none are selected, finds the first (one with lowest offset on helix earlier in order in [helices] )
103- List <Tuple2 < Address , Address > >? _get_addresses_to_process (AppState state, List <Helix > helices) {
102+ List <( Address , Address ) >? _get_addresses_to_process (AppState state, List <Helix > helices) {
104103 var design = state.design;
105104 var selected_crossovers = state.ui_state.selectables_store.selected_crossovers;
106105 var addresses_of_selected_crossovers_by_prev_helix_idx =
107106 _get_addresses_of_selected_crossovers_by_prev_helix_idx (selected_crossovers, helices, design);
108107
109- List <Tuple2 < Address , Address > > addresses = [];
108+ List <( Address , Address ) > addresses = [];
110109 for (int i = 0 ; i < helices.length - 1 ; i++ ) {
111110 var helix_top = helices[i];
112111 var helix_bot = helices[i + 1 ];
113- var helix_idx_top_bot = Tuple2 < int , int > (helix_top.idx, helix_bot.idx);
112+ ( int , int ) helix_idx_top_bot = (helix_top.idx, helix_bot.idx);
114113 var addresses_crossovers_this_helices_pair =
115114 addresses_of_selected_crossovers_by_prev_helix_idx[helix_idx_top_bot]! ;
116115
@@ -126,12 +125,11 @@ Please select only one, or select none to default to the first crossover between
126125 return null ;
127126 } else if (addresses_crossovers_this_helices_pair.length == 1 ) {
128127 // first try selected crossovers between this pair of helices
129- address_top = addresses_crossovers_this_helices_pair.first.item1;
130- address_bot = addresses_crossovers_this_helices_pair.first.item2;
128+ (address_top, address_bot) = addresses_crossovers_this_helices_pair.first;
131129 } else {
132130 // otherwise if none are selected, find the addresses of first crossover between this pair of helices
133131 // using boolean scaffold/staple settings from user to possible ignore one of those types
134- Tuple2 < Address , Address > ? address_top_bot;
132+ ( Address , Address ) ? address_top_bot;
135133 bool use_scaffold = state.ui_state.default_crossover_type_scaffold_for_setting_helix_rolls;
136134 bool use_staple = state.ui_state.default_crossover_type_staple_for_setting_helix_rolls;
137135
@@ -151,50 +149,49 @@ Please select only one, or select none to default to the first crossover between
151149 util.async_alert (msg);
152150 return null ;
153151 }
154- address_top = address_top_bot.item1;
155- address_bot = address_top_bot.item2;
152+ (address_top, address_bot) = address_top_bot;
156153 }
157- addresses.add (Tuple2 < Address , Address > (address_top, address_bot));
154+ addresses.add ((address_top, address_bot));
158155 }
159156 return addresses;
160157}
161158
162159// "First" refers to having the lowest offset on helix h1.
163- Tuple2 < Address , Address > ? _first_crossover_addresses_between_helices (
160+ ( Address , Address ) ? _first_crossover_addresses_between_helices (
164161 Helix helix_top,
165162 Helix helix_bot,
166163 Design design, {
167164 required bool use_scaffold,
168165 required bool use_staple,
169166}) {
170- BuiltList <Tuple2 < Address , Crossover > > address_crossovers_on_top =
167+ BuiltList <( Address , Crossover ) > address_crossovers_on_top =
171168 design.address_crossover_pairs_by_helix_idx[helix_top.idx]! ;
172- BuiltList <Tuple2 < Address , Crossover > > address_crossovers_on_bot =
169+ BuiltList <( Address , Crossover ) > address_crossovers_on_bot =
173170 design.address_crossover_pairs_by_helix_idx[helix_bot.idx]! ;
174171
175172 // if not using scaffold or crossovers when finding leftmost, filter those out
176173 if (! use_scaffold) {
177174 address_crossovers_on_bot =
178175 address_crossovers_on_bot
179- .where ((address_crossover) => ! address_crossover.item2 .is_scaffold)
176+ .where ((address_crossover) => ! address_crossover.$2 .is_scaffold)
180177 .toBuiltList ();
181178 }
182179 if (! use_staple) {
183180 address_crossovers_on_bot =
184181 address_crossovers_on_bot
185- .where ((address_crossover) => address_crossover.item2 .is_scaffold)
182+ .where ((address_crossover) => address_crossover.$2 .is_scaffold)
186183 .toBuiltList ();
187184 }
188185
189186 // find first crossover on h1 that also goes to h2
190- for (Tuple2 < Address , Crossover > address_crossover_top in address_crossovers_on_top) {
191- Crossover crossover_top = address_crossover_top.item2 ;
187+ for (( Address , Crossover ) address_crossover_top in address_crossovers_on_top) {
188+ Crossover crossover_top = address_crossover_top.$2 ;
192189 for (var address_crossover_bot in address_crossovers_on_bot) {
193- var crossover_bot = address_crossover_bot.item2 ;
190+ var crossover_bot = address_crossover_bot.$2 ;
194191 if (crossover_bot == crossover_top) {
195- Address address_top = address_crossover_top.item1 ;
196- Address address_bot = address_crossover_bot.item1 ;
197- return Tuple2 < Address , Address > (address_top, address_bot);
192+ Address address_top = address_crossover_top.$1 ;
193+ Address address_bot = address_crossover_bot.$1 ;
194+ return (address_top, address_bot);
198195 }
199196 }
200197 }
@@ -213,20 +210,20 @@ Tuple2<Address, Address>? _first_crossover_addresses_between_helices(
213210// (7,5): [... (offset,crossover) pairs between 5 and 7, offset is where crossover touches helix 7]
214211// }
215212// Sorts each list by the offset on its first helix (first meaning first in order in helices)
216- Map <Tuple2 < int , int > , List <Tuple2 < Address , Address > >> _get_addresses_of_selected_crossovers_by_prev_helix_idx (
213+ Map <( int , int ) , List <( Address , Address ) >> _get_addresses_of_selected_crossovers_by_prev_helix_idx (
217214 BuiltSet <Crossover > selected_crossovers,
218215 List <Helix > helices,
219216 Design design,
220217) {
221218 // this is essentially what we return, but each crossover also carries with it the start offset of
222219 // the helix earlier in the ordering, which helps to sort the lists of crossovers before returning
223- Map <Tuple2 < int , int > , List <Tuple2 < Address , Address > >> addresses_top_bot_crossovers = {};
220+ Map <( int , int ) , List <( Address , Address ) >> addresses_top_bot_crossovers = {};
224221
225222 // initialize internal map to have empty lists
226223 for (int i = 0 ; i < helices.length - 1 ; i++ ) {
227224 int idx1 = helices[i].idx;
228225 int idx2 = helices[i + 1 ].idx;
229- var pair_idxs = Tuple2 < int , int > (idx1, idx2);
226+ ( int , int ) pair_idxs = (idx1, idx2);
230227 addresses_top_bot_crossovers[pair_idxs] = [];
231228 }
232229
@@ -240,8 +237,8 @@ Map<Tuple2<int, int>, List<Tuple2<Address, Address>>> _get_addresses_of_selected
240237 var next_dom = strand.substrands[crossover.next_domain_idx] as Domain ;
241238 var prev_idx = prev_dom.helix;
242239 var next_idx = next_dom.helix;
243- var pair_idxs = Tuple2 < int , int > (prev_idx, next_idx);
244- var pair_idxs_rev = Tuple2 < int , int > (next_idx, prev_idx);
240+ ( int , int ) pair_idxs = (prev_idx, next_idx);
241+ ( int , int ) pair_idxs_rev = (next_idx, prev_idx);
245242
246243 if (addresses_top_bot_crossovers.containsKey (pair_idxs) ||
247244 addresses_top_bot_crossovers.containsKey (pair_idxs_rev)) {
@@ -280,7 +277,7 @@ Map<Tuple2<int, int>, List<Tuple2<Address, Address>>> _get_addresses_of_selected
280277 }
281278 var address_top = Address (helix_idx: dom_top.helix, offset: offset_top, forward: dom_top.forward);
282279 var address_bot = Address (helix_idx: dom_bot.helix, offset: offset_bot, forward: dom_bot.forward);
283- addresses_top_bot_crossovers[pair_idxs]! .add (Tuple2 < Address , Address > (address_top, address_bot));
280+ addresses_top_bot_crossovers[pair_idxs]! .add ((address_top, address_bot));
284281 }
285282 }
286283
@@ -307,7 +304,7 @@ List<RollXY> _calculate_rolls_and_positions(
307304 Design design,
308305 Geometry geometry,
309306 List <Helix > helices,
310- List <Tuple2 < Address , Address > > addresses,
307+ List <( Address , Address ) > addresses,
311308 double first_roll,
312309) {
313310 assert (helices.length == addresses.length + 1 );
@@ -317,8 +314,8 @@ List<RollXY> _calculate_rolls_and_positions(
317314 List <RollXY > rollxys = [RollXY (roll: first_roll, x: x, y: y)];
318315
319316 for (int i = 0 ; i < addresses.length; i++ ) {
320- var address_top = addresses[i].item1 ;
321- var address_bot = addresses[i].item2;
317+ var ( address_top, address_bot) = addresses[i];
318+
322319 var roll = rollxys[i].roll;
323320 var x = rollxys[i].x;
324321 var y = rollxys[i].y;
0 commit comments