File Coverage

blib/lib/Repl/Core/StreamBuffer.pm
Criterion Covered Total %
statement 50 50 100.0
branch 8 10 80.0
condition 1 3 33.3
subroutine 10 10 100.0
pod 0 7 0.0
total 69 80 86.2


line stmt bran cond sub pod time code
1             package Repl::Core::StreamBuffer;
2            
3 1     1   1726 use strict;
  1         3  
  1         41  
4 1     1   5 use warnings;
  1         2  
  1         31  
5 1     1   5 use Carp;
  1         2  
  1         580  
6            
7             sub new
8             {
9 1     1 0 691 my $invocant = shift;
10 1   33     8 my $class = ref($invocant) || $invocant;
11            
12 1         2 my $iohandle = shift;
13 1         6 my %args = (LINENO=>1, COLNO=>1, @_);
14            
15             # Initialize the instance.
16 1         3 my $self = {};
17 1         3 $self->{IOHANDLE} = $iohandle;
18 1         4 $self->{BUFFER} = [];
19            
20 1         3 $self->{LINENO} = $args{LINENO};
21 1         3 $self->{COLNO} = $args{COLNO};
22 1         5 return bless($self, $class);
23             }
24            
25             sub eof
26             {
27 582     582 0 590 my $self = shift;
28 582         1142 $self->fillbuf();
29            
30 582         654 my $buf = $self->{BUFFER};
31 582         2026 return scalar(@$buf) == 0;
32             }
33            
34             sub getLineNo
35             {
36 34     34 0 41 my $self = shift;
37 34         75 return $self->{LINENO};
38             }
39            
40             sub getColNo
41             {
42 34     34 0 2617 my $self = shift;
43 34         80 return $self->{COLNO};
44             }
45            
46             sub peekChar
47             {
48 190     190 0 198 my $self = shift;
49 190         295 $self->fillbuf();
50            
51 190         207 my $buf = $self->{BUFFER};
52 190 50       271 return if $self->eof();
53 190         659 return $buf->[0];
54             }
55            
56             sub consumeChar
57             {
58 188     188 0 212 my $self = shift;
59 188         282 $self->fillbuf();
60            
61 188         204 my $buf = $self->{BUFFER};
62 188 50       275 return if $self->eof();
63            
64 188         259 my $result = shift(@$buf);
65 188 100       312 if($result eq "\n")
66             {
67 6         9 $self->{LINENO} = $self->{LINENO} + 1;
68 6         8 $self->{COLNO} = 1;
69             }
70             else
71             {
72 182         283 $self->{COLNO} = $self->{COLNO} + 1;
73             }
74 188         435 return $result;
75             }
76            
77             sub fillbuf
78             {
79 960     960 0 971 my $self = shift;
80 960         1066 my $iohandle = $self->{IOHANDLE};
81 960         1058 my $buf = $self->{BUFFER};
82            
83 960 100       1926 if(!scalar(@$buf))
84             {
85 2         3 my $result = "";
86 2         15 my $nrread = $iohandle->read($result, 1024);
87            
88 2 100       62 if($nrread)
89             {
90             # Fill the buffer with the new characters.
91 1         68 push @$buf, split(//, $result);
92             }
93             }
94             }
95            
96             1;