-/* Copyright (c) 2009-2021. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2009-2022. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
std::vector<int> integers_;
std::vector<MPI_Aint> addresses_;
std::vector<MPI_Datatype> datatypes_;
- Datatype_contents(int combiner,
- int number_of_integers, const int* integers,
- int number_of_addresses, const MPI_Aint* addresses,
- int number_of_datatypes, const MPI_Datatype* datatypes);
+ Datatype_contents(int combiner, int number_of_integers, const int* integers, int number_of_addresses,
+ const MPI_Aint* addresses, int number_of_datatypes, const MPI_Datatype* datatypes);
+ Datatype_contents(const Datatype_contents&) = delete;
+ Datatype_contents& operator=(const Datatype_contents&) = delete;
+ ~Datatype_contents();
};
class Datatype : public F2C, public Keyval{
int flags_;
int refcount_ = 1;
std::unique_ptr<Datatype_contents> contents_ = nullptr;
+ MPI_Datatype duplicated_datatype_ = MPI_DATATYPE_NULL;
protected:
template <typename... Args> void set_contents(Args&&... args)
Datatype(const Datatype&) = delete;
Datatype& operator=(const Datatype&) = delete;
~Datatype() override;
-
- const char* name() const { return name_.c_str(); }
+ std::string name() const override {return name_.empty() ? std::string("MPI_Datatype") : name_;}
size_t size() const { return size_; }
MPI_Aint lb() const { return lb_; }
MPI_Aint ub() const { return ub_; }
int flags() const { return flags_; }
int refcount() const { return refcount_; }
+ MPI_Datatype duplicated_datatype() const { return duplicated_datatype_; }
void ref();
static void unref(MPI_Datatype datatype);
bool is_basic() const;
static const char* encode(const Datatype* dt) { return dt->id.c_str(); }
static MPI_Datatype decode(const std::string& datatype_id);
- bool is_replayable() const;
void addflag(int flag);
int extent(MPI_Aint* lb, MPI_Aint* extent) const;
MPI_Aint get_extent() const { return ub_ - lb_; };