int ret=MPI_SUCCESS;
*new_t= xbt_new(s_smpi_mpi_datatype_t,1);
memcpy(*new_t, datatype, sizeof(s_smpi_mpi_datatype_t));
+ (*new_t)->in_use=1;
+ (*new_t)->flags &= ~DT_FLAG_PREDEFINED;
if (datatype->sizeof_substruct){
(*new_t)->substruct=xbt_malloc(datatype->sizeof_substruct);
memcpy((*new_t)->substruct, datatype->substruct, datatype->sizeof_substruct);
if(elem && elem->copy_fn!=MPI_NULL_COPY_FN){
ret = elem->copy_fn(datatype, *key, NULL, value_in, &value_out, &flag );
if(ret!=MPI_SUCCESS){
+ smpi_datatype_unuse(*new_t);
*new_t=MPI_DATATYPE_NULL;
return ret;
}
}
void free_contiguous(MPI_Datatype* d){
- smpi_datatype_unuse(((s_smpi_mpi_indexed_t *)(*d)->substruct)->old_type);
+ smpi_datatype_unuse(((s_smpi_mpi_contiguous_t *)(*d)->substruct)->old_type);
}
void use_contiguous(MPI_Datatype* d){
- smpi_datatype_use(((s_smpi_mpi_indexed_t *)(*d)->substruct)->old_type);
+ smpi_datatype_use(((s_smpi_mpi_contiguous_t *)(*d)->substruct)->old_type);
}
/* Create a Sub type contiguous to be able to serialize and unserialize it the structure s_smpi_mpi_contiguous_t is
//do nothing for vector types
void free_hvector(MPI_Datatype* d){
- smpi_datatype_unuse(((s_smpi_mpi_indexed_t *)(*d)->substruct)->old_type);
+ smpi_datatype_unuse(((s_smpi_mpi_hvector_t *)(*d)->substruct)->old_type);
}
void use_hvector(MPI_Datatype* d){
- smpi_datatype_use(((s_smpi_mpi_indexed_t *)(*d)->substruct)->old_type);
+ smpi_datatype_use(((s_smpi_mpi_hvector_t *)(*d)->substruct)->old_type);
}
int smpi_datatype_hvector(int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype* new_type)
new_t->base.unserialize = &unserialize_indexed;
new_t->base.subtype_free = &free_indexed;
new_t->base.subtype_use = &use_indexed;
- //TODO : add a custom function for each time to clean these
new_t->block_lengths= xbt_new(int, block_count);
new_t->block_indices= xbt_new(int, block_count);
int i;
}
void use_hindexed(MPI_Datatype* type){
- smpi_datatype_use(((s_smpi_mpi_indexed_t *)(*type)->substruct)->old_type);
+ smpi_datatype_use(((s_smpi_mpi_hindexed_t *)(*type)->substruct)->old_type);
}
/* Create a Sub type hindexed to be able to serialize and unserialize it the structure s_smpi_mpi_hindexed_t is derived
new_t->base.unserialize = &unserialize_hindexed;
new_t->base.subtype_free = &free_hindexed;
new_t->base.subtype_use = &use_hindexed;
- //TODO : add a custom function for each time to clean these
new_t->block_lengths= xbt_new(int, block_count);
new_t->block_indices= xbt_new(MPI_Aint, block_count);
int i;
new_t->base.unserialize = &unserialize_struct;
new_t->base.subtype_free = &free_struct;
new_t->base.subtype_use = &use_struct;
- //TODO : add a custom function for each time to clean these
new_t->block_lengths= xbt_new(int, block_count);
new_t->block_indices= xbt_new(MPI_Aint, block_count);
new_t->old_types= xbt_new(MPI_Datatype, block_count);
new_t->old_types[i]=old_types[i];
smpi_datatype_use(new_t->old_types[i]);
}
- //new_t->block_lengths = block_lengths;
- //new_t->block_indices = block_indices;
new_t->block_count = block_count;
- //new_t->old_types = old_types;
return new_t;
}