Datatype::unref(old_type_);
}
-void Type_Contiguous::ref(){
- old_type_->ref();
-};
void Type_Contiguous::serialize( void* noncontiguous_buf, void *contiguous_buf,
int count){
char* contiguous_buf_char = static_cast<char*>(contiguous_buf);
- char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf)+lb_;
+ char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf)+lb();
memcpy(contiguous_buf_char, noncontiguous_buf_char, count * block_count_ * old_type_->size());
}
void Type_Contiguous::unserialize( void* contiguous_buf, void *noncontiguous_buf,
int count, MPI_Op op){
char* contiguous_buf_char = static_cast<char*>(contiguous_buf);
- char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf)+lb_;
+ char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf)+lb();
int n= count*block_count_;
if(op!=MPI_OP_NULL)
op->apply( contiguous_buf_char, noncontiguous_buf_char, &n, old_type_);
Datatype::unref(old_type_);
}
-void Type_Vector::ref(){
- old_type_->ref();
-}
-
void Type_Vector::serialize( void* noncontiguous_buf, void *contiguous_buf,
int count){
Type_Hvector::~Type_Hvector(){
Datatype::unref(old_type_);
}
-void Type_Hvector::ref(){
- old_type_->ref();
-}
void Type_Hvector::serialize( void* noncontiguous_buf, void *contiguous_buf,
int count){
Type_Indexed::~Type_Indexed(){
Datatype::unref(old_type_);
- if(refcount_==0){
+ if(refcount()==0){
delete[] block_lengths_;
delete[] block_indices_;
}
}
-void Type_Indexed::ref(){
- old_type_->ref();
-}
void Type_Indexed::serialize( void* noncontiguous_buf, void *contiguous_buf,
int count){
Type_Hindexed::~Type_Hindexed(){
Datatype::unref(old_type_);
- if(refcount_==0){
+ if(refcount()==0){
delete[] block_lengths_;
delete[] block_indices_;
}
}
-void Type_Hindexed::ref(){
- old_type_->ref();
-}
void Type_Hindexed::serialize( void* noncontiguous_buf, void *contiguous_buf,
int count){
char* contiguous_buf_char = static_cast<char*>(contiguous_buf);
for (int i = 0; i < block_count_; i++) {
Datatype::unref(old_types_[i]);
}
- if(refcount_==0){
+ if(refcount()==0){
delete[] block_lengths_;
delete[] block_indices_;
delete[] old_types_;
}
}
-void Type_Struct::ref(){
- for (int i = 0; i < block_count_; i++) {
- old_types_[i]->ref();
- }
-}
void Type_Struct::serialize( void* noncontiguous_buf, void *contiguous_buf,
int count){
else
noncontiguous_buf_char += block_lengths_[i]*old_types_[i]->get_extent();
}
- noncontiguous_buf=reinterpret_cast<void*>(noncontiguous_buf_char);
+ noncontiguous_buf=static_cast<void*>(noncontiguous_buf_char);
}
}