Example #1
0
        public bool UnionWith(MsgSetBlobPack other)
        {
            DateTime progress = DateTime.MaxValue;

            while (progress != DateTime.MinValue)
            {
                List <KeyValuePair <DateTime, CloudBlob> > blobsList = GetBlobs();
                if (!blobsList.Any())
                {
                    return(false);
                }
                try
                {
                    for (int i = blobsList.Count - 1; i >= 0; i--)
                    {
                        Blob <MessageSet> currentBlob = new Blob <MessageSet>(blobsList[i].Value);
                        DateTime          upperBound  = (i + 1 < blobsList.Count) ? blobsList[i + 1].Key : DateTime.MaxValue;
                        DateTime          lowerBound  = blobsList[i].Key;
                        if (lowerBound > progress)
                        {
                            continue;
                        }

                        MessageSet set;
                        do
                        {
                            set = GetMessageSet(currentBlob);
                            set.UnionWith(other.GetMessagesBetween(lowerBound, upperBound));
                        } while (!currentBlob.TrySet(set));

                        progress = lowerBound;
                    }
                }
                catch (VersionHasChanged) { continue; }
            }

            return(true);
        }
Example #2
0
        public bool UnionWith(MsgSetBlobPack other)
        {
            DateTime progress = DateTime.MaxValue;

            while (progress != DateTime.MinValue)
            {
                List<KeyValuePair<DateTime, CloudBlob>> blobsList = GetBlobs();
                if (!blobsList.Any())
                    return false;
                try
                {
                    for (int i = blobsList.Count-1; i >=0 ; i--)
                    {
                        Blob<MessageSet> currentBlob = new Blob<MessageSet>(blobsList[i].Value);
                        DateTime upperBound = (i + 1 < blobsList.Count) ? blobsList[i + 1].Key : DateTime.MaxValue;
                        DateTime lowerBound = blobsList[i].Key;
                        if (lowerBound > progress)
                            continue;

                        MessageSet set;
                        do
                        {
                            set = GetMessageSet(currentBlob);
                            set.UnionWith(other.GetMessagesBetween(lowerBound, upperBound));
                        } while (!currentBlob.TrySet(set));

                        progress = lowerBound;
                    }
                }
                catch (VersionHasChanged) { continue; }
            }

            return true;
        }