-/* Copyright (c) 2010-2019. The SimGrid Team.
+/* Copyright (c) 2010-2020. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
namespace simgrid{
namespace smpi{
-class File{
+class File : public F2C{
MPI_Comm comm_;
int flags_;
simgrid::s4u::File* file_;
MPI_Win win_;
char* list_;
MPI_Errhandler errhandler_;
+ MPI_Datatype etype_;
+ MPI_Datatype filetype_;
+ std::string datarep_;
public:
File(MPI_Comm comm, const char *filename, int amode, MPI_Info info);
File(const File&) = delete;
File& operator=(const File&) = delete;
~File();
- int size();
- int get_position(MPI_Offset* offset);
- int get_position_shared(MPI_Offset* offset);
- int flags();
- MPI_Comm comm();
+ int size() const;
+ int get_position(MPI_Offset* offset) const;
+ int get_position_shared(MPI_Offset* offset) const;
+ int flags() const;
+ MPI_Comm comm() const;
int sync();
int seek(MPI_Offset offset, int whence);
int seek_shared(MPI_Offset offset, int whence);
+ int set_view(MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, const char* datarep, const Info* info);
+ int get_view(MPI_Offset* disp, MPI_Datatype* etype, MPI_Datatype* filetype, char* datarep) const;
MPI_Info info();
void set_info( MPI_Info info);
static int read(MPI_File fh, void *buf, int count,MPI_Datatype datatype, MPI_Status *status);
static int write_ordered(MPI_File fh, const void *buf, int count,MPI_Datatype datatype, MPI_Status *status);
template <int (*T)(MPI_File, void *, int, MPI_Datatype, MPI_Status *)> int op_all(void *buf, int count,MPI_Datatype datatype, MPI_Status *status);
static int close(MPI_File *fh);
- static int del(const char *filename, MPI_Info info);
+ static int del(const char* filename, const Info* info);
MPI_Errhandler errhandler();
void set_errhandler( MPI_Errhandler errhandler);
+ static File* f2c(int id);
};
/* Read_all, Write_all : loosely based on */
int size = comm_->size();
int rank = comm_-> rank();
MPI_Offset min_offset = file_->tell();
- MPI_Offset max_offset = (min_offset + count * datatype->size());//cheating, as we don't care about exact data location, we can skip extent
+ MPI_Offset max_offset = min_offset + count * datatype->get_extent();//cheating, as we don't care about exact data location, we can skip extent
MPI_Offset* min_offsets = new MPI_Offset[size];
MPI_Offset* max_offsets = new MPI_Offset[size];
simgrid::smpi::colls::allgather(&min_offset, 1, MPI_OFFSET, min_offsets, 1, MPI_OFFSET, comm_);