xref: /haiku/src/kits/package/PackageVersion.cpp (revision c80809a3ab0b0a2ce53ea861a2b00ace24ff452d)
1 /*
2  * Copyright 2011, Oliver Tappe <zooey@hirschkaefer.de>
3  * Distributed under the terms of the MIT License.
4  */
5 
6 
7 #include <package/PackageVersion.h>
8 
9 #include <NaturalCompare.h>
10 
11 #include <package/hpkg/PackageInfoAttributeValue.h>
12 
13 
14 using BPrivate::NaturalCompare;
15 
16 
17 namespace BPackageKit {
18 
19 
20 BPackageVersion::BPackageVersion()
21 	:
22 	fRelease(0)
23 {
24 }
25 
26 
27 BPackageVersion::BPackageVersion(const BPackageVersionData& data)
28 	:
29 	fMajor(data.major),
30 	fMinor(data.minor),
31 	fMicro(data.micro),
32 	fRelease(data.release)
33 {
34 }
35 
36 
37 BPackageVersion::BPackageVersion(const BString& major, const BString& minor,
38 	const BString& micro, uint8 release)
39 	:
40 	fMajor(major),
41 	fMinor(minor),
42 	fMicro(micro),
43 	fRelease(release)
44 {
45 }
46 
47 
48 status_t
49 BPackageVersion::InitCheck() const
50 {
51 	return fMajor.Length() > 0 ? B_OK : B_NO_INIT;
52 }
53 
54 
55 const BString&
56 BPackageVersion::Major() const
57 {
58 	return fMajor;
59 }
60 
61 
62 const BString&
63 BPackageVersion::Minor() const
64 {
65 	return fMinor;
66 }
67 
68 
69 const BString&
70 BPackageVersion::Micro() const
71 {
72 	return fMicro;
73 }
74 
75 
76 uint8
77 BPackageVersion::Release() const
78 {
79 	return fRelease;
80 }
81 
82 
83 int
84 BPackageVersion::Compare(const BPackageVersion& other) const
85 {
86 	int majorDiff = NaturalCompare(fMajor.String(), other.fMajor.String());
87 	if (majorDiff != 0)
88 		return majorDiff;
89 
90 	int minorDiff = NaturalCompare(fMinor.String(), other.fMinor.String());
91 	if (minorDiff != 0)
92 		return minorDiff;
93 
94 	int microDiff = NaturalCompare(fMicro.String(), other.fMicro.String());
95 	if (microDiff != 0)
96 		return microDiff;
97 
98 	return (int)fRelease - (int)other.fRelease;
99 }
100 
101 
102 BString
103 BPackageVersion::ToString() const
104 {
105 	BString string = fMajor;
106 
107 	if (fMinor.Length() > 0) {
108 		string << '.' << fMinor;
109 		if (fMicro.Length() > 0)
110 			string << '.' << fMicro;
111 	}
112 
113 	if (fRelease > 0)
114 		string << '-' << fRelease;
115 
116 	return string;
117 }
118 
119 
120 void
121 BPackageVersion::SetTo(const BString& major, const BString& minor,
122 	const BString& micro, uint8 release)
123 {
124 	fMajor = major;
125 	fMinor = minor;
126 	fMicro = micro;
127 	fRelease = release;
128 }
129 
130 
131 void
132 BPackageVersion::Clear()
133 {
134 	fMajor.Truncate(0);
135 	fMinor.Truncate(0);
136 	fMicro.Truncate(0);
137 	fRelease = 0;
138 }
139 
140 
141 }	// namespace BPackageKit
142