@@ -195,108 +195,83 @@ private static final <V, A> FingerTree<V, A> deepR(final Measured<V, A> measured
195195 }
196196 }
197197
198- private static <V , A > FingerTree <V , Node <V , A >> addDigits0 (final Measured <V , A > m , final FingerTree <V , Node <V , A >> m1 ,
199- final Digit <V , A > s1 , final Digit <V , A > p2 ,
200- final FingerTree <V , Node <V , A >> m2 ) {
201- final MakeTree <V , A > mk = mkTree (m );
202- return s1 .match (new F <One <V , A >, FingerTree <V , Node <V , A >>>() {
203- public FingerTree <V , Node <V , A >> f (final One <V , A > one1 ) {
204- return p2 .match (new F <One <V , A >, FingerTree <V , Node <V , A >>>() {
205- public FingerTree <V , Node <V , A >> f (final One <V , A > one2 ) {
206- return append1 (m , m1 , mk .node2 (one1 .value (), one2 .value ()), m2 );
207- }
208- }, new F <Two <V , A >, FingerTree <V , Node <V , A >>>() {
209- public FingerTree <V , Node <V , A >> f (final Two <V , A > two2 ) {
210- final V2 <A > vs = two2 .values ();
211- return append1 (m , m1 , mk .node3 (one1 .value (), vs ._1 (), vs ._2 ()), m2 );
212- }
213- }, new F <Three <V , A >, FingerTree <V , Node <V , A >>>() {
214- public FingerTree <V , Node <V , A >> f (final Three <V , A > three ) {
215- final V3 <A > vs = three .values ();
216- return append2 (m , m1 , mk .node2 (one1 .value (), vs ._1 ()), mk .node2 (vs ._2 (), vs ._3 ()), m2 );
217- }
218- }, new F <Four <V , A >, FingerTree <V , Node <V , A >>>() {
219- public FingerTree <V , Node <V , A >> f (final Four <V , A > four ) {
220- final V4 <A > vs = four .values ();
221- return append2 (m , m1 , mk .node3 (one1 .value (), vs ._1 (), vs ._2 ()), mk .node2 (vs ._3 (), vs ._4 ()), m2 );
222- }
223- });
224- }
225- }, new F <Two <V , A >, FingerTree <V , Node <V , A >>>() {
226- public FingerTree <V , Node <V , A >> f (final Two <V , A > two1 ) {
227- final V2 <A > v1 = two1 .values ();
228- return p2 .match (new F <One <V , A >, FingerTree <V , Node <V , A >>>() {
229- public FingerTree <V , Node <V , A >> f (final One <V , A > one ) {
230- return append1 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), one .value ()), m2 );
231- }
232- }, new F <Two <V , A >, FingerTree <V , Node <V , A >>>() {
233- public FingerTree <V , Node <V , A >> f (final Two <V , A > two2 ) {
234- final V2 <A > v2 = two2 .values ();
235- return append2 (m , m1 , mk .node2 (v1 ._1 (), v1 ._2 ()), mk .node2 (v2 ._1 (), v2 ._2 ()), m2 );
236- }
237- }, new F <Three <V , A >, FingerTree <V , Node <V , A >>>() {
238- public FingerTree <V , Node <V , A >> f (final Three <V , A > three ) {
239- final V3 <A > v2 = three .values ();
240- return append2 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v2 ._1 ()), mk .node2 (v2 ._2 (), v2 ._3 ()), m2 );
241- }
242- }, new F <Four <V , A >, FingerTree <V , Node <V , A >>>() {
243- public FingerTree <V , Node <V , A >> f (final Four <V , A > four ) {
244- final V4 <A > v2 = four .values ();
245- return append2 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v2 ._1 ()), mk .node3 (v2 ._2 (), v2 ._3 (), v2 ._4 ()), m2 );
246- }
247- });
248- }
249- }, new F <Three <V , A >, FingerTree <V , Node <V , A >>>() {
250- public FingerTree <V , Node <V , A >> f (final Three <V , A > three1 ) {
251- final V3 <A > v1 = three1 .values ();
252- return p2 .match (new F <One <V , A >, FingerTree <V , Node <V , A >>>() {
253- public FingerTree <V , Node <V , A >> f (final One <V , A > one ) {
254- return append2 (m , m1 , mk .node2 (v1 ._1 (), v1 ._2 ()), mk .node2 (v1 ._3 (), one .value ()), m2 );
255- }
256- }, new F <Two <V , A >, FingerTree <V , Node <V , A >>>() {
257- public FingerTree <V , Node <V , A >> f (final Two <V , A > two ) {
258- final V2 <A > v2 = two .values ();
259- return append2 (m , m1 , mk .node3 (v1 ), mk .node2 (v2 ), m2 );
260- }
261- }, new F <Three <V , A >, FingerTree <V , Node <V , A >>>() {
262- public FingerTree <V , Node <V , A >> f (final Three <V , A > three2 ) {
263- return append2 (m , m1 , mk .node3 (v1 ), mk .node3 (three2 .values ()), m2 );
264- }
265- }, new F <Four <V , A >, FingerTree <V , Node <V , A >>>() {
266- public FingerTree <V , Node <V , A >> f (final Four <V , A > four ) {
267- return append3 (m , m1 , mk .node3 (v1 ), mk .node2 (four .values ()._1 (), four .values ()._2 ()),
268- mk .node2 (four .values ()._3 (), four .values ()._4 ()), m2 );
269- }
270- });
271- }
272- }, new F <Four <V , A >, FingerTree <V , Node <V , A >>>() {
273- public FingerTree <V , Node <V , A >> f (final Four <V , A > four1 ) {
274- final V4 <A > v1 = four1 .values ();
275- return p2 .match (new F <One <V , A >, FingerTree <V , Node <V , A >>>() {
276- public FingerTree <V , Node <V , A >> f (final One <V , A > one ) {
277- return append2 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v1 ._3 ()), mk .node2 (v1 ._4 (), one .value ()), m2 );
278- }
279- }, new F <Two <V , A >, FingerTree <V , Node <V , A >>>() {
280- public FingerTree <V , Node <V , A >> f (final Two <V , A > two ) {
281- final V2 <A > v2 = two .values ();
282- return append2 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v1 ._3 ()), mk .node3 (v1 ._4 (), v2 ._1 (), v2 ._2 ()), m2 );
283- }
284- }, new F <Three <V , A >, FingerTree <V , Node <V , A >>>() {
285- public FingerTree <V , Node <V , A >> f (final Three <V , A > three ) {
286- final V3 <A > v2 = three .values ();
287- return append3 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v1 ._3 ()), mk .node2 (v1 ._4 (), v2 ._1 ()),
288- mk .node2 (v2 ._2 (), v2 ._3 ()), m2 );
289- }
290- }, new F <Four <V , A >, FingerTree <V , Node <V , A >>>() {
291- public FingerTree <V , Node <V , A >> f (final Four <V , A > four2 ) {
292- final V4 <A > v2 = four2 .values ();
293- return append3 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v1 ._3 ()), mk .node3 (v1 ._4 (), v2 ._1 (), v2 ._2 ()),
294- mk .node2 (v2 ._3 (), v2 ._4 ()), m2 );
295- }
296- });
297- }
298- });
299- }
198+ private static <V , A > FingerTree <V , Node <V , A >> addDigits0 (
199+ final Measured <V , A > m , final FingerTree <V , Node <V , A >> m1 ,
200+ final Digit <V , A > s1 , final Digit <V , A > p2 ,
201+ final FingerTree <V , Node <V , A >> m2 ) {
202+
203+ final MakeTree <V , A > mk = mkTree (m );
204+ return s1 .match (
205+ one1 -> {
206+ return p2 .match (
207+ one2 -> append1 (m , m1 , mk .node2 (one1 .value (), one2 .value ()), m2 ),
208+ two2 -> {
209+ final V2 <A > vs = two2 .values ();
210+ return append1 (m , m1 , mk .node3 (one1 .value (), vs ._1 (), vs ._2 ()), m2 );
211+ },
212+ three -> {
213+ final V3 <A > vs = three .values ();
214+ return append2 (m , m1 , mk .node2 (one1 .value (), vs ._1 ()), mk .node2 (vs ._2 (), vs ._3 ()), m2 );
215+ },
216+ four -> {
217+ final V4 <A > vs = four .values ();
218+ return append2 (m , m1 , mk .node3 (one1 .value (), vs ._1 (), vs ._2 ()), mk .node2 (vs ._3 (), vs ._4 ()), m2 );
219+ }
220+ );
221+ },
222+ two1 -> {
223+ final V2 <A > v1 = two1 .values ();
224+ return p2 .match (
225+ one -> append1 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), one .value ()), m2 ),
226+ two2 -> {
227+ final V2 <A > v2 = two2 .values ();
228+ return append2 (m , m1 , mk .node2 (v1 ._1 (), v1 ._2 ()), mk .node2 (v2 ._1 (), v2 ._2 ()), m2 );
229+ },
230+ three -> {
231+ final V3 <A > v2 = three .values ();
232+ return append2 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v2 ._1 ()), mk .node2 (v2 ._2 (), v2 ._3 ()), m2 );
233+ },
234+ four -> {
235+ final V4 <A > v2 = four .values ();
236+ return append2 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v2 ._1 ()), mk .node3 (v2 ._2 (), v2 ._3 (), v2 ._4 ()), m2 );
237+ }
238+ );
239+ },
240+ three1 -> {
241+ final V3 <A > v1 = three1 .values ();
242+ return p2 .match (
243+ one -> append2 (m , m1 , mk .node2 (v1 ._1 (), v1 ._2 ()), mk .node2 (v1 ._3 (), one .value ()), m2 ),
244+ two -> {
245+ final V2 <A > v2 = two .values ();
246+ return append2 (m , m1 , mk .node3 (v1 ), mk .node2 (v2 ), m2 );
247+ },
248+ three2 -> append2 (m , m1 , mk .node3 (v1 ), mk .node3 (three2 .values ()), m2 ),
249+ four -> append3 (m , m1 , mk .node3 (v1 ),
250+ mk .node2 (four .values ()._1 (), four .values ()._2 ()),
251+ mk .node2 (four .values ()._3 (), four .values ()._4 ()), m2
252+ )
253+ );
254+ },
255+ four1 -> {
256+ final V4 <A > v1 = four1 .values ();
257+ return p2 .match (
258+ one -> append2 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v1 ._3 ()), mk .node2 (v1 ._4 (), one .value ()), m2 ),
259+ two -> {
260+ final V2 <A > v2 = two .values ();
261+ return append2 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v1 ._3 ()), mk .node3 (v1 ._4 (), v2 ._1 (), v2 ._2 ()), m2 );
262+ },
263+ three -> {
264+ final V3 <A > v2 = three .values ();
265+ return append3 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v1 ._3 ()), mk .node2 (v1 ._4 (), v2 ._1 ()), mk .node2 (v2 ._2 (), v2 ._3 ()), m2 );
266+ },
267+ four2 -> {
268+ final V4 <A > v2 = four2 .values ();
269+ return append3 (m , m1 , mk .node3 (v1 ._1 (), v1 ._2 (), v1 ._3 ()), mk .node3 (v1 ._4 (), v2 ._1 (), v2 ._2 ()), mk .node2 (v2 ._3 (), v2 ._4 ()), m2 );
270+ }
271+ );
272+ }
273+ );
274+ }
300275
301276 private static <V , A > FingerTree <V , Node <V , A >> append1 (final Measured <V , A > m , final FingerTree <V , Node <V , A >> xs ,
302277 final Node <V , A > a , final FingerTree <V , Node <V , A >> ys ) {
0 commit comments