version.h revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_VERSION_H_
6#define BASE_VERSION_H_
7#pragma once
8
9#include <string>
10#include <vector>
11
12#include "base/basictypes.h"
13#include "base/gtest_prod_util.h"
14
15// Version represents a dotted version number, like "1.2.3.4", supporting
16// parsing and comparison.
17// Each component is limited to a uint16.
18class Version {
19 public:
20  // The version string must be made up of 1 or more uint16's separated
21  // by '.'. Returns NULL if string is not in this format.
22  // Caller is responsible for freeing the Version object once done.
23  static Version* GetVersionFromString(const std::string& version_str);
24
25  // Exposed only so that a Version can be stored in STL containers;
26  // any call to the methods below on a default-constructed Version
27  // will DCHECK.
28  Version();
29
30  ~Version();
31
32  // Creates a copy of this version. Caller takes ownership.
33  Version* Clone() const;
34
35  bool Equals(const Version& other) const;
36
37  // Returns -1, 0, 1 for <, ==, >.
38  int CompareTo(const Version& other) const;
39
40  // Return the string representation of this version.
41  const std::string GetString() const;
42
43  const std::vector<uint16>& components() const { return components_; }
44
45 private:
46  bool InitFromString(const std::string& version_str);
47
48  bool is_valid_;
49  std::vector<uint16> components_;
50
51  FRIEND_TEST_ALL_PREFIXES(VersionTest, DefaultConstructor);
52  FRIEND_TEST_ALL_PREFIXES(VersionTest, GetVersionFromString);
53  FRIEND_TEST_ALL_PREFIXES(VersionTest, Compare);
54};
55
56#endif  // BASE_VERSION_H_
57