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)17ostream& operator<<(ostream& out, const Id& id) { 18 out << id.s_; 19 return out; 20 } 21 ToValue() const22base::StringValue* Id::ToValue() const { 23 return new base::StringValue(s_); 24 } 25 GetServerId() const26string 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)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 CreateFromClientString(const string & local_id)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 GetLexicographicSuccessor() const52Id 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()61Id Id::GetLeastIdForLexicographicComparison() { 62 Id id; 63 id.s_.clear(); 64 return id; 65 } 66 GetNullId()67Id GetNullId() { 68 return Id(); // Currently == root. 69 } 70 71 } // namespace syncable 72 } // namespace syncer 73