#ifndef CSLIB_H
#define CSLIB_H
#include <stdint.h>
namespace CSLIB_NS {
class CSlib {
public:
int nsend,nrecv;
CSlib(int, const char *, const void *, const void *);
~CSlib();
void send(int, int);
void pack_int(int, int);
void pack_int64(int, int64_t);
void pack_float(int, float);
void pack_double(int, double);
void pack_string(int, char *);
void pack(int, int, int, void *);
void pack_parallel(int, int, int, int *, int, void *);
int recv(int &, int *&, int *&, int *&);
int unpack_int(int);
int64_t unpack_int64(int);
float unpack_float(int);
double unpack_double(int);
char *unpack_string(int);
void *unpack(int);
void unpack(int, void *);
void unpack_parallel(int, int, int *, int, void *);
int extract(int);
private:
uint64_t myworld; int me,nprocs;
int client,server;
int nfield,maxfield;
int msgID,fieldcount;
int nheader,maxheader;
int nbuf,maxbuf;
int maxglobal,maxfieldbytes;
int *fieldID,*fieldtype,*fieldlen,*fieldoffset;
int *header;
int *recvcounts,*displs; int *allids; char *buf; char *fielddata; const char *pad;
class Msg *msg;
void send_message();
void onefield(int, int, int &, int &);
int find_field(int, int);
void allocate_fields();
void deallocate_fields();
int64_t roundup(int64_t, int);
void *smalloc(int);
void *srealloc(void *, int);
void sfree(void *);
void error_all(const char *);
void error_one(const char *);
};
}
#endif