xref: /aosp_15_r20/external/cronet/base/version.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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