1// Copyright (c) 2012 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#include "sync/syncable/syncable_id.h"
6
7#include <iosfwd>
8
9#include "base/values.h"
10
11using std::ostream;
12using std::string;
13
14namespace syncer {
15namespace syncable {
16
17ostream& operator<<(ostream& out, const Id& id) {
18  out << id.s_;
19  return out;
20}
21
22base::StringValue* Id::ToValue() const {
23  return new base::StringValue(s_);
24}
25
26string Id::GetServerId() const {
27  // Currently root is the string "0". We need to decide on a true value.
28  // "" would be convenient here, as the IsRoot call would not be needed.
29  if (IsRoot())
30    return "0";
31  return s_.substr(1);
32}
33
34Id Id::CreateFromServerId(const string& server_id) {
35  Id id;
36  if (server_id == "0")
37    id.s_ = "r";
38  else
39    id.s_ = string("s") + server_id;
40  return id;
41}
42
43Id Id::CreateFromClientString(const string& local_id) {
44  Id id;
45  if (local_id == "0")
46    id.s_ = "r";
47  else
48    id.s_ = string("c") + local_id;
49  return id;
50}
51
52Id Id::GetLexicographicSuccessor() const {
53  // The successor of a string is given by appending the least
54  // character in the alphabet.
55  Id id = *this;
56  id.s_.push_back(0);
57  return id;
58}
59
60// static
61Id Id::GetLeastIdForLexicographicComparison() {
62  Id id;
63  id.s_.clear();
64  return id;
65}
66
67Id GetNullId() {
68  return Id();  // Currently == root.
69}
70
71}  // namespace syncable
72}  // namespace syncer
73