| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "sync/syncable/syncable_id.h" |
| |
| #include <iosfwd> |
| |
| #include "base/values.h" |
| |
| using std::ostream; |
| using std::string; |
| |
| namespace syncer { |
| namespace syncable { |
| |
| ostream& operator<<(ostream& out, const Id& id) { |
| out << id.s_; |
| return out; |
| } |
| |
| base::StringValue* Id::ToValue() const { |
| return new base::StringValue(s_); |
| } |
| |
| string Id::GetServerId() const { |
| // Currently root is the string "0". We need to decide on a true value. |
| // "" would be convenient here, as the IsRoot call would not be needed. |
| if (IsRoot()) |
| return "0"; |
| return s_.substr(1); |
| } |
| |
| Id Id::CreateFromServerId(const string& server_id) { |
| Id id; |
| if (server_id == "0") |
| id.s_ = "r"; |
| else |
| id.s_ = string("s") + server_id; |
| return id; |
| } |
| |
| Id Id::CreateFromClientString(const string& local_id) { |
| Id id; |
| if (local_id == "0") |
| id.s_ = "r"; |
| else |
| id.s_ = string("c") + local_id; |
| return id; |
| } |
| |
| Id Id::GetLexicographicSuccessor() const { |
| // The successor of a string is given by appending the least |
| // character in the alphabet. |
| Id id = *this; |
| id.s_.push_back(0); |
| return id; |
| } |
| |
| // static |
| Id Id::GetLeastIdForLexicographicComparison() { |
| Id id; |
| id.s_.clear(); |
| return id; |
| } |
| |
| Id GetNullId() { |
| return Id(); // Currently == root. |
| } |
| |
| } // namespace syncable |
| } // namespace syncer |