ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/BuildSystem/Tool.pm
(Generate patch)

Comparing COMP/SCRAM/src/BuildSystem/Tool.pm (file contents):
Revision 1.1 by williamc, Fri Apr 7 08:12:48 2000 UTC vs.
Revision 1.1.2.1 by williamc, Fri Apr 7 08:12:48 2000 UTC

# Line 0 | Line 1
1 + #
2 + # Tool.pm - Store basic tool properties
3 + #
4 + # Originally Written by Christopher Williams
5 + #
6 + # Description
7 + # -----------
8 + # Stores basic tool features
9 + #
10 + # Interface
11 + # ---------
12 + # new()         : A new FeatureTool object
13 + # name()        : get/set the tools name
14 + # version()     : get set the tool version
15 + # url()         : get set the tool url
16 + # features()    : return a list of features defined (ordered in relation to
17 + #                       their first definition)
18 + # addfeature(name,@value) : add value(s) to the named feature
19 + # setfeature(name,@value) : set value(s) for the named feature
20 + # getfeature(name) : return a list of elements belonging to the named feature
21 + # addrequirement() : add a requirement at the current parse position
22 + # dependencies()   : return a list of dependency objects
23 +
24 + package BuildSystem::Tool;
25 + require 5.004;
26 +
27 + sub new {
28 +        my $class=shift;
29 +        my $self={};
30 +        bless $self, $class;
31 +        return $self;
32 + }
33 +
34 + sub name {
35 +        my $self=shift;
36 +
37 +        @_?$self->{name}=shift
38 +          :$self->{name};
39 + }
40 +
41 + sub version {
42 +        my $self=shift;
43 +
44 +        @_?$self->{version}=shift
45 +          :$self->{version};
46 + }
47 +
48 + sub url {
49 +        my $self=shift;
50 +
51 +        @_?$self->{url}=shift
52 +          :$self->{url};
53 + }
54 +
55 +
56 + sub addfeature {
57 +        my $self=shift;
58 +        my $name=shift;
59 +        my @value=@_;
60 +
61 +        $self->_newfeature($name,@value);
62 +        push @{$self->{features}{$name}}, @value;
63 + }
64 +
65 + sub setfeature {
66 +        my $self=shift;
67 +        my $name=shift;
68 +        my @value=@_;
69 +
70 +        $self->_newfeature($name,@value);
71 +        @{$self->{features}{$name}}=@value;
72 + }
73 +
74 +
75 + sub _newfeature {
76 +        my $self=shift;
77 +        my $name=shift;
78 +        my @value=@_;
79 +
80 +        # if it dosnt exist , make sure we first mark all the current reqs
81 +        # get inserted beforehand
82 +        if ( ! exists $self->{features}{$name} ) {
83 +         # add feature name to our ordered list
84 +         push @{$self->{'features_ordered'}},$name;
85 +         for ( $i=0; $i<=$#{$self->{reqobjs}}; $i++ ) {
86 +           $self->_recordpos( $name, $i);
87 +         }
88 +        }
89 + }
90 +
91 + sub features {
92 +        my $self=shift;
93 +
94 + #       return (keys %{$self->{features}});
95 +        return @{$self->{'features_ordered'}};
96 + }
97 +
98 + sub getfeature {
99 +        my $self=shift;
100 +        my $name=shift;
101 +
102 +        my @rv=();
103 +        my @rep;
104 +        # make sure we insert requirements at the right place
105 +        for ( my $i=-1; $i<=$#{$self->{features}{$name}}; $i++ ) {
106 +         if ( $i>=0 ) {
107 +           push @rv, $self->{features}{$name}[$i];
108 +         }
109 +         my @rep=$self->_testpos($name, $i);
110 +         my $repobj;
111 +         foreach $repobj ( @rep ) {
112 +             push @rv, $repobj->getfeature($name);
113 +         }
114 +        }
115 +        return @rv;
116 + }
117 +
118 + sub clearfeature {
119 +        my $self=shift;
120 +        my $name=shift;
121 +
122 +        undef @{$self->{features}{$name}};
123 + }
124 +
125 + sub addrequirement {
126 +        my $self=shift;
127 +        my $reqobj=shift;
128 +
129 +        push @{$self->{reqobjs}}, $reqobj;
130 +        foreach $key ( keys %{$self->{features}} ) {
131 +           $self->_recordpos($key,$#{$self->{reqobjs}});
132 +        }
133 + }
134 +
135 + sub dependencies {
136 +        my $self=shift;
137 +        return @{$self->{recobjs}}
138 + }
139 +
140 + sub _recordpos {
141 +        my $self=shift;
142 +        my $name=shift;
143 +        my $recref=shift;
144 +
145 +        push @{$self->{requireposition}{$name}{$#{$self->{features}{$name}}}}
146 +                ,$recref;
147 + }
148 +
149 + # return array of objects that correspond to the required position
150 + sub _testpos {
151 +        my $self=shift;
152 +        my $name=shift;
153 +        my $ref=shift;
154 +
155 +        my @rv=();
156 +        if ( exists $self->{requireposition}{$name}{$ref} ) {
157 +           foreach $recref ( @{$self->{requireposition}{$name}{$ref}} ) {
158 +             push @rv, $self->{reqobjs}[$recref];
159 +           }
160 +        }
161 +        return @rv;
162 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines