mclIvp* mclvGetIvp ( const mclVector* vec , long idx , const mclIvp* offset ) { mclIvp sought ; const mclp *base = offset ? offset : vec->ivps ; dim n_ivps = vec->n_ivps - (base - vec->ivps) ; mclpInstantiate(&sought, idx, 1.0) ; return (vec->n_ivps) ? bsearch(&sought, base, n_ivps, sizeof(mclIvp), mclpIdxCmp) : NULL ; }
mclVector* mclvInsertIdx ( mclVector* vec , long idx , double val ) { ofs offset ; if (!vec) { vec = mclvInstantiate(NULL, 1, NULL) ; mclpInstantiate(vec->ivps+0, idx, val) ; } else if ((offset = mclvGetIvpOffset(vec, idx, -1)) >= 0) vec->ivps[offset].val = val ; else { dim d = vec->n_ivps ; mclvResize(vec, d+1) ; while (d && vec->ivps[d-1].idx > idx) vec->ivps[d] = vec->ivps[d-1] , d-- ; vec->ivps[d].val = val ; vec->ivps[d].idx = idx ; } return vec ; }
void* mclpInit_v ( void* ivp ) { return mclpInstantiate(ivp, -1, 1.0) ; }
mclIvp* mclpCreate ( long idx , double value ) { return mclpInstantiate(NULL, idx, value) ; }
mclIvp* mclpInit ( mclIvp* ivp ) { return mclpInstantiate(ivp, -1, 1.0) ; }