]> cygwin.com Git - cygwin-apps/setup.git/blob - package_version.cc
2002-07-13 Robert Collins <rbtcollins@hotmail.com>
[cygwin-apps/setup.git] / package_version.cc
1 /*
2 * Copyright (c) 2001, Robert Collins.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * A copy of the GNU General Public License can be found at
10 * http://www.gnu.org/
11 *
12 * Written by Robert Collins <rbtcollins@hotmail.com>
13 *
14 */
15
16 /* this is the parent class for all package operations.
17 */
18
19 #if 0
20 static const char *cvsid =
21 "\n%%% $Id$\n";
22 #endif
23
24 #include "package_version.h"
25 #include "package_db.h"
26 #include "package_meta.h"
27 #include "state.h"
28 #include "resource.h"
29
30 /* a default class to avoid special casing empty packageversions */
31
32 /* TODO place into the class header */
33 class _defaultversion : public _packageversion
34 {
35 public:
36 _defaultversion()
37 {
38 // never try to free me!
39 ++references;
40 }
41 String const Name(){return String();}
42 String const Vendor_version() {return String();}
43 String const Package_version() {return String();}
44 String const Canonical_version() {return String();}
45 void setCanonicalVersion (String const &) {}
46 package_status_t Status (){return package_notinstalled;}
47 package_type_t Type () {return package_binary;}
48 String const getfirstfile () {return String();}
49 String const getnextfile () {return String();}
50 String const SDesc () {return String();}
51 void set_sdesc (String const &) {}
52 String const LDesc () {return String();}
53 void set_ldesc (String const &) {}
54 void uninstall (){}
55 };
56 static _defaultversion defaultversion;
57
58 /* the wrapper class */
59 packageversion::packageversion() : data (&defaultversion)
60 {
61 ++data->references;
62 }
63
64 /* Create from an actual package */
65 packageversion::packageversion (_packageversion *pkg)
66 {
67 if (pkg)
68 data = pkg;
69 else
70 data = &defaultversion;
71 ++data->references;
72 }
73
74 packageversion::packageversion (packageversion const &existing) :
75 data(existing.data)
76 {
77 ++data->references;
78 }
79
80 packageversion::~packageversion()
81 {
82 if (--data->references == 0)
83 delete data;
84 }
85
86 packageversion &
87 packageversion::operator= (packageversion const &rhs)
88 {
89 ++rhs.data->references;
90 if (--data->references == 0)
91 delete data;
92 data = rhs.data;
93 return *this;
94 }
95
96 bool
97 packageversion::operator ! () const
98 {
99 return !data->Name().size();
100 }
101
102 packageversion::operator bool () const
103 {
104 return data->Name().size();
105 }
106
107 bool
108 packageversion::operator == (packageversion const &rhs) const
109 {
110 if (this == &rhs || data == rhs.data)
111 return true;
112 else
113 return data->Name () == rhs.data->Name() && data->Canonical_version () == rhs.data->Canonical_version();
114 }
115
116 bool
117 packageversion::operator != (packageversion const &rhs) const
118 {
119 return ! (*this == rhs);
120 }
121
122 bool
123 packageversion::operator < (packageversion const &rhs) const
124 {
125 int t = data->Name ().casecompare (rhs.data->Name());
126 if (t < 0)
127 return true;
128 else if (t > 0)
129 return false;
130 else if (data->Canonical_version().casecompare (rhs.data->Canonical_version()) < 0)
131 return true;
132 return false;
133 }
134
135 String const
136 packageversion::Name () const
137 {
138 return data->Name ();
139 }
140
141 String const
142 packageversion::Canonical_version() const
143 {
144 return data->Canonical_version();
145 }
146
147 void
148 packageversion::setCanonicalVersion (String const &ver)
149 {
150 data->setCanonicalVersion (ver);
151 }
152
153 String const
154 packageversion::getfirstfile ()
155 {
156 return data->getfirstfile ();
157 }
158
159 String const
160 packageversion::getnextfile ()
161 {
162 return data->getnextfile ();
163 }
164
165 String const
166 packageversion::SDesc () const
167 {
168 return data->SDesc ();
169 }
170
171 void
172 packageversion::set_sdesc (String const &sdesc)
173 {
174 data->set_sdesc (sdesc);
175 }
176
177 String const
178 packageversion::LDesc () const
179 {
180 return data->LDesc ();
181 }
182
183 void
184 packageversion::set_ldesc (String const &ldesc)
185 {
186 data->set_ldesc (ldesc);
187 }
188
189 packageversion
190 packageversion::sourcePackage()
191 {
192 return data->sourcePackage();
193 }
194
195 PackageSpecification &
196 packageversion::sourcePackageSpecification ()
197 {
198 return data->sourcePackageSpecification ();
199 }
200
201 void
202 packageversion::setSourcePackageSpecification (PackageSpecification const &spec)
203 {
204 data->setSourcePackageSpecification(spec);
205 }
206
207 vector <vector <PackageSpecification *> *> *
208 packageversion::depends()
209 {
210 return &data->depends;
211 }
212
213 vector <vector <PackageSpecification *> *> *
214 packageversion::predepends()
215 {
216 return &data->predepends;
217 }
218
219 vector <vector <PackageSpecification *> *> *
220 packageversion::recommends()
221 {
222 return &data->recommends;
223 }
224
225 vector <vector <PackageSpecification *> *> *
226 packageversion::suggests()
227 {
228 return &data->suggests;
229 }
230
231 vector <vector <PackageSpecification *> *> *
232 packageversion::replaces()
233 {
234 return &data->replaces;
235 }
236
237 vector <vector <PackageSpecification *> *> *
238 packageversion::conflicts()
239 {
240 return &data->conflicts;
241 }
242
243 vector <vector <PackageSpecification *> *> *
244 packageversion::provides()
245 {
246 return &data->provides;
247 }
248
249 vector <vector <PackageSpecification *> *> *
250 packageversion::binaries()
251 {
252 return &data->binaries;
253 }
254
255 bool
256 packageversion::picked () const
257 {
258 return data->picked;
259 }
260
261 void
262 packageversion::pick (bool aBool)
263 {
264 data->picked = aBool;
265 }
266
267 bool
268 packageversion::changeRequested () const
269 {
270 return data->changeRequested ();
271 }
272
273 void
274 packageversion::uninstall ()
275 {
276 data->uninstall ();
277 }
278
279 packagesource *
280 packageversion::source ()
281 {
282 return &data->source;
283 }
284
285 bool
286 packageversion::accessible() const
287 {
288 return data->accessible();
289 }
290
291 /* the parent data class */
292
293 _packageversion::_packageversion ():picked (false), references (0)
294 {
295 }
296
297 _packageversion::~_packageversion ()
298 {
299 }
300
301 PackageSpecification &
302 _packageversion::sourcePackageSpecification ()
303 {
304 return _sourcePackage;
305 }
306
307 void
308 _packageversion::setSourcePackageSpecification (PackageSpecification const &spec)
309 {
310 _sourcePackage = spec;
311 }
312
313 packageversion
314 _packageversion::sourcePackage ()
315 {
316 if (!sourceVersion)
317 {
318 packagedb db;
319 packagemeta * pkg;
320 pkg = db.findSource (_sourcePackage);
321 /* no valid source meta available, just return the default
322 (blank) package version
323 */
324 if (!pkg)
325 return sourceVersion;
326 set<packageversion>::iterator i=pkg->versions.begin();
327 while (i != pkg->versions.end())
328 {
329 packageversion const & ver = * i;
330 if (_sourcePackage.satisfies (ver))
331 sourceVersion = ver;
332 ++i;
333 }
334 }
335 return sourceVersion;
336 }
337
338 bool
339 _packageversion::accessible() const
340 {
341 return ((::source != IDC_SOURCE_CWD) && source.sites.size()) ||
342 source.Cached ();
343 }
344
345 bool
346 _packageversion::changeRequested ()
347 {
348 return (picked || sourcePackage().picked());
349 }
This page took 0.051387 seconds and 5 git commands to generate.