[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Glib::Flags overloaded mutators
- From: Kevin Ryde <user42 zip com au>
- To: gtk-perl-list gnome org
- Subject: Glib::Flags overloaded mutators
- Date: Sat, 21 Jun 2008 08:26:49 +1000
It'd be good if Glib::Flags had overloaded += as well as + so you could
go
$f += 'val';
I think the basic overload can be used without too much trouble, the new
object returned being assigned to the destination automatically by
"overload".
I remember a long time ago making mutators which peeked into the target
object and on refcount==1 changed it in-place instead of creating a new
one. I guess that's possible with Glib::Flags too, though it's small
enough it might not be worth bothering.
--- GType.xs 02 Jun 2008 09:38:05 +1000 1.92
+++ GType.xs 20 Jun 2008 18:10:11 +1000
@@ -2773,7 +2773,7 @@
RETVAL
SV *
-union (SV *a, SV *b, int swap)
+union (SV *a, SV *b, SV *swap)
ALIAS:
sub = 1
intersect = 2
@@ -2783,12 +2783,13 @@
{
GType gtype;
const char *package;
- gint a_, b_;
+ gint a_, b_, swap_;
package = sv_reftype (SvRV (a), TRUE);
gtype = gperl_fundamental_type_from_package (package);
- a_ = gperl_convert_flags (gtype, swap ? b : a);
- b_ = gperl_convert_flags (gtype, swap ? a : b);
+ swap_ = SvTRUE (swap);
+ a_ = gperl_convert_flags (gtype, swap_ ? b : a);
+ b_ = gperl_convert_flags (gtype, swap_ ? a : b);
switch (ix) {
case 0: a_ |= b_; break;
--- Glib.pm 23 May 2008 09:49:02 +1000 1.121
+++ Glib.pm 20 Jun 2008 17:54:15 +1000
@@ -73,13 +73,16 @@
use overload
'bool' => \&bool,
- '+' => \&union, '|' => \&union,
- '-' => \&sub,
+ '+' => \&union, '+=' => \&union,
+ '|' => \&union, '|=' => \&union,
+ '-' => \&sub, '-=' => \&sub,
+ '*' => \&intersect, '*=' => \&intersect,
+ '&' => \&intersect, '&=' => \&intersect,
+ '/' => \&xor, '/=' => \&xor,
+ '^' => \&xor, '^=' => \&xor,
'>=' => \&ge,
'==' => \&eq, 'eq' => \&eq,
'!=' => \&ne, 'ne' => \&ne,
- '*' => \&intersect, '&' => \&intersect,
- '/' => \&xor, '^' => \&xor,
'@{}' => \&as_arrayref,
'""' => sub { "[ @{$_[0]} ]" },
fallback => 1;
--- c.t 23 May 2008 09:49:02 +1000 1.12
+++ c.t 20 Jun 2008 18:12:47 +1000
@@ -13,7 +13,7 @@
#########################
-use Test::More tests => 32;
+use Test::More tests => 34;
BEGIN { use_ok('Glib') };
#########################
@@ -40,6 +40,16 @@
eval { my $h = Glib::Flags->new (['readable']); };
ok ($@, "Will croak on trying to create plain old Glib::Flags");
+{ $f = Glib::ParamFlags->new (['readable']); # with array
+ my $g = $f;
+ $g += 'writable';
+ ok ($g == ['readable', 'writable'],
+ "overloaded +=");
+ ok ($f == ['readable'],
+ "overloaded += leaves original unchanged");
+}
+
+
#########################
$@ = undef;
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]