• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
11 using std::ostream;
12 using std::string;
13 
14 namespace syncer {
15 namespace syncable {
16 
operator <<(ostream & out,const Id & id)17 ostream& operator<<(ostream& out, const Id& id) {
18   out << id.s_;
19   return out;
20 }
21 
ToValue() const22 base::StringValue* Id::ToValue() const {
23   return new base::StringValue(s_);
24 }
25 
GetServerId() const26 string 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 
CreateFromServerId(const string & server_id)34 Id 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 
CreateFromClientString(const string & local_id)43 Id 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 
GetLexicographicSuccessor() const52 Id 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
GetLeastIdForLexicographicComparison()61 Id Id::GetLeastIdForLexicographicComparison() {
62   Id id;
63   id.s_.clear();
64   return id;
65 }
66 
GetNullId()67 Id GetNullId() {
68   return Id();  // Currently == root.
69 }
70 
71 }  // namespace syncable
72 }  // namespace syncer
73