vsip_vview_d* (vsip_vcreate_d)( vsip_length n, vsip_memory_hint h) { vsip_block_d* b = VI_blockcreate_d((vsip_length)n, h); vsip_vview_d* v = (vsip_vview_d*)NULL; if(b != (vsip_block_d*)NULL){ v = vsip_vbind_d(b, (vsip_offset)0, (vsip_stride)1, n); if (v == (vsip_vview_d*)NULL) vsip_blockdestroy_d(b); } return v; }
vsip_cblock_d* (vsip_cblockcreate_d)( size_t N, vsip_memory_hint h) { vsip_cblock_d* b = (vsip_cblock_d*)malloc(sizeof(vsip_cblock_d)); if(b != (vsip_cblock_d*)NULL) b->hint = h; if(b != NULL){ b->kind = VSIP_VSIPL_BLOCK; b->admit = VSIP_ADMITTED_BLOCK; b->markings = VSIP_VALID_STRUCTURE_OBJECT; b->size = N; /* size in complex elements */ b->bindings = 0; #if defined(VSIP_DEFAULT_SPLIT) || defined(VSIP_ALWAYS_SPLIT) b->cstride = 1; /* native block are split */ b->R = VI_blockcreate_d(N,h); b->I = VI_blockcreate_d(N,h); if((b->R == NULL) || (b->I == NULL)){ VI_blockdestroy_d(b->R); VI_blockdestroy_d(b->I); free((void *)b); b = (vsip_cblock_d*)NULL; } else { /* modifiy real */ b->R->kind = VSIP_DERIVED_BLOCK; b->I->kind = VSIP_DERIVED_BLOCK; b->R->parent = b; b->I->parent = b; } #else b->cstride = 2; /* native block are interleaved */ b->R = VI_blockcreate_d(2 * N,h); b->I = (vsip_block_d*)malloc(sizeof(vsip_block_d)); if((b->R == NULL) || (b->I == NULL)){ VI_blockdestroy_d(b->R); free((void *)b->I); free((void *)b); b = (vsip_cblock_d*)NULL; } else { /* modifiy real */ b->R->kind = VSIP_DERIVED_BLOCK; b->R->rstride = b->cstride; b->R->size = N; /* size in real elements */ b->R->parent = b; /* initiate imaginary */ /* same as real except array data pointer one greater */ *b->I = *b->R; b->I->array++; } #endif #if defined(VSIP_ALWAYS_INTERLEAVED) b->data = ((void*)0); b->Rp = (vsip_scalar_d*)NULL; b->Ip = (vsip_scalar_d*)NULL; #elif defined(VSIP_ALWAYS_SPLIT) b->r_data = ((void*)0); b->i_data = ((void*)0); b->Rp = (vsip_scalar_d*)NULL; b->Ip = (vsip_scalar_d*)NULL; #endif b->a_scalar.r = 0.0; b->a_scalar.i = 0.0; b->a_zero.r = 0.0; b->a_zero.i = 0.0; b->a_one.r = 1.0; b->a_one.i = 0.0; b->a_imag_one.r = 0.0; b->a_imag_one.i = 1.0; } return b; }