From d4b8f85db494e1bc353327949d6a302c13ea9130 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Quelin?= Date: Tue, 15 Jan 2008 16:15:35 +0100 Subject: [PATCH] _substract_inplace() moved to XS code --- XS.xs | 36 ++++++++++++++++++++++++++++++++++++ lib/Language/Befunge/Vector/XS.pm | 1 - 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/XS.xs b/XS.xs index 80785e7..6ec101c 100644 --- a/XS.xs +++ b/XS.xs @@ -144,6 +144,42 @@ get_component( self, index ) # -- PRIVATE METHODS +#- inplace math ops + +# +# $v1->_substract_inplace($v2); +# $v1 -= $v2; +# +# Substract $v2 to $v1, and stores the result back into $v1. +# +AV* _substract_inplace( v1, v2 ) + AV* v1; + AV* v2; + + INIT: + I32 dimv1, dimv2; + I32 i; + I32 val1, val2; + + CODE: + dimv1 = av_len(v1); + dimv2 = av_len(v2); + + /* sanity checks */ + if ( dimv1 != dimv2 ) + croak("uneven dimensions in vector substraction!"); + + for ( i=0 ; i<=dimv1; i++ ) { + val1 = SvIV( *av_fetch(v1, i, 0) ); + val2 = SvIV( *av_fetch(v2, i, 0) ); + av_store( v1, i, newSViv(val1-val2) ); + } + RETVAL = v1; + + OUTPUT: + RETVAL + + #- comparison # diff --git a/lib/Language/Befunge/Vector/XS.pm b/lib/Language/Befunge/Vector/XS.pm index 662e255..baa519b 100644 --- a/lib/Language/Befunge/Vector/XS.pm +++ b/lib/Language/Befunge/Vector/XS.pm @@ -44,7 +44,6 @@ sub _add {$_[0]} sub _substract {$_[0]} sub _invert {$_[0]} sub _add_inplace {$_[0]} -sub _substract_inplace {$_[0]} 1; __END__ -- 2.11.4.GIT