1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_VERSION_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_VERSION_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include <iosfwd> 11*6777b538SAndroid Build Coastguard Worker #include <string> 12*6777b538SAndroid Build Coastguard Worker #include <vector> 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 15*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_piece.h" 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker namespace base { 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker // Version represents a dotted version number, like "1.2.3.4", supporting 20*6777b538SAndroid Build Coastguard Worker // parsing and comparison. 21*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT Version { 22*6777b538SAndroid Build Coastguard Worker public: 23*6777b538SAndroid Build Coastguard Worker // The only thing you can legally do to a default constructed 24*6777b538SAndroid Build Coastguard Worker // Version object is assign to it. 25*6777b538SAndroid Build Coastguard Worker Version(); 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker Version(const Version& other); 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker // Initializes from a decimal dotted version number, like "0.1.1". 30*6777b538SAndroid Build Coastguard Worker // Each component is limited to a uint32_t. Call IsValid() to learn 31*6777b538SAndroid Build Coastguard Worker // the outcome. 32*6777b538SAndroid Build Coastguard Worker explicit Version(StringPiece version_str); 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker // Initializes from a vector of components, like {1, 2, 3, 4}. Call IsValid() 35*6777b538SAndroid Build Coastguard Worker // to learn the outcome. 36*6777b538SAndroid Build Coastguard Worker explicit Version(std::vector<uint32_t> components); 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker ~Version(); 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker // Returns true if the object contains a valid version number. 41*6777b538SAndroid Build Coastguard Worker bool IsValid() const; 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker // Returns true if the version wildcard string is valid. The version wildcard 44*6777b538SAndroid Build Coastguard Worker // string may end with ".*" (e.g. 1.2.*, 1.*). Any other arrangement with "*" 45*6777b538SAndroid Build Coastguard Worker // is invalid (e.g. 1.*.3 or 1.2.3*). This functions defaults to standard 46*6777b538SAndroid Build Coastguard Worker // Version behavior (IsValid) if no wildcard is present. 47*6777b538SAndroid Build Coastguard Worker static bool IsValidWildcardString(StringPiece wildcard_string); 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker // Returns -1, 0, 1 for <, ==, >. `this` and `other` must both be valid. 50*6777b538SAndroid Build Coastguard Worker int CompareTo(const Version& other) const; 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker // Given a valid version object, compare if a |wildcard_string| results in a 53*6777b538SAndroid Build Coastguard Worker // newer version. This function will default to CompareTo if the string does 54*6777b538SAndroid Build Coastguard Worker // not end in wildcard sequence ".*". IsValidWildcard(wildcard_string) must be 55*6777b538SAndroid Build Coastguard Worker // true before using this function. 56*6777b538SAndroid Build Coastguard Worker int CompareToWildcardString(StringPiece wildcard_string) const; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker // Return the string representation of this version. 59*6777b538SAndroid Build Coastguard Worker std::string GetString() const; 60*6777b538SAndroid Build Coastguard Worker components()61*6777b538SAndroid Build Coastguard Worker const std::vector<uint32_t>& components() const { return components_; } 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker private: 64*6777b538SAndroid Build Coastguard Worker std::vector<uint32_t> components_; 65*6777b538SAndroid Build Coastguard Worker }; 66*6777b538SAndroid Build Coastguard Worker 67*6777b538SAndroid Build Coastguard Worker BASE_EXPORT bool operator==(const Version& v1, const Version& v2); 68*6777b538SAndroid Build Coastguard Worker BASE_EXPORT bool operator!=(const Version& v1, const Version& v2); 69*6777b538SAndroid Build Coastguard Worker BASE_EXPORT bool operator<(const Version& v1, const Version& v2); 70*6777b538SAndroid Build Coastguard Worker BASE_EXPORT bool operator<=(const Version& v1, const Version& v2); 71*6777b538SAndroid Build Coastguard Worker BASE_EXPORT bool operator>(const Version& v1, const Version& v2); 72*6777b538SAndroid Build Coastguard Worker BASE_EXPORT bool operator>=(const Version& v1, const Version& v2); 73*6777b538SAndroid Build Coastguard Worker BASE_EXPORT std::ostream& operator<<(std::ostream& stream, const Version& v); 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker } // namespace base 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker #endif // BASE_VERSION_H_ 78