tnode_split method

int tnode_split(
  1. int rank$5,
  2. dynamic k$6,
  3. dynamic v$3,
  4. List lparr$1,
  5. int li$1,
  6. List rparr$1,
  7. int ri$1,
  8. int cmp$4(
    1. dynamic,
    2. dynamic
    ),
)

Implementation

dc.int tnode_split(dc.int rank$5, dc.dynamic k$6, dc.dynamic v$3, dc.List lparr$1, dc.int li$1, dc.List rparr$1, dc.int ri$1, dc.int Function(dc.dynamic, dc.dynamic, ) cmp$4, ){
assert((){
late final dc.bool $if_$11;
if((lcoc_core.$EQ_.$_invoke$2((0==rank$5), arr.length.isEven, ))){
$if_$11=true;
}else{
$if_$11=false;
}
return $if_$11;
}(), (){
final dc.List<dc.dynamic> fl$43=(dc.List<dc.dynamic>.filled(3, (lcoc_core.symbol.$_invoke$2(null, "=", )), ));
final dc.List<dc.dynamic> fl$44=(dc.List<dc.dynamic>.filled(2, (lcoc_core.symbol.$_invoke$2(null, "zero?", )), ));
fl$44[1]=(lcoc_core.symbol.$_invoke$2(null, "rank", ));
final lcoc_core.PersistentList $79=lcoc_core.$_list_lit(fl$44, );
final dc.List<dc.dynamic> fl$45=(dc.List<dc.dynamic>.filled(4, const lcoc_core.Keyword(null, "line", 878494669, ), ));
fl$45[1]=7488;
fl$45[2]=const lcoc_core.Keyword(null, "column", 3362807310, );
fl$45[3]=16;
final lcoc_core.PersistentHashMap $80=lcoc_core.$_map_lit(fl$45, );
final dc.dynamic $81=lcoc_core.with_meta($79, $80, );
fl$43[1]=$81;
final dc.List<dc.dynamic> fl$46=(dc.List<dc.dynamic>.filled(2, (lcoc_core.symbol.$_invoke$2(null, "even?", )), ));
final dc.List<dc.dynamic> fl$47=(dc.List<dc.dynamic>.filled(2, (lcoc_core.symbol.$_invoke$2(null, "alength", )), ));
fl$47[1]=(lcoc_core.symbol.$_invoke$2(null, "arr", ));
final lcoc_core.PersistentList $83=lcoc_core.$_list_lit(fl$47, );
final dc.List<dc.dynamic> fl$48=(dc.List<dc.dynamic>.filled(4, const lcoc_core.Keyword(null, "line", 878494669, ), ));
fl$48[1]=7488;
fl$48[2]=const lcoc_core.Keyword(null, "column", 3362807310, );
fl$48[3]=36;
final lcoc_core.PersistentHashMap $84=lcoc_core.$_map_lit(fl$48, );
final dc.dynamic $85=lcoc_core.with_meta($83, $84, );
fl$46[1]=$85;
final lcoc_core.PersistentList $82=lcoc_core.$_list_lit(fl$46, );
final dc.List<dc.dynamic> fl$49=(dc.List<dc.dynamic>.filled(4, const lcoc_core.Keyword(null, "line", 878494669, ), ));
fl$49[1]=7488;
fl$49[2]=const lcoc_core.Keyword(null, "column", 3362807310, );
fl$49[3]=29;
final lcoc_core.PersistentHashMap $86=lcoc_core.$_map_lit(fl$49, );
final dc.dynamic $87=lcoc_core.with_meta($82, $86, );
fl$43[2]=$87;
final lcoc_core.PersistentList $78=lcoc_core.$_list_lit(fl$43, );
final dc.List<dc.dynamic> fl$50=(dc.List<dc.dynamic>.filled(4, const lcoc_core.Keyword(null, "line", 878494669, ), ));
fl$50[1]=7488;
fl$50[2]=const lcoc_core.Keyword(null, "column", 3362807310, );
fl$50[3]=13;
final lcoc_core.PersistentHashMap $88=lcoc_core.$_map_lit(fl$50, );
final dc.dynamic $89=lcoc_core.with_meta($78, $88, );
final dc.String $90=(lcoc_core.pr_str.$_invoke$1($89, ));
final dc.String $91=(lcoc_core.str.$_invoke$2("Assert failed: ", $90, ));
return $91;
}());
if((0==rank$5)){
final dc.int i$5=(this.tnode_leaf_search(k$6, cmp$4, ));
if(i$5.isEven){
final dc.int lcnt$1=(i$5~/2);
final dc.int rcnt$1=(cnt-lcnt$1);
final dc.int size$8472_$AUTO_$8=(i$5-0);
final dc.List<dc.dynamic> dest$8468_$AUTO_$8=(dc.List<dc.dynamic>.filled(size$8472_$AUTO_$8, null, ));
final dc.int to$8469_$AUTO_$13=i$5;
late final dc.int pos$8467_$AUTO_$30;
dc.int i$8470_$AUTO_$13=0;
dc.int j$8471_$AUTO_$13=0;
do {
if((j$8471_$AUTO_$13<to$8469_$AUTO_$13)){
final dc.dynamic v$8083_$AUTO_$22=(arr[j$8471_$AUTO_$13]);
dest$8468_$AUTO_$8[i$8470_$AUTO_$13]=v$8083_$AUTO_$22;
i$8470_$AUTO_$13=(1+i$8470_$AUTO_$13);
j$8471_$AUTO_$13=(1+j$8471_$AUTO_$13);
continue;
}
pos$8467_$AUTO_$30=i$8470_$AUTO_$13;
break;
} while(true);
final lcoc_core.TreapNode v$8083_$AUTO_$23=lcoc_core.TreapNode(lcnt$1, dest$8468_$AUTO_$8, );
lparr$1[li$1]=v$8083_$AUTO_$23;
final dc.int size$8472_$AUTO_$9=(2+(arr.length-(i$5+2)));
final dc.List<dc.dynamic> dest$8468_$AUTO_$9=(dc.List<dc.dynamic>.filled(size$8472_$AUTO_$9, null, ));
final dc.dynamic v$8083_$AUTO_$24=k$6;
dest$8468_$AUTO_$9[0]=v$8083_$AUTO_$24;
final dc.int pos$8467_$AUTO_$32=(1+0);
final dc.dynamic v$8083_$AUTO_$25=v$3;
dest$8468_$AUTO_$9[pos$8467_$AUTO_$32]=v$8083_$AUTO_$25;
final dc.int pos$8467_$AUTO_$33=(1+pos$8467_$AUTO_$32);
final dc.int to$8469_$AUTO_$14=arr.length;
late final dc.int pos$8467_$AUTO_$34;
dc.int i$8470_$AUTO_$14=pos$8467_$AUTO_$33;
dc.int j$8471_$AUTO_$14=(i$5+2);
do {
if((j$8471_$AUTO_$14<to$8469_$AUTO_$14)){
final dc.dynamic v$8083_$AUTO_$26=(arr[j$8471_$AUTO_$14]);
dest$8468_$AUTO_$9[i$8470_$AUTO_$14]=v$8083_$AUTO_$26;
i$8470_$AUTO_$14=(1+i$8470_$AUTO_$14);
j$8471_$AUTO_$14=(1+j$8471_$AUTO_$14);
continue;
}
pos$8467_$AUTO_$34=i$8470_$AUTO_$14;
break;
} while(true);
final lcoc_core.TreapNode v$8083_$AUTO_$27=lcoc_core.TreapNode(rcnt$1, dest$8468_$AUTO_$9, );
rparr$1[ri$1]=v$8083_$AUTO_$27;
return 0;
}
final dc.int i$6=(1+i$5);
final dc.int lcnt$2=(i$6~/2);
final dc.int rcnt$2=(1+(cnt-lcnt$2));
final dc.int size$8472_$AUTO_$10=(i$6-0);
final dc.List<dc.dynamic> dest$8468_$AUTO_$10=(dc.List<dc.dynamic>.filled(size$8472_$AUTO_$10, null, ));
final dc.int to$8469_$AUTO_$15=i$6;
late final dc.int pos$8467_$AUTO_$36;
dc.int i$8470_$AUTO_$15=0;
dc.int j$8471_$AUTO_$15=0;
do {
if((j$8471_$AUTO_$15<to$8469_$AUTO_$15)){
final dc.dynamic v$8083_$AUTO_$28=(arr[j$8471_$AUTO_$15]);
dest$8468_$AUTO_$10[i$8470_$AUTO_$15]=v$8083_$AUTO_$28;
i$8470_$AUTO_$15=(1+i$8470_$AUTO_$15);
j$8471_$AUTO_$15=(1+j$8471_$AUTO_$15);
continue;
}
pos$8467_$AUTO_$36=i$8470_$AUTO_$15;
break;
} while(true);
final lcoc_core.TreapNode v$8083_$AUTO_$29=lcoc_core.TreapNode(lcnt$2, dest$8468_$AUTO_$10, );
lparr$1[li$1]=v$8083_$AUTO_$29;
final dc.int size$8472_$AUTO_$11=(2+(arr.length-i$6));
final dc.List<dc.dynamic> dest$8468_$AUTO_$11=(dc.List<dc.dynamic>.filled(size$8472_$AUTO_$11, null, ));
final dc.dynamic v$8083_$AUTO_$30=k$6;
dest$8468_$AUTO_$11[0]=v$8083_$AUTO_$30;
final dc.int pos$8467_$AUTO_$38=(1+0);
final dc.dynamic v$8083_$AUTO_$31=v$3;
dest$8468_$AUTO_$11[pos$8467_$AUTO_$38]=v$8083_$AUTO_$31;
final dc.int pos$8467_$AUTO_$39=(1+pos$8467_$AUTO_$38);
final dc.int to$8469_$AUTO_$16=arr.length;
late final dc.int pos$8467_$AUTO_$40;
dc.int i$8470_$AUTO_$16=pos$8467_$AUTO_$39;
dc.int j$8471_$AUTO_$16=i$6;
do {
if((j$8471_$AUTO_$16<to$8469_$AUTO_$16)){
final dc.dynamic v$8083_$AUTO_$32=(arr[j$8471_$AUTO_$16]);
dest$8468_$AUTO_$11[i$8470_$AUTO_$16]=v$8083_$AUTO_$32;
i$8470_$AUTO_$16=(1+i$8470_$AUTO_$16);
j$8471_$AUTO_$16=(1+j$8471_$AUTO_$16);
continue;
}
pos$8467_$AUTO_$40=i$8470_$AUTO_$16;
break;
} while(true);
final lcoc_core.TreapNode v$8083_$AUTO_$33=lcoc_core.TreapNode(rcnt$2, dest$8468_$AUTO_$11, );
rparr$1[ri$1]=v$8083_$AUTO_$33;
return 1;
}
final dc.int i$7=(this.tnode_branch_search(k$6, cmp$4, ));
if(i$7.isOdd){
late final dc.dynamic lcnt$3;
dc.dynamic j$3=0;
dc.dynamic n$1=0;
do {
if(((j$3 as dc.num)<i$7)){
final dc.dynamic j$3tmp=((j$3 as dc.num)+2);
n$1=((n$1 as dc.num)+((arr[(j$3 as dc.int)]) as lcoc_core.TreapNode).cnt);
j$3=j$3tmp;
continue;
}
lcnt$3=n$1;
break;
} while(true);
final dc.num rcnt$3=(cnt-(lcnt$3 as dc.num));
final lcoc_core.TreapNode knode$1=((arr[(1+i$7)]) as lcoc_core.TreapNode);
final dc.int arg$2=(lcnt$3 as dc.int);
final dc.int size$8472_$AUTO_$12=(i$7-0);
final dc.List<dc.dynamic> dest$8468_$AUTO_$12=(dc.List<dc.dynamic>.filled(size$8472_$AUTO_$12, null, ));
final dc.int to$8469_$AUTO_$17=i$7;
late final dc.int pos$8467_$AUTO_$42;
dc.int i$8470_$AUTO_$17=0;
dc.int j$8471_$AUTO_$17=0;
do {
if((j$8471_$AUTO_$17<to$8469_$AUTO_$17)){
final dc.dynamic v$8083_$AUTO_$34=(arr[j$8471_$AUTO_$17]);
dest$8468_$AUTO_$12[i$8470_$AUTO_$17]=v$8083_$AUTO_$34;
i$8470_$AUTO_$17=(1+i$8470_$AUTO_$17);
j$8471_$AUTO_$17=(1+j$8471_$AUTO_$17);
continue;
}
pos$8467_$AUTO_$42=i$8470_$AUTO_$17;
break;
} while(true);
final lcoc_core.TreapNode v$8083_$AUTO_$35=lcoc_core.TreapNode(arg$2, dest$8468_$AUTO_$12, );
lparr$1[li$1]=v$8083_$AUTO_$35;
final dc.int arg$3=(rcnt$3 as dc.int);
final dc.int size$8472_$AUTO_$13=(1+(arr.length-(2+i$7)));
final dc.List<dc.dynamic> dest$8468_$AUTO_$13=(dc.List<dc.dynamic>.filled(size$8472_$AUTO_$13, null, ));
final lcoc_core.TreapNode v$8083_$AUTO_$36=(knode$1.tnode_set_leftmost((rank$5-1), k$6, v$3, ));
dest$8468_$AUTO_$13[0]=v$8083_$AUTO_$36;
final dc.int pos$8467_$AUTO_$44=(1+0);
final dc.int to$8469_$AUTO_$18=arr.length;
late final dc.int pos$8467_$AUTO_$45;
dc.int i$8470_$AUTO_$18=pos$8467_$AUTO_$44;
dc.int j$8471_$AUTO_$18=(2+i$7);
do {
if((j$8471_$AUTO_$18<to$8469_$AUTO_$18)){
final dc.dynamic v$8083_$AUTO_$37=(arr[j$8471_$AUTO_$18]);
dest$8468_$AUTO_$13[i$8470_$AUTO_$18]=v$8083_$AUTO_$37;
i$8470_$AUTO_$18=(1+i$8470_$AUTO_$18);
j$8471_$AUTO_$18=(1+j$8471_$AUTO_$18);
continue;
}
pos$8467_$AUTO_$45=i$8470_$AUTO_$18;
break;
} while(true);
final lcoc_core.TreapNode v$8083_$AUTO_$38=lcoc_core.TreapNode(arg$3, dest$8468_$AUTO_$13, );
rparr$1[ri$1]=v$8083_$AUTO_$38;
return 0;
}
final dc.int size$8472_$AUTO_$14=((1+i$7)-0);
final dc.List<dc.dynamic> dest$8468_$AUTO_$14=(dc.List<dc.dynamic>.filled(size$8472_$AUTO_$14, null, ));
final dc.int to$8469_$AUTO_$19=(1+i$7);
late final dc.int pos$8467_$AUTO_$47;
dc.int i$8470_$AUTO_$19=0;
dc.int j$8471_$AUTO_$19=0;
do {
if((j$8471_$AUTO_$19<to$8469_$AUTO_$19)){
final dc.dynamic v$8083_$AUTO_$39=(arr[j$8471_$AUTO_$19]);
dest$8468_$AUTO_$14[i$8470_$AUTO_$19]=v$8083_$AUTO_$39;
i$8470_$AUTO_$19=(1+i$8470_$AUTO_$19);
j$8471_$AUTO_$19=(1+j$8471_$AUTO_$19);
continue;
}
pos$8467_$AUTO_$47=i$8470_$AUTO_$19;
break;
} while(true);
final dc.List<dc.dynamic> larr$3=dest$8468_$AUTO_$14;
final dc.int size$8472_$AUTO_$15=(arr.length-i$7);
final dc.List<dc.dynamic> dest$8468_$AUTO_$15=(dc.List<dc.dynamic>.filled(size$8472_$AUTO_$15, null, ));
final dc.int to$8469_$AUTO_$20=arr.length;
late final dc.int pos$8467_$AUTO_$49;
dc.int i$8470_$AUTO_$20=0;
dc.int j$8471_$AUTO_$20=i$7;
do {
if((j$8471_$AUTO_$20<to$8469_$AUTO_$20)){
final dc.dynamic v$8083_$AUTO_$40=(arr[j$8471_$AUTO_$20]);
dest$8468_$AUTO_$15[i$8470_$AUTO_$20]=v$8083_$AUTO_$40;
i$8470_$AUTO_$20=(1+i$8470_$AUTO_$20);
j$8471_$AUTO_$20=(1+j$8471_$AUTO_$20);
continue;
}
pos$8467_$AUTO_$49=i$8470_$AUTO_$20;
break;
} while(true);
final dc.List<dc.dynamic> rarr$1=dest$8468_$AUTO_$15;
final dc.int cnt_inc$1=(((arr[i$7]) as lcoc_core.TreapNode).tnode_split((rank$5-1), k$6, v$3, larr$3, i$7, rarr$1, 0, cmp$4, ));
late final dc.dynamic lcnt$4;
dc.dynamic j$4=0;
dc.dynamic n$2=0;
do {
if(((j$4 as dc.num)<i$7)){
final dc.dynamic j$4tmp=((j$4 as dc.num)+2);
n$2=((n$2 as dc.num)+((larr$3[(j$4 as dc.int)]) as lcoc_core.TreapNode).cnt);
j$4=j$4tmp;
continue;
}
lcnt$4=n$2;
break;
} while(true);
final dc.num rcnt$4=(cnt-(lcnt$4 as dc.num));
final lcoc_core.TreapNode v$8083_$AUTO_$41=lcoc_core.TreapNode((lcnt$4 as dc.int), larr$3, );
lparr$1[li$1]=v$8083_$AUTO_$41;
final lcoc_core.TreapNode v$8083_$AUTO_$42=lcoc_core.TreapNode((rcnt$4 as dc.int), rarr$1, );
rparr$1[ri$1]=v$8083_$AUTO_$42;
return cnt_inc$1;
}