private bool ComputeNewItems(RecipientInfoCacheSyncWatermark minWatermark, RecipientInfoCacheSyncWatermark maxWatermark, int numOperations, Dictionary <ISyncItemId, ServerManifestEntry> newServerManifest) { if (minWatermark == null) { throw new ArgumentNullException("minWatermark"); } if (maxWatermark == null) { maxWatermark = (RecipientInfoCacheSyncWatermark)this.GetMaxItemWatermark(null); } List <RecipientInfoCacheSyncItemId> list = new List <RecipientInfoCacheSyncItemId>(minWatermark.Entries.Count); bool flag = false; foreach (KeyValuePair <RecipientInfoCacheSyncItemId, long> keyValuePair in minWatermark.Entries) { if (!maxWatermark.Entries.ContainsKey(keyValuePair.Key)) { if (numOperations != -1 && newServerManifest.Count >= numOperations) { flag = true; break; } ServerManifestEntry serverManifestEntry = new ServerManifestEntry(keyValuePair.Key); serverManifestEntry.ChangeType = ChangeType.Delete; newServerManifest[keyValuePair.Key] = serverManifestEntry; list.Add(keyValuePair.Key); } } foreach (RecipientInfoCacheSyncItemId key in list) { minWatermark.Entries.Remove(key); } if (flag) { return(true); } foreach (KeyValuePair <RecipientInfoCacheSyncItemId, long> keyValuePair2 in maxWatermark.Entries) { bool flag2 = !minWatermark.Entries.ContainsKey(keyValuePair2.Key) || minWatermark.Entries[keyValuePair2.Key].CompareTo(keyValuePair2.Value) != 0; if (flag2) { if (numOperations != -1 && newServerManifest.Count >= numOperations) { return(true); } minWatermark.Entries[keyValuePair2.Key] = keyValuePair2.Value; ServerManifestEntry serverManifestEntry2 = new ServerManifestEntry(keyValuePair2.Key); serverManifestEntry2.ChangeType = ChangeType.Add; Dictionary <RecipientInfoCacheSyncItemId, long> dictionary = new Dictionary <RecipientInfoCacheSyncItemId, long>(1); dictionary[keyValuePair2.Key] = keyValuePair2.Value; serverManifestEntry2.Watermark = RecipientInfoCacheSyncWatermark.Create(dictionary, maxWatermark.LastModifiedTime); newServerManifest[keyValuePair2.Key] = serverManifestEntry2; } } minWatermark.LastModifiedTime = maxWatermark.LastModifiedTime; return(false); }
public ISyncWatermark GetMaxItemWatermark(ISyncWatermark currentWatermark) { this.CheckDisposed("GetMaxItemWatermark"); if (this.entryList.Count <= this.maxNumEntries) { return(RecipientInfoCacheSyncWatermark.Create(this.entryList, this.recipientInfoCache.LastModifiedTime)); } if (!this.entryListIsSorted) { this.entryList.Sort(); this.entryListIsSorted = true; } return(RecipientInfoCacheSyncWatermark.Create(this.entryList.GetRange(this.entryList.Count - this.maxNumEntries, this.maxNumEntries), this.recipientInfoCache.LastModifiedTime)); }
public override bool Equals(object thatObject) { RecipientInfoCacheSyncWatermark recipientInfoCacheSyncWatermark = thatObject as RecipientInfoCacheSyncWatermark; return(thatObject != null && this.lastModifiedTime == recipientInfoCacheSyncWatermark.lastModifiedTime); }
public int CompareTo(object thatObject) { RecipientInfoCacheSyncWatermark recipientInfoCacheSyncWatermark = (RecipientInfoCacheSyncWatermark)thatObject; return(this.lastModifiedTime.CompareTo(recipientInfoCacheSyncWatermark.lastModifiedTime)); }
public ISyncWatermark CreateNewWatermark() { this.CheckDisposed("CreateNewWatermark"); return(RecipientInfoCacheSyncWatermark.Create()); }