Replace TCharmGetArgv (which only worked during startup on processor 0)
[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 number of chunks we expect based on the command line*/
42 int TCharmGetNumChunks(void);
43
44
45 /**** Routines you can call from the thread (driver) ****/
46 int TCharmElement(void);
47 int TCharmNumElements(void);
48 void TCharmBarrier(void);
49
50 typedef void (*TCharmPupFn)(pup_er p,void *data);
51 int TCharmRegister(void *data,TCharmPupFn pfn);
52 void *TCharmGetUserdata(int id);
53 void TCharmMigrate(void);
54 void TCharmDone(void);
55
56 /*Get the local wall clock.  Unlike CkWalltimer, is
57   monotonically increasing, even with migration and 
58   unsynchronized clocks. */
59 double TCharmWallTimer(void);
60
61
62 /*Standalone startup routine*/
63 void TCharmInit(int *argc,char ***argv);
64
65 #ifdef __cplusplus
66 };
67 #endif
68 #endif /*def(thisHeader)*/
69