Merge branch 'charm' of charmgit:charm into charm
[charm.git] / examples / charm++ / fib / fib.cc
1 #include "fib.decl.h"
2
3 #define THRESHOLD 3
4
5 struct Main : public CBase_Main {
6   Main(CkArgMsg* m) { CProxy_Fib::ckNew(atoi(m->argv[1]), true, CProxy_Fib()); }
7 };
8
9 struct Fib : public CBase_Fib {
10   Fib_SDAG_CODE
11
12   CProxy_Fib parent; bool isRoot;
13
14   Fib(int n, bool isRoot_, CProxy_Fib parent_)
15     : parent(parent_), isRoot(isRoot_) {
16     __sdag_init();
17     calc(n);
18   }
19
20   int seqFib(int n) { return (n < 2) ? n : seqFib(n - 1) + seqFib(n - 2); }
21
22   void respond(int val) {
23     if (!isRoot) {
24       parent.response(val);
25       delete this;
26     } else {
27       CkPrintf("Fibonacci number is: %d\n", val);
28       CkExit();
29     }
30   }
31 };
32
33 #include "fib.def.h"
34