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

# User Rev Content
1 williamc 1.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