From f8088870d3cebbc655e7ab8ab4e3f997db4e0fbe Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Tue, 8 Mar 2011 16:46:36 +0000 Subject: [PATCH] Convert Tie::Hash::NamedCapture::TIEHASH to XS. --- ext/Tie-Hash-NamedCapture/NamedCapture.pm | 12 +++--------- ext/Tie-Hash-NamedCapture/NamedCapture.xs | 20 +++++++++++++++++++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/ext/Tie-Hash-NamedCapture/NamedCapture.pm b/ext/Tie-Hash-NamedCapture/NamedCapture.pm index 814e90d..db86908 100644 --- a/ext/Tie-Hash-NamedCapture/NamedCapture.pm +++ b/ext/Tie-Hash-NamedCapture/NamedCapture.pm @@ -1,19 +1,13 @@ use strict; package Tie::Hash::NamedCapture; -our $VERSION = "0.07"; +our $VERSION = "0.08"; + +sub TIEHASH; require XSLoader; XSLoader::load(); -my ($one, $all) = Tie::Hash::NamedCapture::flags(); - -sub TIEHASH { - my ($pkg, %arg) = @_; - my $flag = $arg{all} ? $all : $one; - bless \$flag => $pkg; -} - tie %+, __PACKAGE__; tie %-, __PACKAGE__, all => 1; diff --git a/ext/Tie-Hash-NamedCapture/NamedCapture.xs b/ext/Tie-Hash-NamedCapture/NamedCapture.xs index cd96c82..73deacd 100644 --- a/ext/Tie-Hash-NamedCapture/NamedCapture.xs +++ b/ext/Tie-Hash-NamedCapture/NamedCapture.xs @@ -18,6 +18,25 @@ MODULE = Tie::Hash::NamedCapture PACKAGE = Tie::Hash::NamedCapture PROTOTYPES: DISABLE +SV * +TIEHASH(package, ...) + const char *package; + PREINIT: + UV flag = RXapif_ONE; + CODE: + mark += 2; + while(mark < sp) { + STRLEN len; + const char *p = SvPV_const(*mark, len); + if(memEQs(p, len, "all")) + flag = SvTRUE(mark[1]) ? RXapif_ALL : RXapif_ONE; + mark += 2; + } + RETVAL = newSV_type(SVt_RV); + sv_setuv(newSVrv(RETVAL, package), flag); + OUTPUT: + RETVAL + void FETCH(...) ALIAS: @@ -94,4 +113,3 @@ flags(...) EXTEND(SP, 2); mPUSHu(RXapif_ONE); mPUSHu(RXapif_ALL); - -- 1.8.3.1