New interfaces for `usesTrap' and `canUseExtraSlot'.
[dyninst.git] / igen / tests / advancedS.C
1
2 #include "class.xdr.SRVR.h"
3
4 int signal = 0;
5
6 int metricEq (metric *a, metric *b) {
7   if (!a || !b)
8     return 0;
9   if (a->i != b->i)
10     return 0;
11   if (a->j != b->j)
12     return 0;
13   return 1;
14 }
15
16 // I am started by the client
17 main()
18 {
19   test *tp;
20   metric *pM, *rM, M;
21
22   M.i = 9;  M.j = 4;
23   // fd 0 is set up for the socket with the client
24   tp = new test(0, NULL, NULL);
25
26   while (1) {
27     tp->mainLoop();
28     // signal gets set on an upcall
29     if (signal) {
30       pM = tp->echoMetricP(&M);
31       if (metricEq(pM, &M)) 
32         tp->upcallOK();
33       else
34         tp->upcallNotOK();
35       rM = tp->echoMetricPF(&M);
36       if (metricEq(rM, &M)) 
37         tp->upcallOK();
38       else
39         tp->upcallNotOK();
40       delete pM;
41       delete rM;
42       tp->signalUpcallsDone();
43     }
44   }
45 }
46
47 intStruct test::echoIntStruct(intStruct parm)
48 {
49         return (parm);
50 }
51
52 twoStruct test::echoTwoStruct(twoStruct parm)
53 {
54         return parm;
55 }
56
57 intStruct *test::echoIntStructP(intStruct *parm)
58 {
59         return (parm);
60 }
61
62 twoStruct *test::echoTwoStructP(twoStruct *parm)
63 {
64         return parm;
65 }
66
67 metric test::testClass(metric parm)
68 {
69     return parm;
70 }
71
72 metric *test::testClassPtr(metric_PTR parm)
73 {
74     return (parm);
75 }
76
77 void test::quit()
78 {
79     delete this;
80     exit(0);
81 }
82
83 metricA test::echoMetricA(metricA parm)
84 {
85   return parm;
86 }
87
88 metricB test::echoMetricB(metricB parm)
89 {
90   return parm;
91 }
92
93 metric *test::echoMetricPtrStatic (metric parm)
94 {
95   metric *p;
96
97   p = new metric;
98   *p = parm;
99   return p;
100 }
101
102 metric *test::echoMetricPtrPtr (metric *parm)
103 {
104   return parm;
105 }
106
107 void test::startUpcalls() {
108   signal = 1;
109 }
110
111