<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Microsoft.NET.StringTools.net35</name>
    </assembly>
    <members>
        <member name="T:Microsoft.NET.StringTools.FowlerNollVo1aHash">
            <summary>
            Fowler/Noll/Vo hashing.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.FowlerNollVo1aHash.ComputeHash32(System.String)">
            <summary>
            Computes 32 bit Fowler/Noll/Vo-1a hash of a string (regardless of encoding).
            </summary>
            <param name="text">String to be hashed.</param>
            <returns>32 bit signed hash</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.FowlerNollVo1aHash.ComputeHash32Fast(System.String)">
            <summary>
            Computes 32 bit Fowler/Noll/Vo-1a inspired hash of a string.
            The hashing algorithm process the data by the whole 16bit chars, instead of by bytes.
             this speeds up the hashing process almost by 2x, while not significantly increasing collisions rate.
            Analysis: https://github.com/KirillOsenkov/MSBuildStructuredLog/wiki/String-Hashing#faster-fnv-1a
            </summary>
            <param name="text">String to be hashed.</param>
            <returns>32 bit unsigned hash</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.FowlerNollVo1aHash.ComputeHash64Fast(System.String)">
            <summary>
            Computes 64 bit Fowler/Noll/Vo-1a inspired hash of a string.
            The hashing algorithm process the data by the whole 16bit chars, instead of by bytes.
             this speeds up the hashing process almost by 2x, while not significantly increasing collisions rate.
            Analysis: https://github.com/KirillOsenkov/MSBuildStructuredLog/wiki/String-Hashing#faster-fnv-1a
            </summary>
            <param name="text">String to be hashed.</param>
            <returns>64 bit unsigned hash</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.FowlerNollVo1aHash.ComputeHash64(System.String)">
            <summary>
            Computes 64 bit Fowler/Noll/Vo-1a hash of a string (regardless of encoding).
            </summary>
            <param name="text">String to be hashed.</param>
            <returns>64 bit unsigned hash</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.FowlerNollVo1aHash.Combine64(System.Int64,System.Int64)">
            <summary>
            Combines two 64 bit hashes generated by <see cref="T:Microsoft.NET.StringTools.FowlerNollVo1aHash"/> class into one.
            </summary>
            <param name="left">First hash value to be combined.</param>
            <param name="right">Second hash value to be combined.</param>
            <returns></returns>
        </member>
        <member name="T:Microsoft.NET.StringTools.InternableString">
            <summary>
            Represents a string that can be converted to System.String with interning, i.e. by returning an existing string if it has been seen before
            and is still tracked in the intern table.
            </summary>
            <remarks>
            This is a simple and inefficient implementation compatible with .NET Framework 3.5.
            </remarks>
        </member>
        <member name="T:Microsoft.NET.StringTools.InternableString.Enumerator">
            <summary>
            Enumerator for the top-level struct. Enumerates characters of the string.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.InternableString.Enumerator._string">
            <summary>
            The InternableString being enumerated.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.InternableString.Enumerator._charIndex">
            <summary>
            Index of the current character, -1 if MoveNext has not been called yet.
            </summary>
        </member>
        <member name="P:Microsoft.NET.StringTools.InternableString.Enumerator.Current">
            <summary>
            Returns the current character.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.Enumerator.MoveNext">
            <summary>
            Moves to the next character.
            </summary>
            <returns>True if there is another character, false if the enumerator reached the end.</returns>
        </member>
        <member name="F:Microsoft.NET.StringTools.InternableString._builder">
            <summary>
            If this instance wraps a StringBuilder, it uses this backing field.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.InternableString._firstString">
            <summary>
            If this instance represents one contiguous string, it may be held in this field.
            </summary>
        </member>
        <member name="P:Microsoft.NET.StringTools.InternableString.FirstString">
            <summary>
            A convenience getter to ensure that we always operate on a non-null string.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.#ctor(System.String)">
            <summary>
            Constructs a new InternableString wrapping the given string.
            </summary>
            <param name="str">The string to wrap, must be non-null.</param>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.#ctor(Microsoft.NET.StringTools.SpanBasedStringBuilder)">
            <summary>
            Constructs a new InternableString wrapping the given SpanBasedStringBuilder.
            </summary>
        </member>
        <member name="P:Microsoft.NET.StringTools.InternableString.Length">
            <summary>
            Gets the length of the string.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.GetEnumerator">
            <summary>
            Creates a new enumerator for enumerating characters in this string. Does not allocate.
            </summary>
            <returns>The enumerator.</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.Equals(System.String)">
            <summary>
            Returns true if the string is equal to another string by ordinal comparison.
            </summary>
            <param name="other">Another string.</param>
            <returns>True if this string is equal to <paramref name="other"/>.</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.ExpensiveConvertToString">
            <summary>
            Returns a System.String representing this string. Allocates memory unless this InternableString was created by wrapping a
            System.String in which case the original string is returned.
            </summary>
            <returns>The string.</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.ReferenceEquals(System.String)">
            <summary>
            Returns true if this InternableString wraps a System.String and the same System.String is passed as the argument.
            </summary>
            <param name="str">The string to compare to.</param>
            <returns>True is this instance wraps the given string.</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.ToString">
            <summary>
            Converts this instance to a System.String while first searching for a match in the intern table.
            </summary>
            <remarks>
            May allocate depending on whether the string has already been interned.
            </remarks>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.GetHashCode">
            <summary>
            Implements the simple yet very decently performing djb2 hash function (xor version).
            </summary>
            <returns>A stable hashcode of the string represented by this instance.</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.InternableString.HashOneCharacter(System.UInt32,System.Char,System.Boolean)">
            <summary>
            A helper to hash one character.
            </summary>
            <param name="hash">The running hash code.</param>
            <param name="ch">The character to hash.</param>
            <param name="isOddIndex">True if the index of the character in the string is odd.</param>
            <returns></returns>
        </member>
        <member name="T:Microsoft.NET.StringTools.SpanBasedStringBuilder">
            <summary>
            A simple version of SpanBasedStringBuilder to be used on .NET Framework 3.5. Wraps a <see cref="T:System.Text.StringBuilder"/>.
            </summary>
        </member>
        <member name="T:Microsoft.NET.StringTools.SpanBasedStringBuilder.Enumerator">
            <summary>
            Enumerator for the top-level struct. Enumerates characters of the string.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.SpanBasedStringBuilder.Enumerator._builder">
            <summary>
            The StringBuilder being enumerated.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.SpanBasedStringBuilder.Enumerator._charIndex">
            <summary>
            Index of the current character, -1 if MoveNext has not been called yet.
            </summary>
        </member>
        <member name="P:Microsoft.NET.StringTools.SpanBasedStringBuilder.Enumerator.Current">
            <summary>
            Returns the current character.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.SpanBasedStringBuilder.Enumerator.MoveNext">
            <summary>
            Moves to the next character.
            </summary>
            <returns>True if there is another character, false if the enumerator reached the end.</returns>
        </member>
        <member name="F:Microsoft.NET.StringTools.SpanBasedStringBuilder._builder">
            <summary>
            The backing StringBuilder.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.SpanBasedStringBuilder.#ctor(System.String)">
            <summary>
            Constructs a new SpanBasedStringBuilder containing the given string.
            </summary>
            <param name="str">The string to wrap, must be non-null.</param>
        </member>
        <member name="M:Microsoft.NET.StringTools.SpanBasedStringBuilder.#ctor(System.Int32)">
            <summary>
            Constructs a new empty SpanBasedStringBuilder with the given expected number of spans.
            </summary>
        </member>
        <member name="P:Microsoft.NET.StringTools.SpanBasedStringBuilder.Length">
            <summary>
            Gets the length of the string.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.SpanBasedStringBuilder.GetEnumerator">
            <summary>
            Creates a new enumerator for enumerating characters in this string. Does not allocate.
            </summary>
            <returns>The enumerator.</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.SpanBasedStringBuilder.ToString">
            <summary>
            Converts this instance to a System.String while first searching for a match in the intern table.
            </summary>
            <remarks>
            May allocate depending on whether the string has already been interned.
            </remarks>
        </member>
        <member name="M:Microsoft.NET.StringTools.SpanBasedStringBuilder.Dispose">
            <summary>
            Releases this instance.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.SpanBasedStringBuilder.Append(System.String)">
            <summary>
            Appends a string.
            </summary>
            <param name="value">The string to append.</param>
        </member>
        <member name="M:Microsoft.NET.StringTools.SpanBasedStringBuilder.Append(System.String,System.Int32,System.Int32)">
            <summary>
            Appends a substring.
            </summary>
            <param name="value">The string to append.</param>
            <param name="startIndex">The start index of the substring within <paramref name="value"/> to append.</param>
            <param name="count">The length of the substring to append.</param>
        </member>
        <member name="M:Microsoft.NET.StringTools.SpanBasedStringBuilder.Clear">
            <summary>
            Clears this instance making it represent an empty string.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.Strings._spanBasedStringBuilder">
            <summary>
            Per-thread instance of the SpanBasedStringBuilder, created lazily.
            </summary>
            <remarks>
            This field serves as a per-thread one-item object pool, which is adequate for most use
            cases as the builder is not expected to be held for extended periods of time.
            </remarks>
        </member>
        <member name="M:Microsoft.NET.StringTools.Strings.WeakIntern(System.String)">
            <summary>
            Interns the given string, keeping only a weak reference to the returned value.
            </summary>
            <param name="str">The string to intern.</param>
            <returns>A string equal to <paramref name="str"/>, could be the same object as <paramref name="str"/>.</returns>
            <remarks>
            The intern pool does not retain strong references to the strings it's holding so strings are automatically evicted
            after they become unrooted. This is in contrast to <c>System.String.Intern</c> which holds strings forever.
            </remarks>
        </member>
        <member name="M:Microsoft.NET.StringTools.Strings.GetSpanBasedStringBuilder">
            <summary>
            Returns a new or recycled <see cref="T:Microsoft.NET.StringTools.SpanBasedStringBuilder"/>.
            </summary>
            <returns>The SpanBasedStringBuilder.</returns>
            <remarks>
            Call <see cref="M:System.IDisposable.Dispose"/> on the returned instance to recycle it.
            </remarks>
        </member>
        <member name="M:Microsoft.NET.StringTools.Strings.EnableDiagnostics">
            <summary>
            Enables diagnostics in the interner. Call <see cref="M:Microsoft.NET.StringTools.Strings.CreateDiagnosticReport"/> to retrieve the diagnostic data.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.Strings.CreateDiagnosticReport">
            <summary>
            Retrieves the diagnostic data describing the current state of the interner. Make sure to call <see cref="M:Microsoft.NET.StringTools.Strings.EnableDiagnostics"/> beforehand.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.Strings.ReturnSpanBasedStringBuilder(Microsoft.NET.StringTools.SpanBasedStringBuilder)">
            <summary>
            Returns a <see cref="T:Microsoft.NET.StringTools.SpanBasedStringBuilder"/> instance back to the pool if possible.
            </summary>
            <param name="stringBuilder">The instance to return.</param>
        </member>
        <member name="T:Microsoft.NET.StringTools.WeakStringCache">
            <summary>
            A cache of weak GC handles pointing to strings. Weak GC handles are functionally equivalent to WeakReference's but have less overhead
            (they're a struct as opposed to WR which is a finalizable class) at the expense of requiring manual lifetime management. As long as
            a string has an ordinary strong GC root elsewhere in the process and another string with the same hashcode hasn't reused the entry,
            the cache has a reference to it and can match it to an internable. When the string is collected, it is also automatically "removed"
            from the cache by becoming unrecoverable from the GC handle. GC handles that do not reference a live string anymore are freed lazily.
            </summary>
            <summary>
            Implements the WeakStringCache functionality on .NET Framework 3.5 where ConcurrentDictionary is not available.
            </summary>
        </member>
        <member name="T:Microsoft.NET.StringTools.WeakStringCache.DebugInfo">
            <summary>
            Debug stats returned by GetDebugInfo().
            </summary>
        </member>
        <member name="T:Microsoft.NET.StringTools.WeakStringCache.StringWeakHandle">
            <summary>
            Holds a weak GC handle to a string. Shared by all strings with the same hash code and referencing the last such string we've seen.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.WeakStringCache.StringWeakHandle.weakHandle">
            <summary>
            Weak GC handle to the last string of the given hashcode we've seen.
            </summary>
        </member>
        <member name="P:Microsoft.NET.StringTools.WeakStringCache.StringWeakHandle.IsUsed">
            <summary>
            Returns true if the string referenced by the handle is still alive.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCache.StringWeakHandle.GetString(Microsoft.NET.StringTools.InternableString@)">
            <summary>
            Returns the string referenced by this handle if it is equal to the given internable.
            </summary>
            <param name="internable">The internable describing the string we're looking for.</param>
            <returns>The string matching the internable or null if the handle is referencing a collected string or the string is different.</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCache.StringWeakHandle.SetString(System.String)">
            <summary>
            Sets the handle to the given string. If the handle is still referencing another live string, that string is effectively forgotten.
            </summary>
            <param name="str">The string to set.</param>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCache.StringWeakHandle.Free">
            <summary>
            Frees the GC handle.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.WeakStringCache._initialCapacity">
            <summary>
            Initial capacity of the underlying dictionary.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.WeakStringCache._scavengeThreshold">
            <summary>
            The maximum size we let the collection grow before scavenging unused entries.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCache.DisposeImpl">
            <summary>
            Frees all GC handles and clears the cache.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCache.GetDebugInfoImpl">
            <summary>
            Returns internal debug counters calculated based on the current state of the cache.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCache.GetOrCreateEntry(Microsoft.NET.StringTools.InternableString@,System.Boolean@)">
            <summary>
            Main entrypoint of this cache. Tries to look up a string that matches the given internable. If it succeeds, returns
            the string and sets cacheHit to true. If the string is not found, calls ExpensiveConvertToString on the internable,
            adds the resulting string to the cache, and returns it, setting cacheHit to false.
            </summary>
            <param name="internable">The internable describing the string we're looking for.</param>
            <param name="cacheHit">Whether the entry was already in the cache.</param>
            <returns>A string matching the given internable.</returns>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCache.ScavengeNoLock">
            <summary>
            Iterates over the cache and removes unused GC handles, i.e. handles that don't reference live strings.
            This is expensive so try to call such that the cost is amortized to O(1) per GetOrCreateEntry() invocation.
            Assumes the lock is taken by the caller.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCache.Scavenge">
            <summary>
            Public version of ScavengeUnderLock() which takes the lock.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCache.GetDebugInfo">
            <summary>
            Returns internal debug counters calculated based on the current state of the cache.
            </summary>
        </member>
        <member name="T:Microsoft.NET.StringTools.WeakStringCacheInterner">
            <summary>
            Implements interning based on a WeakStringCache.
            </summary>
        </member>
        <member name="T:Microsoft.NET.StringTools.WeakStringCacheInterner.InternResult">
            <summary>
            Enumerates the possible interning results.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.WeakStringCacheInterner._weakStringCache">
            <summary>
            The cache to keep strings in.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.WeakStringCacheInterner._regularInternHits">
            <summary>
            Number of times the regular interning path found the string in the cache.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.WeakStringCacheInterner._regularInternMisses">
            <summary>
            Number of times the regular interning path added the string to the cache.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.WeakStringCacheInterner._internEliminatedStrings">
            <summary>
            Total number of strings eliminated by interning.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.WeakStringCacheInterner._internEliminatedChars">
            <summary>
            Total number of chars eliminated across all strings.
            </summary>
        </member>
        <member name="F:Microsoft.NET.StringTools.WeakStringCacheInterner._internCallCountsByString">
            <summary>
            Maps strings that went though the interning path to the number of times they have been
            seen. The higher the number the better the payoff of interning. Null if statistics
            gathering has not been enabled.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCacheInterner.Intern(Microsoft.NET.StringTools.InternableString@,System.String@)">
            <summary>
            Try to intern the string.
            The return value indicates the how the string was interned.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCacheInterner.InternableToString(Microsoft.NET.StringTools.InternableString@)">
            <summary>
            WeakIntern the given InternableString.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCacheInterner.EnableStatistics">
             <summary>
            
             </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCacheInterner.FormatStatistics">
            <summary>
            Returns a string with human-readable statistics.
            </summary>
        </member>
        <member name="M:Microsoft.NET.StringTools.WeakStringCacheInterner.Dispose">
            <summary>
            Releases all strings from the underlying intern table.
            </summary>
        </member>
        <member name="T:System.MemoryExtensions">
            <summary>
            A bare minimum and inefficient version of MemoryExtensions as provided in System.Memory on .NET 4.5.
            </summary>
        </member>
    </members>
</doc>
