File Coverage

blib/lib/Set/Object/Weak.pm
Criterion Covered Total %
statement 25 25 100.0
branch 2 2 100.0
condition 2 3 66.6
subroutine 8 8 100.0
pod 3 3 100.0
total 40 41 97.5


line stmt bran cond sub pod time code
1              
2             =head1 NAME
3              
4             Set::Object::Weak - Sets without the referant reference increment
5              
6             =head1 SYNOPSIS
7              
8             use Set::Object::Weak qw(weak_set);
9              
10             my $set = Set::Object::Weak->new( 0, "", {}, [], $object );
11             # or
12             my $set = weak_set( 0, "", {}, [], $object );
13              
14             print $set->size; # 2 - the scalars aren't objects
15              
16             =head1 DESCRIPTION
17              
18             Sets, but weak. See L.
19              
20             Note that the C in C returns weak sets. This
21             is intentional, so that you can make all the sets in scope weak just
22             by changing C to C.
23              
24             =cut
25              
26             package Set::Object::Weak;
27 42     42   243 use strict;
  42         61  
  42         1600  
28 42     42   174 use base qw(Set::Object); # boo hiss no moose::role yet I hear you say
  42         59  
  42         5715  
29              
30 42     42   193 use base qw(Exporter); # my users would hate me otherwise
  42         82  
  42         1509  
31 42     42   206 use vars qw(@ISA @EXPORT_OK);
  42         65  
  42         2084  
32 42     42   206 use Set::Object qw(blessed);
  42         63  
  42         9533  
33              
34             our @EXPORT_OK = qw(weak_set set);
35              
36             =head1 CONSTRUCTORS
37              
38             =over
39              
40             =item new
41              
42             This class method is exactly the same as Cnew>,
43             except that it returns a weak set.
44              
45             =cut
46              
47             sub new {
48 8     8 1 3754 my $class = shift;
49 8         39 my $self = $class->SUPER::new();
50 8         31 $self->weaken;
51 8         45 $self->insert(@_);
52 8         27 $self;
53             }
54              
55             =item weak_set( ... )
56              
57             This optionally exported B is a shortcut for saying
58             Cnew(...)>.
59              
60             =cut
61              
62              
63             sub weak_set {
64 1     1 1 713 __PACKAGE__->new(@_);
65             }
66              
67             =item set( ... )
68              
69             This method is exported so that if you see:
70              
71             use Set::Object qw(set);
72              
73             You can turn it into using weak sets lexically with:
74              
75             use Set::Object::Weak qw(set);
76              
77             Set::Object 1.19 had a bug in this method that meant that it would not
78             add the passed members into it.
79              
80             =cut
81              
82             sub set {
83 7     7 1 718 my $class = __PACKAGE__;
84 7 100 66     44 if (blessed $_[0] and $_[0]->isa("Set::Object")) {
85 6         13 $class = (shift)->strong_pkg;
86             }
87 7         55 $class->new(@_);
88             }
89              
90             1;
91              
92             __END__