ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/Utilities/Message.pm
Revision: 1.1
Committed: Wed Jan 5 15:32:32 2000 UTC (25 years, 4 months ago) by williamc
Content type: text/plain
Branch: MAIN
Log Message:
basic layered message - tested except for copy method

File Contents

# Content
1 #
2 # Message.pm
3 #
4 # Originally Written by Christopher Williams
5 #
6 # Description
7 # -----------
8 # Hold a multi level message that can be reconstructed to any level
9 #
10 # Interface
11 # ---------
12 # new() : A new Message object
13 # setlevel([level_number]) : set the current level to which messages can
14 # be assigned.
15 # message(string) : Set a new message at the current level
16 # read([level]) : return list of all messages up to level n (or
17 # current assignment level)
18 # readlevel(level) : read only those messages assigned to the given
19 # level
20 # copy(Message) : Copy the messages from one object to the current
21 # starting at the current active level
22 # levels() : return the number of assignment levels
23
24 package Utilities::Message;
25 require 5.004;
26
27 sub new {
28 my $class=shift;
29 $self={};
30 bless $self, $class;
31 $self->setlevel(0);
32 $self->{messages}=();
33 return $self;
34 }
35
36 sub setlevel {
37 my $self=shift;
38
39 @_?$self->{aslevel}=shift
40 :$self->{aslevel}++;
41 if ( $self->{aslevel} > $self->{max} ) { $self->{max}++ }
42 }
43
44 sub levels {
45 my $self=shift;
46 return $self->{max};
47 }
48
49 sub message {
50 my $self=shift;
51 my $message=shift;
52
53 push @{$self->{messages}}, $message;
54 push @{$self->{messagelevel}}, $self->{aslevel};
55 }
56
57 sub read {
58 my $self=shift;
59
60 my $lev;
61 if (@_) { $lev=shift }
62 else { $lev=$self->{aslevel} }
63 my @messages=();
64 for ( my $i=0; $i<=$#{$self->{messages}}; $i++) {
65 if ( $self->{messagelevel}[$i] <= $lev ) {
66 push @messages, $self->{messages}[$i];
67 }
68 }
69 return @messages;
70 }
71
72 sub readlevel {
73 my $self=shift;
74
75 my @messages=();
76 my $lev;
77 if (@_) { $lev=shift }
78 else { $lev=$self->{aslevel} }
79
80 for ( my $i=0; $i<=$#{$self->{messages}}; $i++) {
81 if ( $self->{messagelevel}[$i] eq $lev ) {
82 push @messages, $self->{messages}[$i];
83 }
84 }
85 return @messages;
86 }
87
88 sub copy {
89 my $self=shift;
90 my $obj=shift;
91
92 my $currentlev=$self->{aslevel};
93 for ( my $i=0; $i<=$obj->levels(); $i++) {
94 foreach $mes ( $obj->readlevel($i) ) {
95 $self->message($mes);
96 }
97 $self->setlevel();
98 }
99 $self->setlevel($currentlev);
100 }
101