File Coverage

xs/f32.xs
Criterion Covered Total %
statement 56 110 50.9
branch 50 226 22.1
condition n/a
subroutine n/a
pod n/a
total 106 336 31.5


line stmt bran cond sub pod time code
1             MODULE = Data::Buffer::Shared PACKAGE = Data::Buffer::Shared::F32
2             PROTOTYPES: DISABLE
3              
4             SV*
5             new(char* class, char* path, UV capacity)
6             CODE:
7             char errbuf[BUF_ERR_BUFLEN];
8 1           BufHandle* buf = buf_f32_create(path, (uint64_t)capacity, errbuf);
9 1 50         if (!buf) croak("Data::Buffer::Shared::F32: %s", errbuf[0] ? errbuf : "unknown error");
    0          
10 1           RETVAL = sv_setref_pv(newSV(0), class, (void*)buf);
11             OUTPUT:
12             RETVAL
13              
14             void
15             DESTROY(SV* self_sv)
16             CODE:
17 2 50         if (!SvROK(self_sv)) return;
18 2           BufHandle* h = INT2PTR(BufHandle*, SvIV(SvRV(self_sv)));
19 2 50         if (!h) return;
20 2           buf_close_map(h);
21 2           sv_setiv(SvRV(self_sv), 0);
22              
23             SV*
24             get(SV* self_sv, UV idx)
25             CODE:
26 5 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
27             float val;
28 5 50         if (!buf_f32_get(h, (uint64_t)idx, &val)) XSRETURN_UNDEF;
29 5           RETVAL = newSVnv(val);
30             OUTPUT:
31             RETVAL
32              
33             bool
34             set(SV* self_sv, UV idx, NV val)
35             CODE:
36 4 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
37 4 50         RETVAL = buf_f32_set(h, (uint64_t)idx, (float)val);
38             OUTPUT:
39             RETVAL
40              
41             void
42             slice(SV* self_sv, UV from, UV count)
43             PPCODE:
44 1 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
45 1 50         if (count == 0) XSRETURN_EMPTY;
46             float *tmp;
47 1 50         Newx(tmp, count, float);
48 1           SAVEFREEPV(tmp);
49 1 50         if (!buf_f32_get_slice(h, (uint64_t)from, (uint64_t)count, tmp))
50 0           croak("Data::Buffer::Shared::F32: slice out of bounds");
51 1 50         EXTEND(SP, count);
52 3 100         for (UV i = 0; i < count; i++)
53 2           mPUSHn(tmp[i]);
54              
55             bool
56             set_slice(SV* self_sv, UV from, ...)
57             CODE:
58 1 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
59 1           UV count = items - 2;
60 1 50         if (count == 0) XSRETURN(1);
61             float *tmp;
62 1 50         Newx(tmp, count, float);
63 1           SAVEFREEPV(tmp);
64 3 100         for (UV i = 0; i < count; i++)
65 2           tmp[i] = (float)SvNV(ST(i + 2));
66 1 50         RETVAL = buf_f32_set_slice(h, (uint64_t)from, (uint64_t)count, tmp);
67             OUTPUT:
68             RETVAL
69              
70             void
71             fill(SV* self_sv, NV val)
72             CODE:
73 1 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
74 1           buf_f32_fill(h, (float)val);
75              
76             UV
77             capacity(SV* self_sv)
78             CODE:
79 1 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
80 1           RETVAL = (UV)buf_f32_capacity(h);
81             OUTPUT:
82             RETVAL
83              
84             UV
85             mmap_size(SV* self_sv)
86             CODE:
87 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
88 0           RETVAL = (UV)buf_f32_mmap_size(h);
89             OUTPUT:
90             RETVAL
91              
92             UV
93             elem_size(SV* self_sv)
94             CODE:
95 1 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
96 1 50         RETVAL = (UV)buf_f32_elem_size(h);
97             OUTPUT:
98             RETVAL
99              
100             SV*
101             path(SV* self_sv)
102             CODE:
103 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
104 0 0         if (h->path) RETVAL = newSVpv(h->path, 0); else XSRETURN_UNDEF;
105             OUTPUT:
106             RETVAL
107              
108             void
109             lock_wr(SV* self_sv)
110             CODE:
111 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
112 0           buf_f32_lock_wr(h);
113              
114             void
115             unlock_wr(SV* self_sv)
116             CODE:
117 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
118 0           buf_f32_unlock_wr(h);
119              
120             void
121             lock_rd(SV* self_sv)
122             CODE:
123 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
124 0           buf_f32_lock_rd(h);
125              
126             void
127             unlock_rd(SV* self_sv)
128             CODE:
129 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
130 0           buf_f32_unlock_rd(h);
131              
132             void
133             unlink(SV* self_or_class, ...)
134             CODE:
135             const char *p;
136 0 0         if (SvROK(self_or_class)) {
137 0           BufHandle* h = INT2PTR(BufHandle*, SvIV(SvRV(self_or_class)));
138 0 0         if (h) { if (!h->path) croak("cannot unlink anonymous buffer"); p = h->path; }
    0          
139 0           else croak("Data::Buffer::Shared::F32: destroyed object");
140             } else {
141 0 0         if (items < 2) croak("Usage: Data::Buffer::Shared::F32->unlink($path)");
142 0           p = SvPV_nolen(ST(1));
143             }
144 0           unlink(p);
145              
146             UV
147             ptr(SV* self_sv)
148             CODE:
149 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
150 0 0         RETVAL = PTR2UV(buf_f32_ptr(h));
151             OUTPUT:
152             RETVAL
153              
154             UV
155             ptr_at(SV* self_sv, UV idx)
156             CODE:
157 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
158 0           void *p = buf_f32_ptr_at(h, (uint64_t)idx);
159 0 0         if (!p) croak("Data::Buffer::Shared::F32: index out of bounds");
160 0 0         RETVAL = PTR2UV(p);
161             OUTPUT:
162             RETVAL
163              
164             SV*
165             new_anon(char* class, UV capacity)
166             CODE:
167             char errbuf[BUF_ERR_BUFLEN];
168 1           BufHandle* buf = buf_f32_create_anon((uint64_t)capacity, errbuf);
169 1 50         if (!buf) croak("Data::Buffer::Shared::F32: %s", errbuf[0] ? errbuf : "unknown error");
    0          
170 1           RETVAL = sv_setref_pv(newSV(0), class, (void*)buf);
171             OUTPUT:
172             RETVAL
173              
174             void
175             clear(SV* self_sv)
176             CODE:
177 1 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
178 1           buf_f32_clear(h);
179              
180             SV*
181             get_raw(SV* self_sv, UV byte_off, UV nbytes)
182             CODE:
183 1 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
184 1 50         RETVAL = newSV(nbytes ? nbytes : 1);
185 1           SvPOK_on(RETVAL);
186 1           SvCUR_set(RETVAL, nbytes);
187 1 50         if (!buf_f32_get_raw(h, (uint64_t)byte_off, (uint64_t)nbytes, SvPVX(RETVAL))) {
188 0           SvREFCNT_dec(RETVAL);
189 0           croak("Data::Buffer::Shared::F32: get_raw out of bounds");
190             }
191             OUTPUT:
192             RETVAL
193              
194             bool
195             set_raw(SV* self_sv, UV byte_off, SV* data_sv)
196             CODE:
197 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
198             STRLEN dlen;
199 0           const char *dptr = SvPV(data_sv, dlen);
200 0 0         RETVAL = buf_f32_set_raw(h, (uint64_t)byte_off, (uint64_t)dlen, dptr);
201             OUTPUT:
202             RETVAL
203              
204             SV*
205             new_memfd(char* class, char* name, UV capacity)
206             CODE:
207             char errbuf[BUF_ERR_BUFLEN];
208 0           BufHandle* buf = buf_f32_create_memfd(name, (uint64_t)capacity, errbuf);
209 0 0         if (!buf) croak("Data::Buffer::Shared::F32: %s", errbuf[0] ? errbuf : "unknown error");
    0          
210 0           RETVAL = sv_setref_pv(newSV(0), class, (void*)buf);
211             OUTPUT:
212             RETVAL
213              
214             SV*
215             new_from_fd(char* class, int fd)
216             CODE:
217             char errbuf[BUF_ERR_BUFLEN];
218 0           BufHandle* buf = buf_f32_open_fd(fd, errbuf);
219 0 0         if (!buf) croak("Data::Buffer::Shared::F32: %s", errbuf[0] ? errbuf : "unknown error");
    0          
220 0           RETVAL = sv_setref_pv(newSV(0), class, (void*)buf);
221             OUTPUT:
222             RETVAL
223              
224             SV*
225             fd(SV* self_sv)
226             CODE:
227 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
228 0 0         if (h->fd < 0) XSRETURN_UNDEF;
229 0           RETVAL = newSViv(h->fd);
230             OUTPUT:
231             RETVAL
232              
233             SV*
234             as_scalar(SV* self_sv)
235             CODE:
236 1 50         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    50          
    50          
237 1           size_t len = (size_t)(h->hdr->capacity * h->hdr->elem_size);
238 1           SV *inner = newSV_type(SVt_PV);
239 1           SvPV_set(inner, (char *)h->data);
240 1           SvCUR_set(inner, len);
241 1           SvLEN_set(inner, 0);
242 1           SvPOK_on(inner);
243 1           SvREADONLY_on(inner);
244 1           MAGIC *mg = sv_magicext(inner, NULL, PERL_MAGIC_ext, &buf_scalar_magic_vtbl, NULL, 0);
245 1           mg->mg_obj = SvREFCNT_inc_simple_NN(self_sv);
246 1           RETVAL = newRV_noinc(inner);
247             OUTPUT:
248             RETVAL
249              
250             IV
251             create_eventfd(SV* self_sv)
252             CODE:
253 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
254 0           RETVAL = (IV)buf_create_eventfd(h);
255 0 0         if (RETVAL < 0) croak("Data::Buffer::Shared::F32: eventfd: %s", strerror(errno));
256             OUTPUT:
257             RETVAL
258              
259             void
260             attach_eventfd(SV* self_sv, int efd)
261             CODE:
262 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
263 0           buf_attach_eventfd(h, efd);
264              
265             SV*
266             eventfd(SV* self_sv)
267             CODE:
268 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
269 0 0         if (h->efd < 0) XSRETURN_UNDEF;
270 0           RETVAL = newSViv(h->efd);
271             OUTPUT:
272             RETVAL
273              
274             bool
275             notify(SV* self_sv)
276             CODE:
277 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
278 0 0         RETVAL = buf_notify(h);
279             OUTPUT:
280             RETVAL
281              
282             SV*
283             wait_notify(SV* self_sv)
284             CODE:
285 0 0         EXTRACT_BUF("Data::Buffer::Shared::F32", self_sv);
    0          
    0          
286 0           int64_t val = buf_wait_notify(h);
287 0 0         if (val < 0) XSRETURN_UNDEF;
288 0           RETVAL = newSViv(val);
289             OUTPUT:
290             RETVAL