void lis_sort_id(LIS_INT is, LIS_INT ie, LIS_INT *i1, LIS_SCALAR *d1) { LIS_INT i,j; LIS_INT p,t1; LIS_INT v; LIS_SCALAR s1; if( ie <= is ) return; p = (is+ie)/2; v = i1[p]; lis_swap(i1[p],i1[ie],t1); lis_swap(d1[p],d1[ie],s1); i = is; j = ie; while(i<=j) { while(i1[i] < v) { i++; } while(i1[j] > v) { j--; } if( i<=j ) { lis_swap(i1[i],i1[j],t1); lis_swap(d1[i],d1[j],s1); i++; j--; } } lis_sort_id(is,j ,i1,d1); lis_sort_id(i ,ie,i1,d1); }
void lis_sortr_ii(LIS_INT is, LIS_INT ie, LIS_INT *i1, LIS_INT *i2) { LIS_INT i,j; LIS_INT p,t1,t2; LIS_INT v; if( ie <= is ) return; p = (is+ie)/2; v = i1[p]; lis_swap(i1[p],i1[ie],t1); lis_swap(i2[p],i2[ie],t2); i = is; j = ie; while(i<=j) { while(i1[i] > v) { i++; } while(i1[j] < v) { j--; } if( i<=j ) { lis_swap(i1[i],i1[j],t1); lis_swap(i2[i],i2[j],t2); i++; j--; } } lis_sortr_ii(is,j ,i1,i2); lis_sortr_ii(i ,ie,i1,i2); }
void lis_sort_dd(LIS_INT is, LIS_INT ie, LIS_SCALAR *d1, LIS_VECTOR *d2) { LIS_INT i,j; LIS_INT p; LIS_SCALAR v; LIS_SCALAR s1; LIS_VECTOR t1; if( ie <= is ) return; p = (is+ie)/2; v = d1[p]; lis_swap(d1[p],d1[ie],s1); lis_swap(d2[p],d2[ie],t1); i = is; j = ie; while(i<=j) { while(d1[i] < v) { i++; } while(d1[j] > v) { j--; } if( i<=j ) { lis_swap(d1[i],d1[j],s1); lis_swap(d2[i],d2[j],t1); i++; j--; } } lis_sort_dd(is,j ,d1,d2); lis_sort_dd(i ,ie,d1,d2); }
void lis_sort_id_block(LIS_INT is, LIS_INT ie, LIS_INT *i1, LIS_SCALAR *d1, LIS_INT bs) { LIS_INT i,j; LIS_INT p,t1; LIS_INT v; LIS_SCALAR s1[9]; if( ie <= is ) return; p = (is+ie)/2; v = i1[p]; lis_swap(i1[p],i1[ie],t1); memcpy(s1,&d1[bs*p],bs*sizeof(LIS_SCALAR)); memcpy(&d1[bs*p],&d1[bs*ie],bs*sizeof(LIS_SCALAR)); memcpy(&d1[bs*ie],s1,bs*sizeof(LIS_SCALAR)); i = is; j = ie; while(i<=j) { while(i1[i] < v) { i++; } while(i1[j] > v) { j--; } if( i<=j ) { lis_swap(i1[i],i1[j],t1); memcpy(s1,&d1[bs*i],bs*sizeof(LIS_SCALAR)); memcpy(&d1[bs*i],&d1[bs*j],bs*sizeof(LIS_SCALAR)); memcpy(&d1[bs*j],s1,bs*sizeof(LIS_SCALAR)); i++; j--; } } lis_sort_id_block(is,j ,i1,d1,bs); lis_sort_id_block(i ,ie,i1,d1,bs); }
void lis_sort_i(int is, int ie, int *i1) { int i,j; int p,t1; int v; if( ie <= is ) return; p = (is+ie)/2; v = i1[p]; lis_swap(i1[p],i1[ie],t1); i = is; j = ie; while(i<=j) { while(i1[i] < v) { i++; } while(i1[j] > v) { j--; } if( i<=j ) { lis_swap(i1[i],i1[j],t1); i++; j--; } } lis_sort_i(is,j ,i1); lis_sort_i(i ,ie,i1); }
void lis_sort_d(int is, int ie, LIS_SCALAR *d1) { int i,j; int p; LIS_SCALAR v; LIS_SCALAR s1; if( ie <= is ) return; p = (is+ie)/2; v = d1[p]; lis_swap(d1[p],d1[ie],s1); i = is; j = ie; while(i<=j) { while(d1[i] < v) { i++; } while(d1[j] > v) { j--; } if( i<=j ) { lis_swap(d1[i],d1[j],s1); i++; j--; } } lis_sort_d(is,j ,d1); lis_sort_d(i ,ie,d1); }
void lis_sort_iiid(int is, int ie, int *i1, int *i2, int *i3, LIS_SCALAR *d1) { int i,j; int p,t1,t2,t3; int v; LIS_SCALAR s1; if( ie <= is ) return; p = (is+ie)/2; v = i1[p]; lis_swap(i1[p],i1[ie],t1); lis_swap(i2[p],i2[ie],t2); lis_swap(i3[p],i3[ie],t3); lis_swap(d1[p],d1[ie],s1); i = is; j = ie; while(i<=j) { while(i1[i] < v) { i++; } while(i1[j] > v) { j--; } if( i<=j ) { lis_swap(i1[i],i1[j],t1); lis_swap(i2[i],i2[j],t2); lis_swap(i3[i],i3[j],t3); lis_swap(d1[i],d1[j],s1); i++; j--; } } lis_sort_iiid(is,j ,i1,i2,i3,d1); lis_sort_iiid(i ,ie,i1,i2,i3,d1); }
lis_bool lis_assign(PLIS pl, size_t count, const void *data, size_t data_size) { LIS lis; LIS_STATUS_INIT(ret, false); assert(lis_valid(pl)); lis_init(&lis); #ifdef LIS_QUICK_BUT_RISKY lis_resize(&lis, count, data, data_size); #else if (lis_resize(&lis, count, data, data_size)) #endif { lis_swap(&lis, pl); lis_destroy(&lis); LIS_STATUS_SET(ret, true); } assert(lis_valid(pl)); LIS_STATUS_RETURN(ret); } /* lis_assign */