Added ability to register a set of global variables, which are
[charm.git] / src / libs / ck-libs / tcharm / tcharmc.h
1 /*
2 User-callable C API for TCharm library
3 Orion Sky Lawlor, olawlor@acm.org, 11/20/2001
4 */
5 #ifndef __TCHARM_H
6 #define __TCHARM_H
7
8 #include "pup_c.h"
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14
15 /*User callbacks: you define these functions*/
16 void TCharmUserNodeSetup(void);
17 void TCharmUserSetup(void);
18
19
20 /**** Routines you can call from UserNodeSetup: ****/
21
22 /*Register readonly global variables-- these will be broadcast
23 after init and available in driver.*/
24 typedef void (*TCpupReadonlyGlobal)(pup_er p);
25 void TCharmReadonlyGlobals(TCpupReadonlyGlobal fn);
26
27 /**** Routines you can call from UserSetup: ****/
28
29 /*Set the size of the thread stack*/
30 void TCharmSetStackSize(int newStackSize);
31
32 /*Create a new array of threads, which will be bound to by subsequent libraries*/
33 typedef void (*TCharmThreadStartFn)(void);
34 void TCharmCreate(int nThreads,TCharmThreadStartFn threadFn);
35
36 /*As above, but pass along (arbitrary) data to thread*/
37 typedef void (*TCharmThreadDataStartFn)(void *threadData);
38 void TCharmCreateData(int nThreads,TCharmThreadDataStartFn threadFn,
39                   void *threadData,int threadDataLen);
40
41 /*Get the unconsumed command-line arguments (C only; no Fortran)*/
42 char **TCharmArgv(void);
43 int TCharmArgc(void);
44
45 /*Get the number of chunks we expect based on the command line*/
46 int TCharmGetNumChunks(void);
47
48
49 /**** Routines you can call from the thread (driver) ****/
50 int TCharmElement(void);
51 int TCharmNumElements(void);
52
53 typedef void (*TCharmPupFn)(pup_er p,void *data);
54 int TCharmRegister(void *data,TCharmPupFn pfn);
55 void *TCharmGetUserdata(int id);
56 void TCharmMigrate(void);
57 void TCharmDone(void);
58
59
60 #ifdef __cplusplus
61 };
62 #endif
63 #endif /*def(thisHeader)*/
64