1
1

Move the generic part of the convertor initialization in a inlined function.

This commit was SVN r3893.
Этот коммит содержится в:
George Bosilca 2005-01-03 17:27:48 +00:00
родитель f87da25e34
Коммит 8b9b8cec9d
3 изменённых файлов: 37 добавлений и 54 удалений

Просмотреть файл

@ -371,6 +371,36 @@ int ompi_convertor_create_stack_at_begining( ompi_convertor_t* pConvertor, const
pConvertor->bConverted = 0;
return OMPI_SUCCESS;
}
static inline void
convertor_init_generic( ompi_convertor_t* pConv, const dt_desc_t* datatype, int count,
const void* pUserBuf )
{
uint32_t required_stack_length = datatype->btypes[DT_LOOP] + 3;
OBJ_RETAIN( datatype );
if( pConv->pDesc != datatype ) {
pConv->pDesc = (dt_desc_t*)datatype;
if( pConv->pStack != NULL ) {
if( pConv->stack_size > DT_STATIC_STACK_SIZE )
free( pConv->pStack );
}
pConv->pStack = pConv->static_stack;
pConv->stack_size = DT_STATIC_STACK_SIZE;
}
if( required_stack_length > pConv->stack_size ) {
assert( pConv->stack_size > DT_STATIC_STACK_SIZE );
pConv->stack_size = required_stack_length;
pConv->pStack = (dt_stack_t*)malloc(sizeof(dt_stack_t) * pConv->stack_size );
}
pConv->pBaseBuf = (void*)pUserBuf;
pConv->available_space = count * (datatype->ub - datatype->lb);
pConv->count = count;
pConv->converted = 0;
pConv->bConverted = 0;
}
#if defined(c_plusplus) || defined(__cplusplus)
}
#endif

Просмотреть файл

@ -756,35 +756,11 @@ int ompi_convertor_init_for_send( ompi_convertor_t* pConv,
int starting_pos,
memalloc_fct_t allocfn )
{
OBJ_RETAIN( datatype );
if( pConv->pDesc != datatype ) {
pConv->pDesc = (dt_desc_t*)datatype;
if( pConv->pStack != NULL ) {
if( pConv->stack_size > DT_STATIC_STACK_SIZE )
free( pConv->pStack );
}
pConv->pStack = NULL;
}
if( pConv->pStack == NULL ) {
pConv->stack_size = datatype->btypes[DT_LOOP] + 3;
if( pConv->stack_size > DT_STATIC_STACK_SIZE ) {
pConv->pStack = (dt_stack_t*)malloc(sizeof(dt_stack_t) * pConv->stack_size );
} else {
pConv->pStack = pConv->static_stack;
}
pConv->stack_pos = 0; /* just to be sure */
}
convertor_init_generic( pConv, datatype, count, pUserBuf );
pConv->flags = CONVERTOR_SEND | CONVERTOR_HOMOGENEOUS; /* by default set to homogeneous */
pConv->pBaseBuf = (void*)pUserBuf;
pConv->available_space = count * (datatype->ub - datatype->lb);
pConv->count = count;
pConv->pFunctions = ompi_ddt_copy_functions;
pConv->converted = 0;
pConv->bConverted = 0;
pConv->memAlloc_fn = allocfn;
pConv->pFunctions = ompi_ddt_copy_functions;
pConv->memAlloc_fn = allocfn;
/* Just to avoid complaint from the compiler */
pConv->fAdvance = ompi_convertor_pack_general;
pConv->fAdvance = ompi_convertor_pack_homogeneous_with_memcpy;

Просмотреть файл

@ -609,35 +609,12 @@ int ompi_convertor_init_for_recv( ompi_convertor_t* pConv, uint32_t flags,
const void* pUserBuf, int starting_point,
memalloc_fct_t allocfn )
{
OBJ_RETAIN( datatype );
if( pConv->pDesc != datatype ) {
pConv->pDesc = (dt_desc_t*)datatype;
pConv->flags = CONVERTOR_RECV;
if( pConv->pStack != NULL ) {
if( pConv->stack_size > DT_STATIC_STACK_SIZE )
free( pConv->pStack );
}
pConv->pStack = NULL;
}
if( pConv->pStack == NULL ) {
pConv->stack_size = datatype->btypes[DT_LOOP] + 3;
if( pConv->stack_size > DT_STATIC_STACK_SIZE ) {
pConv->pStack = (dt_stack_t*)malloc(sizeof(dt_stack_t) * pConv->stack_size );
} else {
pConv->pStack = pConv->static_stack;
}
pConv->stack_pos = 0; /* just to be sure */
}
convertor_init_generic( pConv, datatype, count, pUserBuf );
pConv->flags = CONVERTOR_RECV | CONVERTOR_HOMOGENEOUS;
pConv->pBaseBuf = (void*)pUserBuf;
pConv->available_space = count * (datatype->ub - datatype->lb);
pConv->count = count;
pConv->pFunctions = ompi_ddt_copy_functions;
pConv->converted = 0;
pConv->bConverted = 0;
pConv->fAdvance = ompi_convertor_unpack_general; /* TODO: just stop complaining */
pConv->fAdvance = ompi_convertor_unpack_homogeneous; /* default behaviour */
pConv->pFunctions = ompi_ddt_copy_functions;
pConv->fAdvance = ompi_convertor_unpack_general; /* TODO: just stop complaining */
pConv->fAdvance = ompi_convertor_unpack_homogeneous; /* default behaviour */
pConv->memAlloc_fn = allocfn;
/* TODO: work only on homogeneous architectures */