dol: initial dol commit
[jump.git] / dol / src / dol / visitor / PipeAndFilter / lib / dolSupport.cpp
1 #include "dolSupport.h"\r
2 #include "ProcessWrapper.h"\r
3 \r
4 /**\r
5  *\r
6  */\r
7 unsigned write(void *port, void *buf, unsigned len, DOLProcess *process)\r
8 {\r
9     Fifo *fifo = static_cast<Fifo *>(port);\r
10     char *str = static_cast<char*>(buf);\r
11     fifo->write((void*)str, len);\r
12     return len;\r
13 }\r
14 \r
15 \r
16 /**\r
17  *\r
18  */\r
19 unsigned read(void *port, void *buf, unsigned len, DOLProcess *process) {\r
20     Fifo *fifo = static_cast<Fifo *>(port);\r
21     char *str = static_cast<char*>(buf);\r
22     fifo->read((void*)str, len);\r
23     return len;\r
24 }\r
25 \r
26 \r
27 /**\r
28  *\r
29  */\r
30 int wtest(void *port, unsigned len, DOLProcess *process) {\r
31     Fifo *fifo = static_cast<Fifo *>(port);\r
32     return (fifo->unused() >= len) ? 1 : 0;\r
33 }\r
34 \r
35 \r
36 /**\r
37  *\r
38  */\r
39 int rtest(void *port, unsigned len, DOLProcess *process) {\r
40     Fifo *fifo = static_cast<Fifo *>(port);\r
41     return (fifo->used() >= len) ? 1 : 0;\r
42 }\r
43 \r
44 \r
45 /**\r
46  *\r
47  */\r
48 unsigned reserve(void* fifo, void** destination, unsigned len, DOLProcess* p) {\r
49     return ((WindowedFifo*)fifo)->reserve(destination, len);\r
50 }\r
51 \r
52 /**\r
53  *\r
54  */\r
55 void release(void* fifo, DOLProcess* p) {\r
56     ((WindowedFifo*)fifo)->release();\r
57 }\r
58 \r
59 /**\r
60  *\r
61  */\r
62 unsigned capture(void* fifo, void** destination, unsigned len, DOLProcess* p) {\r
63     return ((WindowedFifo*)fifo)->capture(destination, len);\r
64 }\r
65 \r
66 /**\r
67  *\r
68  */\r
69 void consume(void* fifo, DOLProcess* p) {\r
70     ((WindowedFifo*)fifo)->consume();\r
71 }\r
72 \r
73 \r
74 /**\r
75  *\r
76  */\r
77 void DOL_detach(DOLProcess* p) {\r
78     static_cast<ProcessWrapper *>(p->wptr)->detach();\r
79 }\r
80 \r
81 \r
82 /**\r
83  *\r
84  */\r
85 void createPort(void** port,\r
86                 void* base,\r
87                 int number_of_indices,\r
88                 int index0, int range0) {\r
89     *port = (void**)((void**)base)[index0];\r
90 }\r
91 \r
92 \r
93 /**\r
94  *\r
95  */\r
96 void createPort(void** port,\r
97                 void* base,\r
98                 int number_of_indices,\r
99                 int index0, int range0,\r
100                 int index1, int range1) {\r
101     *port = (void**)((void**)base)[index0 * range1 + index1];\r
102 }\r
103 \r
104 \r
105 /**\r
106  *\r
107  */\r
108 void createPort(void** port,\r
109                 void* base,\r
110                 int number_of_indices,\r
111                 int index0, int range0,\r
112                 int index1, int range1,\r
113                 int index2, int range2) {\r
114     *port = (void**)((void**)base)[index0 * range1 * range2\r
115                        + index1 * range2 + index2];\r
116 }\r
117 \r
118 \r
119 /**\r
120  *\r
121  */\r
122 void createPort(void** port,\r
123                 void* base,\r
124                 int number_of_indices,\r
125                 int index0, int range0,\r
126                 int index1, int range1,\r
127                 int index2, int range2,\r
128                 int index3, int range3) {\r
129     *port = (void**)((void**)base)[index0 * range1 * range2 * range3\r
130                        + index1 * range2 * range3\r
131                        + index2 * range3\r
132                        + index3];\r
133 }\r