-/* Copyright (c) 2010, 2013-2017. The SimGrid Team.
+/* Copyright (c) 2010-2018. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#include "smpi_f2c.hpp"
#include <smpi/smpi.h>
+#include <map>
+#include <vector>
namespace simgrid{
namespace smpi{
class Group : public F2C{
private:
int size_;
- int *rank_to_index_map_;
- std::unordered_map<int, int> index_to_rank_map_;
+ /* This is actually a map from int to int. We could use
+ * std::map here, but looking up a value there costs O(log(n)).
+ * For a vector, this costs O(1). We hence go with the vector.
+ */
+ std::vector<simgrid::s4u::ActorPtr> rank_to_actor_map_;
+ std::map<simgrid::s4u::ActorPtr, int> actor_to_rank_map_;
+ std::vector<int> rank_to_index_map_;
+ std::vector<int> index_to_rank_map_;
+
int refcount_;
public:
explicit Group();
explicit Group(int size);
explicit Group(Group* origin);
- ~Group();
- void set_mapping(int index, int rank);
- int index(int rank);
+ void set_mapping(simgrid::s4u::ActorPtr actor, int rank);
int rank(int index);
+ simgrid::s4u::ActorPtr actor(int rank);
+ int rank(const simgrid::s4u::ActorPtr process);
void ref();
static void unref(MPI_Group group);
int size();