예제 #1
0
        public ImmutableSortedSet <T> ImmutableSortedSet()
        {
            ImmutableSortedSet <T> immutableSortedSet = ImmutableSortedSet <T> .Empty;

            foreach (T value in _uniqueValues)
            {
                immutableSortedSet = immutableSortedSet.Add(value);
            }
            return(immutableSortedSet.Clear());
        }
예제 #2
0
        public void ToImmutableSortedSet()
        {
            ImmutableSortedSet <int> .Builder builder = ImmutableSortedSet.CreateBuilder <int>();
            builder.Add(1);
            builder.Add(5);
            builder.Add(10);

            var set = builder.ToImmutableSortedSet();

            Assert.Equal(1, builder[0]);
            Assert.Equal(5, builder[1]);
            Assert.Equal(10, builder[2]);

            builder.Remove(10);
            Assert.False(builder.Contains(10));
            Assert.True(set.Contains(10));

            builder.Clear();
            Assert.True(builder.ToImmutableSortedSet().IsEmpty);
            Assert.False(set.IsEmpty);

            ImmutableSortedSet <int> .Builder nullBuilder = null;
            AssertExtensions.Throws <ArgumentNullException>("builder", () => nullBuilder.ToImmutableSortedSet());
        }
 public static ImmutableSortedSet <T> ResetContents <T>(this ImmutableSortedSet <T> set, IEnumerable <T> values)
 {
     return(set.SetEquals(values) ? set : set.Clear().Union(values));
 }
예제 #4
0
        /// <summary>
        /// Asynchronously reads data into the current <see cref="SearchResult"/>.
        /// </summary>
        /// <param name="reader">
        /// The <see cref="XmlReader"/> from which to read.
        /// </param>
        /// <returns>
        /// A <see cref="Task"/> representing the operation.
        /// </returns>
        public async Task ReadXmlAsync(XmlReader reader)
        {
            Contract.Requires <ArgumentNullException>(reader != null, "reader");

            reader.MoveToElement();
            reader.EnsureMarkup(XmlNodeType.Element, "result");

            this.Object = new Dictionary <string, object>();
            var dictionary = (IDictionary <string, object>) this.Object;

            this.tagsObject = new Dictionary <string, object>();
            var tagsDictionary = (IDictionary <string, object>) this.tagsObject;

            this.SegmentedRaw = null;

            await reader.ReadEachDescendantAsync("field", async (r) =>
            {
                ImmutableSortedSet <string> .Builder tags = null;

                var key    = r.GetRequiredAttribute("k");
                var values = new List <object>();

                var fieldDepth = r.Depth;

                while (await r.ReadAsync().ConfigureAwait(false))
                {
                    if (r.Depth == fieldDepth)
                    {
                        break;
                    }

                    Debug.Assert(r.Depth > fieldDepth, "This loop should have exited earlier.");
                    r.EnsureMarkup(XmlNodeType.Element, "value", "v");

                    if (r.IsEmptyElement)
                    {
                        continue;
                    }

                    if (r.Name == "value")
                    {
                        await r.ReadAsync().ConfigureAwait(false);
                        string value = null;

                        while (r.NodeType == XmlNodeType.Element)
                        {
                            r.EnsureMarkup(XmlNodeType.Element, "text", "tag");
                            var elementName = r.Name;

                            string content = await r.ReadElementContentAsStringAsync().ConfigureAwait(false);

                            switch (elementName)
                            {
                            case "text":
                                value = content;
                                break;

                            case "tag":
                                if (tags == null)
                                {
                                    tags = ImmutableSortedSet.CreateBuilder <string>();
                                }
                                tags.Add(content);
                                break;
                            }
                        }

                        r.EnsureMarkup(XmlNodeType.EndElement, "value");

                        if (tags != null && tags.Count > 0)
                        {
                            values.Add(new TaggedFieldValue(value ?? string.Empty, tags.ToImmutable()));
                            tags.Clear();
                        }
                        else
                        {
                            values.Add(value ?? string.Empty);
                        }
                    }
                    else
                    {
                        Debug.Assert(this.SegmentedRaw == null);
                        Debug.Assert(key == "_raw");

                        string value      = await r.ReadOuterXmlAsync().ConfigureAwait(false);
                        this.SegmentedRaw = XElement.Parse(value);
                        values.Add(this.SegmentedRaw.Value);
                    }
                }

                if (key.StartsWith("tag::"))
                {
                    var valueSet = ImmutableSortedSet.ToImmutableSortedSet <string>(values.Cast <string>());
                    tagsDictionary.Add(key.Substring("tag::".Length), valueSet);
                    dictionary.Add(key, valueSet);
                }
                else
                {
                    switch (values.Count)
                    {
                    case 0:
                        dictionary.Add(key, string.Empty);
                        break;

                    case 1:
                        dictionary.Add(key, values[0]);
                        break;

                    default:
                        dictionary.Add(key, new ReadOnlyCollection <object>(values));
                        break;
                    }
                }
            }).ConfigureAwait(false);
        }
 protected override ImmutableSortedSet <T> Clear(ImmutableSortedSet <T> values, ISerializationContext context)
 => values.Clear();