Adding communication library in src/ck-com and src/conv-com
[charm.git] / src / conv-com / petable.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 #ifndef PETABLE_H
9 #define PETABLE_H
10
11 #ifndef NULL
12 #define NULL 0
13 #endif
14
15 #define MSGQLEN 32
16
17 typedef struct ptinfo {
18   int refCount;
19   int magic;
20   int offset;
21   int freelistindex;
22   int msgsize;
23   void *msg;
24   struct ptinfo * next;
25 } PTinfo;
26
27 typedef struct {
28   int refCount;
29   int flag;
30   void * ptr;
31 } InNode;
32
33 class GList {
34  private:
35         InNode *InList;
36         int InListIndex;
37  public:
38         GList();
39         ~GList();
40         int AddWholeMsg(void *);
41         void setRefcount(int, int);
42         void DeleteWholeMsg(int);
43         void DeleteWholeMsg(int, int);
44         void GarbageCollect();
45         void Add(void *);
46         void Delete();
47 };
48
49 class PeTable {
50   private:
51     PTinfo ***PeList;
52     CkVec<PTinfo *> ptrvec;
53
54     PTinfo *PTFreeList;
55     //  char * CombBuffer;
56     int *msgnum, *MaxSize;
57     int NumPes;
58     int magic;
59     GList *FreeList;
60     int TotalMsgSize(int, int *, int *, int *);
61  public:
62     PeTable(int n);
63     ~PeTable();
64     void InsertMsgs(int npe, int *pelist, int nmsgs, void **msglist);
65     void InsertMsgs(int npe, int *pelist, int size, void *msg);
66     
67     void ExtractAndDeliverLocalMsgs(int pe);
68     
69     int UnpackAndInsert(void *in);
70     int UnpackAndInsertAll(void *in, int npes, int *pelist);
71     
72     char * ExtractAndPack(comID, int, int, int *pelist, int *length); 
73     char * ExtractAndPackAll(comID id, int ufield, int *length);
74     
75     void GarbageCollect();
76     void Purge();
77 };
78
79 #endif