Revision: | 1.3 |
Committed: | Wed Jun 23 09:53:30 1999 UTC (25 years, 10 months ago) by williamc |
Content type: | text/plain |
Branch: | MAIN |
CVS Tags: | V1_0_3-p4, forV1_1_0, v103_xml_071106, V1_0_3-p3, V1_0_3-p2, before110xmlBRmerge, V110p2, V110p1, V1_0_4p1, V1_0_3-p1, V1_0_3, V1_0_2, V1_0_2_p1, v102p1, V1_0_1, V1_0_0, V1_pre0, SCRAM_V1, SCRAMV1_IMPORT, V0_19_7, V0_19_6, V0_19_6p1, V0_19_5, SFATEST, V0_19_4, V0_19_4_pre3, V0_19_4_pre2, V0_19_4_pre1, V0_19_3, V0_19_2, V0_19_1, V0_19_0, V0_18_5, V0_18_4, V_18_3_TEST, VO_18_3, V0_18_2, V0_18_1, ProtoEnd |
Branch point for: | v103_with_xml, v103_branch, V1_pre1, SCRAM_V1_BRANCH, V0_19_4_B, V0_9branch |
Changes since 1.2: | +27 -5 lines |
Log Message: | Make sure we and status with previous results |
# | User | Rev | Content |
---|---|---|---|
1 | williamc | 1.1 | # |
2 | # Maintain a variable to indicate status of a number of requirements | ||
3 | # | ||
4 | # -------------- | ||
5 | # Interface | ||
6 | # | ||
7 | # exclude(gp) : exclude a group | ||
8 | # unexclude(gp) : unexclude a group | ||
9 | # include(gp) : include a group | ||
10 | # uninclude(gp) : uninclude a group | ||
11 | # opencontext(gp) : Annonce group context | ||
12 | williamc | 1.2 | # closecontext(gp) : Close group context |
13 | # closelastcontext(set) : Close the last context added to group the group set | ||
14 | williamc | 1.1 | # status() : If include/excluded groups match the current gp context |
15 | # return 1 else 0 | ||
16 | # getincluded() : return an array of included groups | ||
17 | # getexcluded() : return array of excluded groups | ||
18 | williamc | 1.3 | # clearinclude() : clear all entries from the include list |
19 | # clearexclude() : clear all entries from the exclude list | ||
20 | williamc | 1.1 | # ---------------------------------------------- |
21 | williamc | 1.2 | # group names are characters. Anything before a :: will indicate the |
22 | # group set upon which the closecontext etc will operate. The group set is | ||
23 | # still part of the group name. | ||
24 | # | ||
25 | williamc | 1.1 | |
26 | package GroupChecker; | ||
27 | require 5.001; | ||
28 | require Exporter; | ||
29 | @ISA=qw(Exporter); | ||
30 | |||
31 | sub new { | ||
32 | my $class=shift; | ||
33 | $self={}; | ||
34 | bless $self, $class; | ||
35 | williamc | 1.2 | $self->{context}{none}=1; |
36 | williamc | 1.1 | return $self; |
37 | } | ||
38 | |||
39 | williamc | 1.3 | sub clearinclude { |
40 | my $self=shift; | ||
41 | undef %{$self->{include}}; | ||
42 | } | ||
43 | sub clearexclude { | ||
44 | my $self=shift; | ||
45 | undef %{$self->{exclude}}; | ||
46 | } | ||
47 | |||
48 | williamc | 1.1 | sub exclude { |
49 | my $self=shift; | ||
50 | my $gp=shift; | ||
51 | |||
52 | ${$self->{exclude}}{$gp}=1; | ||
53 | $self->_setstatus; | ||
54 | } | ||
55 | |||
56 | sub unexclude { | ||
57 | my $self=shift; | ||
58 | my $gp=shift; | ||
59 | |||
60 | delete ${$self->{exclude}}{$gp}; | ||
61 | $self->_setstatus; | ||
62 | } | ||
63 | |||
64 | sub include { | ||
65 | my $self=shift; | ||
66 | my $gp=shift; | ||
67 | |||
68 | ${$self->{include}}{$gp}=1; | ||
69 | $self->_setstatus; | ||
70 | } | ||
71 | |||
72 | sub uninclude { | ||
73 | my $self=shift; | ||
74 | my $gp=shift; | ||
75 | |||
76 | delete ${$self->{include}}{$gp}; | ||
77 | $self->_setstatus; | ||
78 | } | ||
79 | |||
80 | sub getexcluded { | ||
81 | my $self=shift; | ||
82 | return keys %{$self->{exclude}} | ||
83 | } | ||
84 | |||
85 | sub getincluded { | ||
86 | my $self=shift; | ||
87 | return keys %{$self->{include}} | ||
88 | } | ||
89 | |||
90 | sub opencontext { | ||
91 | my $self=shift; | ||
92 | my $gp=shift; | ||
93 | williamc | 1.3 | my $set; |
94 | williamc | 1.1 | |
95 | williamc | 1.3 | if ( $gp=~/(.*)::/ ) { |
96 | $set=$1; | ||
97 | } | ||
98 | else { | ||
99 | $set='none'; | ||
100 | } | ||
101 | williamc | 1.2 | |
102 | push @{$self->{contextstack}{$set}}, $gp; | ||
103 | $self->{context}{$gp}=1; | ||
104 | $self->_setstatus(); | ||
105 | williamc | 1.1 | } |
106 | |||
107 | sub closelastcontext { | ||
108 | my $self=shift; | ||
109 | williamc | 1.2 | my $set=shift; |
110 | my $gp; | ||
111 | |||
112 | if ( $set eq "" ) { $set='none' } | ||
113 | do { | ||
114 | $gp=pop @{$self->{contextstack}{$set}}; | ||
115 | williamc | 1.3 | } while ( (! exists $self->{context}{$gp}) && ($gp eq "") ); |
116 | williamc | 1.2 | $self->closecontext($gp); |
117 | } | ||
118 | williamc | 1.1 | |
119 | williamc | 1.2 | sub closecontext { |
120 | my $self=shift; | ||
121 | my $gp=shift; | ||
122 | |||
123 | williamc | 1.3 | if ( $gp=~/(.*)::/ ) { |
124 | $set=$1; | ||
125 | } | ||
126 | else { | ||
127 | $set='none'; | ||
128 | } | ||
129 | williamc | 1.2 | delete $self->{context}{$gp}; |
130 | $self->_setstatus(); | ||
131 | williamc | 1.1 | } |
132 | |||
133 | sub status { | ||
134 | my $self=shift; | ||
135 | return $self->{status}; | ||
136 | } | ||
137 | |||
138 | # -------------- Support Routines ----------------------------------- | ||
139 | |||
140 | sub _setstatus { | ||
141 | my $self=shift; | ||
142 | my $i; | ||
143 | |||
144 | williamc | 1.3 | $self->{status}=1; |
145 | williamc | 1.2 | foreach $i ( keys %{$self->{context}} ) { |
146 | williamc | 1.1 | if ( ( exists $self->{include}{$i} ) |
147 | || ( exists $self->{include}{all} ) ) { | ||
148 | williamc | 1.3 | $self->{status}=( $self->{status} && 1); |
149 | williamc | 1.1 | } |
150 | if ( exists $self->{exclude}{$i} ) { | ||
151 | $self->{status}=0; | ||
152 | } | ||
153 | } | ||
154 | } |