protected override ImmutableSortedDictionary <TKey, TValue> AddRange(ImmutableSortedDictionary <TKey, TValue> values, ref ArraySegment <KeyValuePair <TKey, TValue> > newValues, ISerializationContext context) { if (newValues.Count == 1) { var pair = newValues.Singleton(); return(values.Add(pair.Key, pair.Value)); } return(values.AddRange(newValues)); }
/// <summary> /// Appends the tags. /// </summary> /// <param name="writer">The writer.</param> /// <param name="pointSettings">The point settings.</param> private void AppendTags(StringBuilder writer, PointSettings pointSettings) { IReadOnlyDictionary <string, string> entries; if (pointSettings == null) { entries = _tags; } else { IReadOnlyDictionary <string, string> defaultTags = pointSettings.GetDefaultTags(); try { entries = _tags.AddRange(defaultTags); } catch (ArgumentException) { // Most cases don't expect to override existing content // override don't consider as best practice // therefore it a trade-off between being less efficient // on the default behavior or on the override scenario var builder = _tags.ToBuilder(); foreach (var item in defaultTags) { var name = item.Key; if (!builder.ContainsKey(name)) // existing tags overrides { builder.Add(name, item.Value); } } entries = builder; } } foreach (var keyValue in entries) { var key = keyValue.Key; var value = keyValue.Value; if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value)) { continue; } writer.Append(','); EscapeKey(writer, key); writer.Append('='); EscapeKey(writer, value); } writer.Append(' '); }