File Coverage

blib/lib/Stream/Streamable.pm
Criterion Covered Total %
statement 51 55 92.7
branch 8 16 50.0
condition 1 3 33.3
subroutine 12 13 92.3
pod 0 5 0.0
total 72 92 78.2


line stmt bran cond sub pod time code
1             #!/usr/local/bin/perl -w
2              
3             #
4             # Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
5             # All rights reserved.
6             #
7              
8             package Stream::Streamable;
9              
10             @Streamable::ISA = qw(Stream::Streamable);
11              
12 1     1   731 use strict;
  1         2  
  1         35  
13 1     1   4 use Carp;
  1         2  
  1         98  
14              
15 1     1   518 use Stream::DataInputStream;
  1         3  
  1         25  
16 1     1   611 use Stream::DataOutputStream;
  1         3  
  1         28  
17 1     1   511 use Stream::StringInputStream;
  1         3  
  1         27  
18 1     1   503 use Stream::StringOutputStream;
  1         3  
  1         28  
19 1     1   586 use Stream::FileInputStream;
  1         4  
  1         37  
20 1     1   706 use Stream::FileOutputStream;
  1         3  
  1         438  
21              
22              
23             sub usage
24             {
25 0     0 0 0 my ($package, $filename, $line, $subr) = caller(1);
26 0         0 $Carp::CarpLevel = 2;
27 0         0 croak "Usage: $subr(@_)";
28             }
29              
30             sub save
31             {
32 6 50   6 0 83 usage unless @_ == 1;
33              
34 6         23 my $sos = new StringOutputStream;
35 6         23 shift->saveToDataStream(new DataOutputStream $sos);
36 6         31 $sos->data();
37             }
38              
39             sub restore
40             {
41 1 50   1 0 4 usage("data") unless @_ == 2;
42              
43 1         9 my $type = shift;
44 1   33     3 my $sis_data = shift || usage("data");
45              
46 1 50       3 (defined $sis_data) || return "Cannot restore from undefined data!";
47              
48 1         3 my $sis = new StringInputStream $sis_data;
49 1         5 my $dis = new DataInputStream $sis;
50              
51 1         11 my $self = restoreFromDataStream $type $dis;
52 1 50       27 return $self unless (ref($self) eq $type);
53              
54 1 50       8 unless ($dis->eoi())
55             {
56 0         0 return "Incorrect length input (".length($dis->readAll())." bytes too many)";
57             }
58              
59 1         26 $self;
60             }
61              
62             #
63             # Restore an object from a file
64             #
65             sub restoreFromFile
66             {
67 1 50   1 0 90 usage("filename") unless @_ == 2;
68              
69 1         1 my $type = shift;
70 1         3 my $filename = shift;
71              
72 1         7 my $fis = new FileInputStream $filename;
73 1 50       4 return unless defined $fis;
74 1         6 my $dis = new DataInputStream $fis;
75              
76 1         7 restoreFromDataStream $type $dis;
77             }
78              
79             #
80             # Save an object to a file
81             #
82             sub saveToFile
83             {
84 1 50   1 0 166 usage("filename") unless @_ == 2;
85              
86 1         8 my $self = shift;
87 1         2 my $filename = shift;
88              
89 1         5 my $fos = new FileOutputStream $filename;
90 1         7 my $dos = new DataOutputStream $fos;
91              
92 1         4 $self->saveToDataStream($dos);
93             }
94              
95             1;