entry.h revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SYNC_SYNCABLE_ENTRY_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_SYNCABLE_ENTRY_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/base/sync_export.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/entry_kernel.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Cryptographer; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ReadNode; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncable { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Directory; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BaseTransaction; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A read-only meta entry 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Instead of: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Entry e = transaction.GetById(id); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// use: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Entry e(transaction, GET_BY_ID, id); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Why? The former would require a copy constructor, and it would be difficult 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to enforce that an entry never outlived its transaction if there were a copy 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// constructor. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum GetById { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GET_BY_ID 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum GetByClientTag { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GET_BY_CLIENT_TAG 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum GetByServerTag { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GET_BY_SERVER_TAG 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum GetByHandle { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GET_BY_HANDLE 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SYNC_EXPORT Entry { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After constructing, you must check good() to test whether the Get 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // succeeded. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Entry(BaseTransaction* trans, GetByHandle, int64 handle); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Entry(BaseTransaction* trans, GetById, const Id& id); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Entry(BaseTransaction* trans, GetByServerTag, const std::string& tag); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Entry(BaseTransaction* trans, GetByClientTag, const std::string& tag); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool good() const { return 0 != kernel_; } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BaseTransaction* trans() const { return basetrans_; } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Field accessors. 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int64 GetMetahandle() const { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(META_HANDLE); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int64 GetBaseVersion() const { 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(BASE_VERSION); 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int64 GetServerVersion() const { 70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SERVER_VERSION); 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int64 GetLocalExternalId() const { 75d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(LOCAL_EXTERNAL_ID); 77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int64 GetTransactionVersion() const { 80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(TRANSACTION_VERSION); 82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const base::Time& GetMtime() const { 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(MTIME); 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const base::Time& GetServerMtime() const { 90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SERVER_MTIME); 92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const base::Time& GetCtime() const { 95d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 96d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(CTIME); 97d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 98d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 99d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const base::Time& GetServerCtime() const { 100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 101d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SERVER_CTIME); 102d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 103d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 104d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Id GetId() const { 105d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 106d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(ID); 107d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 108d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 109d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Id GetParentId() const { 110d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 111d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(PARENT_ID); 112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 114d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Id GetServerParentId() const { 115d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 116d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SERVER_PARENT_ID); 117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool GetIsUnsynced() const { 120d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 121d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(IS_UNSYNCED); 122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool GetIsUnappliedUpdate() const { 125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(IS_UNAPPLIED_UPDATE); 127d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 128d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 129d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool GetIsDel() const { 130d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(IS_DEL); 132d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 133d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 134d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool GetIsDir() const { 135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 136d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(IS_DIR); 137d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 138d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool GetServerIsDir() const { 140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SERVER_IS_DIR); 142d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 143d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 144d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool GetServerIsDel() const { 145d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 146d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SERVER_IS_DEL); 147d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 149d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::string& GetNonUniqueName() const { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 151d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(NON_UNIQUE_NAME); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 153d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 154d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::string& GetServerNonUniqueName() const { 155d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(kernel_); 156d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SERVER_NON_UNIQUE_NAME); 157d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 158d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 159d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::string& GetUniqueServerTag() const { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 161d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(UNIQUE_SERVER_TAG); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 163d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 164d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::string& GetUniqueClientTag() const { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 166d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(UNIQUE_CLIENT_TAG); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 168d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 169d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::string& GetUniqueBookmarkTag() const { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 171d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(UNIQUE_BOOKMARK_TAG); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 174d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const sync_pb::EntitySpecifics& GetSpecifics() const { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 176d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SPECIFICS); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 178d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 179d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const sync_pb::EntitySpecifics& GetServerSpecifics() const { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 181d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SERVER_SPECIFICS); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 183d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 184d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const sync_pb::EntitySpecifics& GetBaseServerSpecifics() const { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 186d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(BASE_SERVER_SPECIFICS); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 188d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 189d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const UniquePosition& GetServerUniquePosition() const { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 191d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SERVER_UNIQUE_POSITION); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 193d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 194d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const UniquePosition& GetUniquePosition() const { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 196d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(UNIQUE_POSITION); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 198d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 199d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool GetSyncing() const { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 201d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return kernel_->ref(SYNCING); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ModelType GetServerModelType() const; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ModelType GetModelType() const; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Id GetPredecessorId() const; 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Id GetSuccessorId() const; 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Id GetFirstChildId() const; 210868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int GetTotalNodeCount() const; 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int GetPositionIndex() const; 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 21490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns a vector of this node's children's handles. 21590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Clears |result| if there are no children. If this node is of a type that 21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // supports user-defined ordering then the resulting vector will be in the 21790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // proper order. 21890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void GetChildHandles(std::vector<int64>* result) const; 21990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool ExistsOnClientBecauseNameIsNonEmpty() const { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !kernel_->ref(NON_UNIQUE_NAME).empty(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline bool IsRoot() const { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(kernel_); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kernel_->ref(ID).IsRoot(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns true if this is an entry that is expected to maintain a certain 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // sort ordering relative to its siblings under the same parent. 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ShouldMaintainPosition() const; 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Directory* dir() const; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EntryKernel GetKernelCopy() const { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *kernel_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Dumps all entry info into a DictionaryValue and returns it. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Transfers ownership of the DictionaryValue to the caller. 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::DictionaryValue* ToValue(Cryptographer* cryptographer) const; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: // Don't allow creation on heap, except by sync API wrappers. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* operator new(size_t size) { return (::operator new)(size); } 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inline explicit Entry(BaseTransaction* trans) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : basetrans_(trans), 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kernel_(NULL) { } 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BaseTransaction* const basetrans_; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EntryKernel* kernel_; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class Directory; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class syncer::ReadNode; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend std::ostream& operator << (std::ostream& s, const Entry& e); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Entry); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::ostream& operator<<(std::ostream& os, const Entry& entry); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncable 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // SYNC_SYNCABLE_ENTRY_H_ 270