]> git.vpit.fr Git - perl/modules/re-engine-Plugin.git/blob - Plugin.h
1b186306215da913554dadf7569bf034c07e3a21
[perl/modules/re-engine-Plugin.git] / Plugin.h
1 #define GET_SELF_FROM_PPRIVATE(pprivate)        \
2     re__engine__Plugin self;                    \
3     SELF_FROM_PPRIVATE(self,pprivate);
4
5 /* re__engine__Plugin self; SELF_FROM_PPRIVATE(self,rx->pprivate) */
6 #define SELF_FROM_PPRIVATE(self, pprivate)                   \
7         if (sv_isobject(pprivate)) {                             \
8         SV * ref = SvRV((SV*)pprivate);                      \
9             IV tmp = SvIV((SV*)ref);                             \
10             self = INT2PTR(re__engine__Plugin,tmp);              \
11     } else {                                                 \
12         Perl_croak(aTHX_ "Not an object");                   \
13     }
14
15 START_EXTERN_C
16 EXTERN_C const regexp_engine engine_plugin;
17 EXTERN_C REGEXP * Plugin_comp(pTHX_ const SV const *, const U32);
18 EXTERN_C I32      Plugin_exec(pTHX_ REGEXP * const, char *, char *,
19                               char *, I32, SV *, void *, U32);
20 EXTERN_C char *   Plugin_intuit(pTHX_ REGEXP * const, SV *, char *,
21                                 char *, U32, re_scream_pos_data *);
22 EXTERN_C SV *     Plugin_checkstr(pTHX_ REGEXP * const);
23 EXTERN_C void     Plugin_free(pTHX_ REGEXP * const);
24 EXTERN_C void     Plugin_numbered_buff_FETCH(pTHX_ REGEXP * const,
25                                              const I32, SV * const);
26 EXTERN_C void     Plugin_numbered_buff_STORE(pTHX_ REGEXP * const,
27                                              const I32, SV const * const);
28 EXTERN_C I32      Plugin_numbered_buff_LENGTH(pTHX_ REGEXP * const,
29                                               const SV * const, const I32);
30 EXTERN_C SV *     Plugin_named_buff (pTHX_ REGEXP * const, SV * const,
31                                      SV * const, const U32);
32 EXTERN_C SV *     Plugin_named_buff_iter (pTHX_ REGEXP * const, const SV * const,
33                                           const U32);
34 EXTERN_C SV *     Plugin_package(pTHX_ REGEXP * const);
35 #ifdef USE_ITHREADS
36 EXTERN_C void *   Plugin_dupe(pTHX_ REGEXP * const, CLONE_PARAMS *);
37 #endif
38 END_EXTERN_C
39
40 START_EXTERN_C
41 EXTERN_C const regexp_engine engine_plugin;
42 END_EXTERN_C
43
44 #define RE_ENGINE_PLUGIN (&engine_plugin)
45 const regexp_engine engine_plugin = {
46     Plugin_comp,
47     Plugin_exec,
48     Plugin_intuit,
49     Plugin_checkstr,
50     Plugin_free,
51     Plugin_numbered_buff_FETCH,
52     Plugin_numbered_buff_STORE,
53     Plugin_numbered_buff_LENGTH,
54     Plugin_named_buff,
55     Plugin_named_buff_iter,
56     Plugin_package,
57 #if defined(USE_ITHREADS)        
58     Plugin_dupe,
59 #endif
60 };
61
62 typedef struct replug {
63     /* Pointer back to the containing REGEXP struct so that accessors
64      * can modify nparens, gofs etc. */
65     REGEXP * rx;
66
67     /* A copy of the pattern given to comp, for ->pattern */
68     SV * pattern;
69
70     /* A copy of the string being matched against, for ->str */
71     SV * str;
72
73     /* The ->stash */
74     SV * stash;
75
76     /*
77      * Callbacks
78      */
79
80     SV * cb_free;
81
82     /* ->num_captures */
83     SV * cb_num_capture_buff_FETCH;
84     SV * cb_num_capture_buff_STORE;
85     SV * cb_num_capture_buff_LENGTH;
86 } *re__engine__Plugin;