LIS_INT lis_vector_get_value(LIS_VECTOR v, LIS_INT i, LIS_SCALAR *value) { LIS_INT err,is,ie; LIS_DEBUG_FUNC_IN; err = lis_vector_check(v,LIS_VECTOR_CHECK_NULL); if( err ) return err; is = v->is; ie = v->ie; if( v->origin ) i--; if( i<is || i>=ie ) { if( v->origin ) { i++; is++; ie++; } LIS_SETERR3(LIS_ERR_ILL_ARG, "i(=%d) is less than %d or not less than %d\n",i,is,ie); return LIS_ERR_ILL_ARG; } *value = v->value[i-is]; LIS_DEBUG_FUNC_OUT; return LIS_SUCCESS; }
int lis_vector_get_values(LIS_VECTOR v, int start, int count, LIS_SCALAR value[]) { int err,n,gn,i,is,ie; LIS_DEBUG_FUNC_IN; err = lis_vector_check(v,LIS_VECTOR_CHECK_NULL); if( err ) return err; n = v->n; gn = v->gn; is = v->is; ie = v->ie; if( v->origin ) start--; if( start<is || start>=ie ) { if( v->origin ) { start++; is++; ie++; } LIS_SETERR3(LIS_ERR_ILL_ARG, "start(=%d) is less than %d or larger than %d\n",start,is,ie); return LIS_ERR_ILL_ARG; } if( (start-is+count)>n ) { LIS_SETERR3(LIS_ERR_ILL_ARG, "start(=%d) + count(=%d) exceeds the range of vector v(=%d).\n",start,count,ie); return LIS_ERR_ILL_ARG; } for(i=0;i<count;i++) { value[i] = v->value[start-is + i]; } LIS_DEBUG_FUNC_OUT; return LIS_SUCCESS; }
int lis_vector_set_value(int flag, int i, LIS_SCALAR value, LIS_VECTOR v) { int n,np,gn,is,ie; LIS_DEBUG_FUNC_IN; np = v->np; n = v->n; gn = v->gn; is = v->is; ie = v->ie; if( v->origin ) i--; if( i<is || i>=ie ) { if( v->origin ) { is++; ie++; i++; } LIS_SETERR3(LIS_ERR_ILL_ARG, "i(=%d) is less than %d or larger than %d\n",i,is,ie); return LIS_ERR_ILL_ARG; } if(v->status==LIS_VECTOR_NULL) { v->value = (LIS_SCALAR *)lis_malloc( np*sizeof(LIS_SCALAR),"lis_vector_set_value::v->value" ); if( NULL==v->value ) { LIS_SETERR_MEM(np*sizeof(LIS_SCALAR)); return LIS_OUT_OF_MEMORY; } v->is_copy = LIS_TRUE; v->status = LIS_VECTOR_ASSEMBLING; } if(flag==LIS_INS_VALUE) { v->value[i-is] = value; } else { v->value[i-is] += value; } LIS_DEBUG_FUNC_OUT; return LIS_SUCCESS; }
LIS_INT lis_vector_set_values2(LIS_INT flag, LIS_INT start, LIS_INT count, LIS_SCALAR value[], LIS_VECTOR v) { LIS_INT np,i,is,ie; LIS_DEBUG_FUNC_IN; np = v->np; is = v->is; ie = v->ie; if(v->status==LIS_VECTOR_NULL) { v->value = (LIS_SCALAR *)lis_malloc( np*sizeof(LIS_SCALAR),"lis_vector_set_values::v->value" ); if( NULL==v->value ) { LIS_SETERR_MEM(np*sizeof(LIS_SCALAR)); return LIS_OUT_OF_MEMORY; } v->is_copy = LIS_TRUE; v->status = LIS_VECTOR_ASSEMBLING; } if(flag==LIS_INS_VALUE) { for(i=0;i<count;i++) { start = i; if( v->origin ) start--; if( start<is || start>=ie ) { if( v->origin ) { is++; ie++; start++; i++; } LIS_SETERR3(LIS_ERR_ILL_ARG, "%d is less than %d or not less than %d\n",start,is,ie); return LIS_ERR_ILL_ARG; } v->value[start-is] = value[i]; } } else { for(i=0;i<count;i++) { start = i; if( v->origin ) start++; if( start<is || start>=ie ) { if( v->origin ) { is++; ie++; start++; i++; } LIS_SETERR3(LIS_ERR_ILL_ARG, "%d is less than %d or not less than %d\n",start,is,ie); return LIS_ERR_ILL_ARG; } v->value[start-is] += value[i]; } } LIS_DEBUG_FUNC_OUT; return LIS_SUCCESS; }