File Coverage

blib/lib/Iterator/Flex/Common.pm
Criterion Covered Total %
statement 132 145 91.0
branch 6 8 75.0
condition n/a
subroutine 26 29 89.6
pod 19 20 95.0
total 183 202 90.5


line stmt bran cond sub pod time code
1             package Iterator::Flex::Common;
2              
3             # ABSTRACT: Iterator Generators and Adapters
4              
5 26     26   5666536 use v5.28;
  26         107  
6 26     26   171 use strict;
  26         72  
  26         846  
7 26     26   139 use warnings;
  26         47  
  26         1529  
8              
9 26     26   13957 use experimental qw( postderef signatures );
  26         98747  
  26         171  
10              
11             our $VERSION = '0.33';
12              
13 26     26   7086 use Exporter 'import';
  26         53  
  26         2840  
14              
15             our @EXPORT_OK = qw[
16             iterator iter iarray ibatch ibuffer icycle icache
17             icat ichain ichunk iflatten igather igrep imap
18             ipermute
19             iproduct iseq istack itake ifreeze izip
20             thaw
21             ];
22              
23             our %EXPORT_TAGS = ( all => \@EXPORT_OK );
24              
25 26     26   13664 use Ref::Util qw[ is_arrayref is_hashref is_ref is_globref ];
  26         65302  
  26         2866  
26 26     26   14728 use Module::Runtime qw[ require_module ];
  26         54203  
  26         204  
27 26     26   15567 use Iterator::Flex::Utils qw[ throw_failure ];
  26         98  
  26         4017  
28 26     26   15173 use Iterator::Flex::Factory 'to_iterator', 'construct_from_iterable';
  26         94  
  26         42046  
29              
30              
31              
32              
33              
34              
35              
36              
37              
38              
39              
40              
41              
42              
43              
44              
45              
46              
47              
48              
49              
50              
51              
52              
53              
54              
55              
56              
57 50     50 1 1972184 sub iterator : prototype(&@) ( $code, $pars = {} ) {
  50         95  
  50         90  
  50         69  
58 50         216 Iterator::Flex::Factory::construct_from_iterable( $code, $pars );
59             }
60              
61              
62              
63              
64              
65              
66              
67              
68              
69              
70              
71              
72              
73              
74              
75              
76              
77 0     0 1 0 sub iter ( $iterable, $pars = {} ) {
  0         0  
  0         0  
  0         0  
78 0         0 to_iterator( $iterable, $pars );
79             }
80              
81              
82              
83              
84              
85              
86              
87              
88              
89              
90              
91              
92              
93              
94              
95              
96              
97              
98              
99              
100              
101              
102              
103              
104              
105              
106              
107              
108 27     27 1 2321777 sub iarray ( $array, $pars = {} ) {
  27         73  
  27         60  
  27         53  
109 27         4732 require Iterator::Flex::Array;
110 27         195 return Iterator::Flex::Array->new( $array, $pars );
111             }
112              
113              
114              
115              
116              
117              
118              
119              
120              
121              
122              
123              
124              
125              
126              
127              
128              
129              
130              
131              
132              
133              
134              
135              
136              
137              
138              
139              
140 8     8 1 18 sub icache ( $iterable, $pars = {} ) {
  8         15  
  8         21  
  8         16  
141 8         636 require Iterator::Flex::Cache;
142 8         48 Iterator::Flex::Cache->new( $iterable, $pars );
143             }
144              
145              
146              
147              
148              
149              
150              
151              
152              
153              
154              
155              
156              
157              
158              
159              
160              
161              
162              
163              
164              
165              
166              
167              
168              
169              
170              
171              
172              
173              
174              
175              
176              
177              
178              
179              
180              
181              
182              
183              
184 2     2 1 451624 sub icat ( @args ) {
  2         7  
  2         3  
185 2         1389 require Iterator::Flex::Cat;
186 2         14 Iterator::Flex::Cat->new( @args );
187             }
188              
189             sub ichain;
190             *ichain = \&icat;
191              
192              
193              
194              
195              
196              
197              
198              
199              
200              
201              
202              
203              
204              
205              
206              
207              
208              
209              
210              
211              
212              
213              
214              
215              
216              
217              
218              
219              
220 0     0 1 0 sub ichunk ( $iterable, $pars = {} ) {
  0         0  
  0         0  
  0         0  
221 0         0 require Iterator::Flex::Chunk;
222 0         0 Iterator::Flex::Chunk->new( $iterable, $pars );
223             }
224              
225             sub ibatch;
226             *ibatch = \&ichunk;
227              
228              
229              
230              
231              
232              
233              
234              
235              
236              
237              
238              
239              
240              
241              
242              
243              
244              
245              
246              
247              
248              
249              
250              
251              
252              
253 4     4 1 287923 sub icycle ( $array, $pars = {} ) {
  4         8  
  4         7  
  4         5  
254 4         423 require Iterator::Flex::Cycle;
255 4         18 return Iterator::Flex::Cycle->new( $array, $pars );
256             }
257              
258              
259              
260              
261              
262              
263              
264              
265              
266              
267              
268              
269              
270              
271              
272              
273              
274              
275 7     7 1 45 sub ibuffer ( $iterable, $n = 0, $pars = {} ) {
  7         16  
  7         15  
  7         16  
  7         14  
276 7         661 require Iterator::Flex::Buffer;
277 7         46 return Iterator::Flex::Buffer->new( $iterable, $n, $pars );
278             }
279              
280              
281              
282              
283              
284              
285              
286              
287              
288              
289              
290              
291              
292              
293              
294              
295              
296              
297              
298              
299              
300              
301 5     5 1 8747 sub iflatten ( $iterable, $pars = {} ) {
  5         12  
  5         11  
  5         11  
302 5         638 require Iterator::Flex::Flatten;
303 5         34 return Iterator::Flex::Flatten->new( $iterable, $pars );
304             }
305              
306              
307              
308              
309              
310              
311              
312              
313              
314              
315              
316              
317              
318              
319              
320              
321              
322              
323              
324              
325              
326              
327              
328              
329              
330              
331 1     1 1 17055 sub igather : prototype(&$@) ( $code, $iterable, $pars = {} ) {
  1         4  
  1         2  
  1         5  
  1         3  
332 1         11 require Iterator::Flex::Gather;
333 1         7 Iterator::Flex::Gather->new( $code, $iterable, $pars );
334             }
335              
336              
337              
338              
339              
340              
341              
342              
343              
344              
345              
346              
347              
348              
349              
350              
351              
352              
353              
354              
355              
356              
357              
358 6     6 1 15 sub igrep : prototype(&$@) ( $code, $iterable, $pars = {} ) {
  6         11  
  6         12  
  6         14  
  6         10  
359 6         1845 require Iterator::Flex::Grep;
360 6         39 Iterator::Flex::Grep->new( $code, $iterable, $pars );
361             }
362              
363              
364              
365              
366              
367              
368              
369              
370              
371              
372              
373              
374              
375              
376              
377              
378              
379              
380              
381              
382              
383              
384              
385              
386 6     6 1 13 sub imap : prototype(&$@) ( $code, $iterable, $pars = {} ) {
  6         12  
  6         11  
  6         13  
  6         10  
387 6         1027 require Iterator::Flex::Map;
388 6         54 Iterator::Flex::Map->new( $code, $iterable, $pars );
389             }
390              
391              
392              
393              
394              
395              
396              
397              
398              
399              
400              
401              
402              
403              
404              
405              
406              
407              
408              
409              
410              
411              
412              
413              
414              
415              
416              
417              
418             sub ipermute {
419 0     0 1 0 require Iterator::Flex::Permute;
420 0         0 return Iterator::Flex::Permute->new( @_ );
421             }
422              
423              
424              
425              
426              
427              
428              
429              
430              
431              
432              
433              
434              
435              
436              
437              
438              
439              
440              
441              
442              
443              
444              
445              
446              
447              
448              
449              
450              
451              
452              
453              
454              
455              
456              
457              
458              
459             sub iproduct {
460 6     6 1 343558 require Iterator::Flex::Product;
461 6         38 return Iterator::Flex::Product->new( @_ );
462             }
463              
464              
465              
466              
467              
468              
469              
470              
471              
472              
473              
474              
475              
476              
477              
478              
479              
480              
481              
482              
483              
484              
485              
486              
487              
488              
489              
490              
491              
492              
493              
494              
495             sub iseq {
496 67     67 1 3255793 require Iterator::Flex::Sequence;
497 67         551 Iterator::Flex::Sequence->new( @_ );
498             }
499              
500              
501              
502              
503              
504              
505              
506              
507              
508              
509              
510              
511              
512              
513              
514              
515              
516              
517              
518              
519              
520              
521              
522              
523              
524              
525              
526              
527              
528              
529 3     3 1 319562 sub istack ( @args ) {
  3         7  
  3         4  
530 3         483 require Iterator::Flex::Stack;
531 3         14 Iterator::Flex::Stack->new( @args );
532             }
533              
534              
535              
536              
537              
538              
539              
540              
541              
542              
543              
544              
545              
546              
547              
548              
549              
550              
551              
552              
553              
554              
555              
556              
557              
558              
559              
560              
561              
562              
563              
564              
565 12     12 0 81 sub itake ( @args ) {
  12         27  
  12         19  
566 12         701 require Iterator::Flex::Take;
567 12         65 Iterator::Flex::Take->new( @args );
568             }
569              
570              
571              
572              
573              
574              
575              
576              
577              
578              
579              
580              
581              
582              
583              
584              
585              
586              
587              
588              
589              
590              
591              
592              
593              
594              
595              
596              
597              
598              
599              
600              
601              
602 4     4 1 7 sub ifreeze : prototype(&$@) ( $code, $iterable, $pars = {} ) {
  4         6  
  4         6  
  4         6  
  4         6  
603 4         424 require Iterator::Flex::Freeze;
604 4         20 Iterator::Flex::Freeze->new( $code, $iterable, $pars );
605             }
606              
607              
608              
609              
610              
611              
612              
613              
614              
615              
616              
617              
618              
619              
620              
621              
622              
623              
624              
625              
626              
627              
628              
629              
630              
631              
632              
633              
634 13     13 1 293115 sub izip ( @args ) {
  13         27  
  13         19  
635 13         1508 require Iterator::Flex::Zip;
636 13         46 Iterator::Flex::Zip->new( @args );
637             }
638              
639              
640              
641              
642              
643              
644              
645              
646              
647              
648              
649              
650 21     21 1 14273 sub thaw ( $frozen, $pars = {} ) {
  21         44  
  21         44  
  21         35  
651              
652 21         60 my @steps = $frozen->@*;
653              
654             # parent data and iterator state is last
655 21         43 my $exhausted = pop @steps;
656 21         41 my $parent = pop @steps;
657              
658 21         53 my @depends = map { thaw( $_ ) } @steps;
  6         23  
659              
660 21         62 my ( $package, $state ) = @$parent;
661              
662 21 50       69 throw_failure( parameter => "state argument for $package constructor must be a HASH reference" )
663             unless is_hashref( $state );
664              
665 21         90 require_module( $package );
666 21 50       823 my $new_from_state = $package->can( 'new_from_state' )
667             or
668             throw_failure( parameter => "unable to thaw: $package doesn't provide 'new_from_state' method" );
669              
670             $state->{depends} = \@depends
671 21 100       69 if @depends;
672              
673 21         59 $state->{thaw} = 1;
674              
675 21         98 my $iter = $package->$new_from_state( $state, $pars );
676 21 100       138 $exhausted ? $iter->set_exhausted : $iter->_clear_state;
677 21         140 return $iter;
678             }
679              
680             1;
681              
682             #
683             # This file is part of Iterator-Flex
684             #
685             # This software is Copyright (c) 2018 by Smithsonian Astrophysical Observatory.
686             #
687             # This is free software, licensed under:
688             #
689             # The GNU General Public License, Version 3, June 2007
690             #
691              
692             __END__