Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add checks for comms and datatypes as well
[simgrid.git] / src / smpi / mpi / smpi_datatype.cpp
index 1f233ba..b8c9812 100644 (file)
@@ -123,7 +123,7 @@ Datatype::Datatype(char* name, int ident, int size, MPI_Aint lb, MPI_Aint ub, in
 #endif
 }
 
-Datatype::Datatype(Datatype *datatype, int* ret) : name_(nullptr), lb_(datatype->lb_), ub_(datatype->ub_), flags_(datatype->flags_), refcount_(1)
+Datatype::Datatype(Datatype *datatype, int* ret) : name_(nullptr), size_(datatype->size_), lb_(datatype->lb_), ub_(datatype->ub_), flags_(datatype->flags_), refcount_(1)
 {
   flags_ &= ~DT_FLAG_PREDEFINED;
   *ret = MPI_SUCCESS;
@@ -177,7 +177,6 @@ Datatype::~Datatype(){
   xbt_free(name_);
 }
 
-
 void Datatype::ref(){
 
   refcount_++;
@@ -216,16 +215,6 @@ bool Datatype::is_basic()
   return (flags_ & DT_FLAG_BASIC);
 }
 
-const char* Datatype::encode(MPI_Datatype dt)
-{
-  return dt->id.c_str();
-}
-
-MPI_Datatype Datatype::decode(std::string datatype_id)
-{
-  return id2type_lookup.find(datatype_id)->second;
-}
-
 bool Datatype::is_replayable()
 {
   return (simgrid::instr::trace_format == simgrid::instr::TraceFormat::Ti) &&
@@ -233,45 +222,21 @@ bool Datatype::is_replayable()
           (this == MPI_SHORT) || (this == MPI_LONG) || (this == MPI_FLOAT));
 }
 
-size_t Datatype::size(){
-  return size_;
-}
-
-int Datatype::flags(){
-  return flags_;
-}
-
-int Datatype::refcount(){
-  return refcount_;
+MPI_Datatype Datatype::decode(const std::string& datatype_id)
+{
+  return id2type_lookup.find(datatype_id)->second;
 }
 
 void Datatype::addflag(int flag){
   flags_ &= flag;
 }
 
-MPI_Aint Datatype::lb(){
-  return lb_;
-}
-
-MPI_Aint Datatype::ub(){
-  return ub_;
-}
-
-char* Datatype::name(){
-  return name_;
-}
-
-
 int Datatype::extent(MPI_Aint * lb, MPI_Aint * extent){
   *lb = lb_;
   *extent = ub_ - lb_;
   return MPI_SUCCESS;
 }
 
-MPI_Aint Datatype::get_extent(){
-  return ub_ - lb_;
-}
-
 void Datatype::get_name(char* name, int* length){
   *length = strlen(name_);
   strncpy(name, name_, *length+1);
@@ -285,7 +250,7 @@ void Datatype::set_name(char* name){
 
 int Datatype::pack(void* inbuf, int incount, void* outbuf, int outcount, int* position,MPI_Comm comm){
   if (outcount - *position < incount*static_cast<int>(size_))
-    return MPI_ERR_BUFFER;
+    return MPI_ERR_OTHER;
   Datatype::copy(inbuf, incount, this, static_cast<char*>(outbuf) + *position, outcount, MPI_CHAR);
   *position += incount * size_;
   return MPI_SUCCESS;
@@ -293,13 +258,12 @@ int Datatype::pack(void* inbuf, int incount, void* outbuf, int outcount, int* po
 
 int Datatype::unpack(void* inbuf, int insize, int* position, void* outbuf, int outcount,MPI_Comm comm){
   if (outcount*static_cast<int>(size_)> insize)
-    return MPI_ERR_BUFFER;
+    return MPI_ERR_OTHER;
   Datatype::copy(static_cast<char*>(inbuf) + *position, insize, MPI_CHAR, outbuf, outcount, this);
   *position += outcount * size_;
   return MPI_SUCCESS;
 }
 
-
 int Datatype::copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
                        void *recvbuf, int recvcount, MPI_Datatype recvtype){
 
@@ -336,11 +300,11 @@ int Datatype::copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 }
 
 //Default serialization method : memcpy.
-void Datatype::serialize( void* noncontiguous_buf, void *contiguous_buf, int count){
+void Datatype::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_;
   memcpy(contiguous_buf_char, noncontiguous_buf_char, count*size_);
-
 }
 
 void Datatype::unserialize( void* contiguous_buf, void *noncontiguous_buf, int count, MPI_Op op){