Skip to content

Commit f808887

Browse files
committed
Convert Tie::Hash::NamedCapture::TIEHASH to XS.
1 parent 557a446 commit f808887

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

ext/Tie-Hash-NamedCapture/NamedCapture.pm

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
11
use strict;
22
package Tie::Hash::NamedCapture;
33

4-
our $VERSION = "0.07";
4+
our $VERSION = "0.08";
5+
6+
sub TIEHASH;
57

68
require XSLoader;
79
XSLoader::load();
810

9-
my ($one, $all) = Tie::Hash::NamedCapture::flags();
10-
11-
sub TIEHASH {
12-
my ($pkg, %arg) = @_;
13-
my $flag = $arg{all} ? $all : $one;
14-
bless \$flag => $pkg;
15-
}
16-
1711
tie %+, __PACKAGE__;
1812
tie %-, __PACKAGE__, all => 1;
1913

ext/Tie-Hash-NamedCapture/NamedCapture.xs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,25 @@
1818
MODULE = Tie::Hash::NamedCapture PACKAGE = Tie::Hash::NamedCapture
1919
PROTOTYPES: DISABLE
2020

21+
SV *
22+
TIEHASH(package, ...)
23+
const char *package;
24+
PREINIT:
25+
UV flag = RXapif_ONE;
26+
CODE:
27+
mark += 2;
28+
while(mark < sp) {
29+
STRLEN len;
30+
const char *p = SvPV_const(*mark, len);
31+
if(memEQs(p, len, "all"))
32+
flag = SvTRUE(mark[1]) ? RXapif_ALL : RXapif_ONE;
33+
mark += 2;
34+
}
35+
RETVAL = newSV_type(SVt_RV);
36+
sv_setuv(newSVrv(RETVAL, package), flag);
37+
OUTPUT:
38+
RETVAL
39+
2140
void
2241
FETCH(...)
2342
ALIAS:
@@ -94,4 +113,3 @@ flags(...)
94113
EXTEND(SP, 2);
95114
mPUSHu(RXapif_ONE);
96115
mPUSHu(RXapif_ALL);
97-

0 commit comments

Comments
 (0)