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