version.h revision c407dc5cd9bdc5668497f21b26b09d988ab439de
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
8#include <string>
9#include <vector>
10
11#include "base/basictypes.h"
12#include "base/gtest_prod_util.h"
13
14class Version {
15 public:
16  // The version string must be made up of 1 or more uint16's separated
17  // by '.'. Returns NULL if string is not in this format.
18  // Caller is responsible for freeing the Version object once done.
19  static Version* GetVersionFromString(const std::wstring& version_str);
20  static Version* GetVersionFromString(const std::string& version_str);
21
22  // Exposed only so that a Version can be stored in STL containers;
23  // any call to the methods below on a default-constructed Version
24  // will DCHECK.
25  Version();
26
27  ~Version() {}
28
29  bool Equals(const Version& other) const;
30
31  // Returns -1, 0, 1 for <, ==, >.
32  int CompareTo(const Version& other) const;
33
34  // Return the string representation of this version.
35  const std::string GetString() const;
36
37  const std::vector<uint16>& components() const { return components_; }
38
39 private:
40  bool InitFromString(const std::string& version_str);
41
42  bool is_valid_;
43  std::vector<uint16> components_;
44
45  FRIEND_TEST_ALL_PREFIXES(VersionTest, DefaultConstructor);
46  FRIEND_TEST_ALL_PREFIXES(VersionTest, GetVersionFromString);
47  FRIEND_TEST_ALL_PREFIXES(VersionTest, Compare);
48};
49
50#endif  // BASE_VERSION_H_
51