File Coverage

Path.xs
Criterion Covered Total %
statement 18 18 100.0
branch 6 10 60.0
condition n/a
subroutine n/a
pod n/a
total 24 28 85.7


line stmt bran cond sub pod time code
1             #include "EXTERN.h"
2             #include "perl.h"
3             #include "XSUB.h"
4             #include "ppport.h"
5              
6             #include "srl_common.h"
7             #include "srl_protocol.h"
8             #include "srl_path.h"
9              
10             typedef srl_path_t * Sereal__Path;
11              
12             MODULE = Sereal::Path PACKAGE = Sereal::Path
13             PROTOTYPES: DISABLE
14              
15             srl_path_t *
16             new(CLASS, src = NULL, opt = NULL)
17             char *CLASS;
18             SV *src;
19             HV *opt;
20             CODE:
21 18           RETVAL = srl_build_path_struct(aTHX_ opt);
22 18 50         if (src) srl_path_set(aTHX_ RETVAL, src);
23             OUTPUT: RETVAL
24              
25             void
26             DESTROY(path)
27             srl_path_t *path;
28             CODE:
29 18           srl_destroy_path(aTHX_ path);
30              
31             void
32             set(path, src)
33             srl_path_t *path;
34             SV *src;
35             CODE:
36 1           srl_path_set(aTHX_ path, src);
37              
38             SV *
39             results(path)
40             srl_path_t *path;
41             PPCODE:
42 60           ST(0) = srl_path_results(aTHX_ path);
43 60           XSRETURN(1);
44              
45             void
46             _traverse(path, expr, route)
47             srl_path_t *path;
48             SV *expr;
49             SV *route;
50             CODE:
51 60 50         if (SvTYPE(expr) != SVt_RV) croak("query mush be arrayref");
52 60           expr = SvRV(expr);
53 60 50         if (SvTYPE(expr) != SVt_PVAV) croak("query mush be arrayref");
54 60           srl_path_traverse(aTHX_ path, (AV*) expr, route);
55              
56             MODULE = Sereal::Path PACKAGE = Sereal::Path::_tests
57              
58             SV *
59             is_range(src)
60             SV *src;
61             PREINIT:
62             AV *av;
63             STRLEN len;
64             int values[3];
65             const char *str;
66             PPCODE:
67 18           av = newAV();
68 18           ST(0) = newRV_noinc((SV*) av);
69 18 50         str = SvPV(src, len);
70              
71 18 100         if (_is_range(str, len, (int*) &values)) {
72 8           av_push(av, newSViv(values[0]));
73 8           av_push(av, newSViv(values[1]));
74 8           av_push(av, newSViv(values[2]));
75             }
76              
77 18           XSRETURN(1);