annotate variant_effect_predictor/Bio/SeqIO/MultiFile.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: MultiFile.pm,v 1.8 2002/10/22 07:38:42 lapp Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # BioPerl module for Bio::SeqIO::MultiFile
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Ewan Birney <birney@ebi.ac.uk>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # Copyright Ewan Birney
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 Bio::SeqIO::MultiFile - Treating a set of files as a single input stream
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 $seqin = Bio::SeqIO::MultiFile( '-format' => 'Fasta',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 '-files' => ['file1','file2'] );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 while((my $seq = $seqin->next_seq)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 # do something with $seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 Bio::SeqIO::MultiFile provides a simple way of bundling a whole
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 set of identically formatted sequence input files as a single stream.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 User feedback is an integral part of the evolution of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 and other Bioperl modules. Send your comments and suggestions preferably
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 to one of the Bioperl mailing lists.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 http://www.bioperl.org/MailList.shtml - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 the bugs and their resolution.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 Bug reports can be submitted via email or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 =head1 AUTHOR - Ewan Birney
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 Email birney@ebi.ac.uk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 Describe contact details here
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 package Bio::SeqIO::MultiFile;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 use Bio::SeqIO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 @ISA = qw(Bio::SeqIO);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 # _initialize is where the heavy stuff will happen when new is called
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 sub _initialize {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 my($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 $self->SUPER::_initialize(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 my ($file_array,$format) = $self->_rearrange([qw(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 FILES
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 FORMAT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 )],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 @args,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 if( !defined $file_array || ! ref $file_array ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 $self->throw("Must have an array files for MultiFile");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 if( !defined $format ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 $self->throw("Must have a format for MultiFile");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 $self->{'_file_array'} = [];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 $self->_set_file(@$file_array);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 $self->_format($format);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 if( $self->_load_file() == 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 $self->throw("Unable even to initialise the first file");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 =head2 next_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 Title : next_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 sub next_seq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 my $seq = $self->_current_seqio->next_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 if( !defined $seq ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 if( $self->_load_file() == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 return $self->next_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 return $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 =head2 next_primary_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 Title : next_primary_seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 sub next_primary_seq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 my $seq = $self->_current_seqio->next_primary_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 if( !defined $seq ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 if( $self->_load_file() == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 return $self->next_primary_seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 return $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 =head2 _load_file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 Title : _load_file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 sub _load_file{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 my $file = shift(@{$self->{'_file_array'}});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 if( !defined $file ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 return 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 my $seqio = Bio::SeqIO->new( '-format' => $self->_format(), -file => $file);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 # should throw an exception - but if not...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 if( !defined $seqio) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 $self->throw("no seqio built for $file!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 $self->_current_seqio($seqio);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 =head2 _set_file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 Title : _set_file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 sub _set_file{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 my ($self,@files) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 push(@{$self->{'_file_array'}},@files);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 =head2 _current_seqio
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 Title : _current_seqio
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 Usage : $obj->_current_seqio($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 Returns : value of _current_seqio
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 sub _current_seqio{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 my ($obj,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 $obj->{'_current_seqio'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 return $obj->{'_current_seqio'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 =head2 _format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 Title : _format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 Usage : $obj->_format($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 Returns : value of _format
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 sub _format{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 my ($obj,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 $obj->{'_format'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 return $obj->{'_format'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 1;