Skip to content

Instantly share code, notes, and snippets.

@erdomke
erdomke / Aggregator.cs
Created March 1, 2017 22:29
Special dictionary for aggregating values
using System;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// Special dictionary for aggregating values
/// </summary>
public class Aggregator<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>>
{
private Dictionary<TKey, TValue> _values = new Dictionary<TKey, TValue>();
@erdomke
erdomke / XElementStream.cs
Created December 16, 2016 16:08
Correct streaming of XElements
// The code posted at https://blogs.msdn.microsoft.com/xmlteam/2007/03/24/streaming-with-linq-to-xml-part-2/
// will skip every other element with compressed XML. This occurs because the reader after ReadFrom
// is already positioned on the next node and then the reader.Read() will move it to the node afterwards.
// The logic in this snippet fixes the problem.
internal static IEnumerable<XElement> StreamElements(Stream stream, XName matchName)
{
using (var reader = XmlReader.Create(stream))
{
reader.MoveToContent();
var continueNoRead = false;
@erdomke
erdomke / SigFigFormatProvider.cs
Last active March 16, 2017 00:22
Formats a number to a specific number of significant digits
using System;
using System.Globalization;
public static class FormatExtensions
{
public static string ToPrecision(this int value, int digits, string format = "")
{
return SigFigFormatProvider.Instance.Format("s" + digits.ToString() + format, value, null);
}
public static string ToPrecision(this double value, int digits, string format = "")
@erdomke
erdomke / TstDictionary.cs
Created October 5, 2016 19:04
C# Ternary Search Tree Dictionary
// Ternary Search Tree Implementation for C#
//
// Rewritten by Eric Domke
//
// Code adapted from implementation by Jonathan de Halleux
// at http://www.codeproject.com/Articles/5819/Ternary-Search-Tree-Dictionary-in-C-Faster-String
//
// Rewrite focused on
// - removing fields from the TstDictionaryEntry class to reduce memory usage
// - decreasing the number of nodes to reduce memory usage (used some of the