Click here to Skip to main content
15,886,632 members
Articles / Programming Languages / C#

Managed Bitmaps 2

Rate me:
Please Sign up or sign in to vote.
4.77/5 (17 votes)
19 Mar 2010CPOL5 min read 51.5K   991   36  
This article presents classes that represent bitmaps in full managed code.
<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Pfz</name>
    </assembly>
    <members>
        <member name="T:Pfz.DisplayNameAttribute">
            <summary>
            Allows you to se a different display name for an enum value,
            or simple put a DisplayName to fields, properties and other things.
            </summary>
        </member>
        <member name="M:Pfz.DisplayNameAttribute.#ctor(System.String)">
            <summary>
            Creates the display name attribute setting it's value.
            </summary>
            <param name="displayName">The displayName to use for this enum.</param>
        </member>
        <member name="P:Pfz.DisplayNameAttribute.DisplayName">
            <summary>
            Gets the display name for the enum value.
            </summary>
        </member>
        <member name="T:Pfz.Caching.WeakDelegateSet">
            <summary>
            This class acts as a hashset for delegates, but allows the
            Targets to be collected, working as if the Delegates where 
            WeakDelegates.
            The original idea was to make this a generic class, but it
            is not possible to use Delegate as a constraint (where T: Delegate).
            
            To use, implement your event like:
            private WeakDelegateSet fMyEvent = new WeakDelegateSet();
            public event EventHandler MyEvent
            {
            	add
            	{
            		fMyEvent.Add(value);
            	}
            	remove
            	{
            		fMyEvent.Remove(value);
            	}
            	
            And when you want to invoke MyEvent, you call:
            	fMyEvent.Invoke(this, EventArgs.Empty);
            }
            </summary>
        </member>
        <member name="T:Pfz.Threading.ThreadSafeDisposable">
            <summary>
            This class is useful if you need to implement the dispose pattern
            in a thread-safe manner.
            It guarantees that dispose will be called only once, even if many 
            threads try to call Dispose at once. In your code, you must lock 
            DisposeLock, check if the object is disposed and call anything that 
            must be guaranteed to run before dispose inside the lock block.
            </summary>
        </member>
        <member name="T:Pfz.IAdvancedDisposable">
            <summary>
            Interface for disposable objects that can inform they are already
            disposed without throwing an exception.
            </summary>
        </member>
        <member name="M:Pfz.IAdvancedDisposable.CheckUndisposed">
            <summary>
            Checks if this object was disposed. If it was, throws an exception.
            </summary>
        </member>
        <member name="P:Pfz.IAdvancedDisposable.WasDisposed">
            <summary>
            Gets a value indicating if the object was already disposed.
            </summary>
        </member>
        <member name="M:Pfz.Threading.ThreadSafeDisposable.Finalize">
            <summary>
            Calls Dispose(false);
            </summary>
        </member>
        <member name="M:Pfz.Threading.ThreadSafeDisposable.Dispose">
            <summary>
            Calls Dispose(true) to release all resources.
            Guarantees that only a single call to Dispose(true) is done 
            even if  this method is invoked multiple times or by many 
            different threads at the same time.
            </summary>
        </member>
        <member name="M:Pfz.Threading.ThreadSafeDisposable.Dispose(System.Boolean)">
            <summary>
            Implement this method to release all resources used by this object.
            </summary>
            <param name="disposing">
            This parameter is true if it was called by a user call to Dispose(),
            and false if it was called by a destructor. If false, you don't need
            to release managed resources (in general, you don't need to set any
            variables to null or even reference other objects, only freeing 
            "unsafe" pointers).
            </param>
        </member>
        <member name="M:Pfz.Threading.ThreadSafeDisposable.CheckUndisposed">
            <summary>
            Checks if the objects is disposed. If it is, throws an 
            ObjectDisposedException. Call this as the first method inside a 
            AbortSafe.Lock
            (
            	DisposeLock,
            	delegate
            	{
            		CheckUndisposed(); 
            		... your protected code here ...
            	}
            );
            
            or simple call it without any lock if you only want to throw
            an exception if the object is already disposed but such a call
            is read-only.
            </summary>
        </member>
        <member name="P:Pfz.Threading.ThreadSafeDisposable.WasDisposed">
            <summary>
            Returns true if a call to Dispose was already done (or still in
            progress in another thread). If it is true, you can't continue
            to use your object.
            </summary>
        </member>
        <member name="P:Pfz.Threading.ThreadSafeDisposable.DisposeLock">
            <summary>
            This is the lock used during dispose. You may want to lock
            some of your code against dispose using this lock.
            The preferred way to use it is: AbortSafe.Lock
            (
            	DisposeLock,
            	delegate
            	{
            		CheckUndisposed();
            	
            		... your protected code here ...
            	}
            );
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegateSet.#ctor">
            <summary>
            Creates a new WeakDelegateSet.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegateSet.Dispose(System.Boolean)">
            <summary>
            Unregisters the WeakDelegateSet from GCUtils.Collected.
            </summary>
            <param name="disposing"></param>
        </member>
        <member name="M:Pfz.Caching.WeakDelegateSet.Clear">
            <summary>
            Clears the delegate set.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegateSet.Add(System.Delegate)">
            <summary>
            Adds a new handler to the delegate set.
            </summary>
            <param name="handler">The handler to add.</param>
            <returns>true if the delegate was new to the set, false otherwise.</returns>
        </member>
        <member name="M:Pfz.Caching.WeakDelegateSet.Remove(System.Delegate)">
            <summary>
            Removes a handler from the delegate set.
            </summary>
            <param name="handler">The handler to remove.</param>
            <returns>true if the item was in the set, false otherwise.</returns>
        </member>
        <member name="M:Pfz.Caching.WeakDelegateSet.Invoke(System.Object[])">
            <summary>
            Invokes all the handlers in the set with the given parameters.
            </summary>
            <param name="parameters">The parameters to be used in the invoke of each handler.</param>
        </member>
        <member name="T:Pfz.Extensions.DictionaryExtensions.PfzDictionaryExtensions">
            <summary>
            Adds some methods to the Dictionary generic class.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.DictionaryExtensions.PfzDictionaryExtensions.GetValueOrDefault``2(System.Collections.Generic.IDictionary{``0,``1},``0)">
            <summary>
            Gets a value by it's key or, if it doesn't exist, returns the default
            value for TValue.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.DictionaryExtensions.PfzDictionaryExtensions.GetOrCreateValue``2(System.Collections.Generic.IDictionary{``0,``1},``0)">
            <summary>
            Tries to get a value by it's key. If it doesn't exist, creates a new
            one, adds it to the dicionary and returns it.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.DictionaryExtensions.PfzDictionaryExtensions.AsReadOnly``2(System.Collections.Generic.IDictionary{``0,``1})">
            <summary>
            Gets a read-only wrapper over this dictionary.
            </summary>
        </member>
        <member name="T:Pfz.Collections.IFastEnumerator">
            <summary>
            Interface for fast enumerations.
            Specially when using remoting objects, calling MoveNext() to then
            get the Value doubles the number of requests. For class types,
            using a GetNext() where nulls means the end is faster.
            </summary>
        </member>
        <member name="M:Pfz.Collections.IFastEnumerator.GetNext">
            <summary>
            Gets the next value or null if there are no more values.
            </summary>
            <returns>The next value or null if there are no more values.</returns>
        </member>
        <member name="T:Pfz.Collections.IFastEnumerator`1">
            <summary>
            A typed version of FastEnumerator. Only reference types are valid.
            </summary>
            <typeparam name="T">The type of the items to enumerate.</typeparam>
        </member>
        <member name="M:Pfz.Collections.IFastEnumerator`1.GetNext">
            <summary>
            Gets the next value, or null if there are no more values.
            </summary>
            <returns>The next value, or null if there are no more values.</returns>
        </member>
        <member name="T:Pfz.Extensions.AttributeExtensions.PfzAttributeExtensions">
            <summary>
            Adds some useful methods to the MemberInfo and Type types to
            work easily with attributes (Generics).
            </summary>
        </member>
        <member name="M:Pfz.Extensions.AttributeExtensions.PfzAttributeExtensions.GetCustomAttributes``1(System.Reflection.MemberInfo)">
            <summary>
            Gets the attributes of the specified type, and return them typed.
            </summary>
            <typeparam name="T">The type of the attribute to find and to return.</typeparam>
            <param name="memberInfo">The memberInfo where the attributes will be searched.</param>
            <returns>A typed array with the attributes found.</returns>
        </member>
        <member name="M:Pfz.Extensions.AttributeExtensions.PfzAttributeExtensions.GetCustomAttributes``1(System.Type,System.Boolean)">
            <summary>
            Gets the attributes of the specified type, and return them typed.
            </summary>
            <typeparam name="T">The type of the attribute to find and to return.</typeparam>
            <param name="type">The type that can contains the attributes that will be searched.</param>
            <param name="inherit">If true search the attribute in base classes, but only if the attribute supports inheritance.</param>
            <returns>A typed array with the attributes found.</returns>
        </member>
        <member name="M:Pfz.Extensions.AttributeExtensions.PfzAttributeExtensions.GetCustomAttribute``1(System.Reflection.MemberInfo)">
            <summary>
            Gets an attribute of the specified type, or null.
            This is useful when the attribute has AllowMultiple=false, but
            don't use it if the class can have more than one attribute of such
            type, as this method throws an exception when this happens.
            </summary>
            <typeparam name="T">The type of the parameter to find.</typeparam>
            <param name="memberInfo">The member info to search the attribute.</param>
            <returns>The found attribute or null.</returns>
        </member>
        <member name="M:Pfz.Extensions.AttributeExtensions.PfzAttributeExtensions.GetCustomAttribute``1(System.Type,System.Boolean)">
            <summary>
            Gets an attribute of the specified type, or null.
            This is useful when the attribute has AllowMultiple=false, but
            don't use it if the class can have more than one attribute of such
            type, as this method throws an exception when this happens.
            </summary>
            <typeparam name="T">The type of the parameter to find.</typeparam>
            <param name="type">The type to search the attribute.</param>
            <param name="inherit">true to search in base classes for attributes that support inheritance.</param>
            <returns>The found attribute or null.</returns>
        </member>
        <member name="M:Pfz.Extensions.AttributeExtensions.PfzAttributeExtensions.ContainsCustomAttribute``1(System.Reflection.MemberInfo)">
            <summary>
            Verifies if a member contains an specific custom attribute.
            </summary>
            <typeparam name="T">The type of the attribute to check for existance.</typeparam>
            <param name="member">The member in which to find search for attribute.</param>
            <returns>true if the member constains the attribute, false otherwise.</returns>
        </member>
        <member name="M:Pfz.Extensions.AttributeExtensions.PfzAttributeExtensions.ContainsCustomAttribute``1(System.Type,System.Boolean)">
            <summary>
            Verifies if a type contains an specific custom attribute.
            </summary>
            <typeparam name="T">The type of the attribute to check for existance.</typeparam>
            <param name="type">The member in which to find search for attribute.</param>
            <param name="inherit">true to search in base classes for attributes that support inheritance.</param>
            <returns>true if the member constains the attribute, false otherwise.</returns>
        </member>
        <member name="T:Pfz.Extensions.FastEnumeratorExtensions.PfzFastEnumeratorExtensions">
            <summary>
            Adds the AsEnumerable method to a IFastEnumerator, so you can do a foreach
            over it.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.FastEnumeratorExtensions.PfzFastEnumeratorExtensions.AsEnumerable``1(Pfz.Collections.IFastEnumerator{``0})">
            <summary>
            Converts a fast enumerator to a custom IEnumerable (generic version).
            </summary>
        </member>
        <member name="M:Pfz.Extensions.FastEnumeratorExtensions.PfzFastEnumeratorExtensions.AsEnumerable(Pfz.Collections.IFastEnumerator)">
            <summary>
            Converts a fast enumerator to a custom IEnumerable (non-generic version).
            </summary>
        </member>
        <member name="T:Pfz.Caching.WeakDictionary`2">
            <summary>
            This is a dictionary that allow values to be collected.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.#ctor">
            <summary>
            Creates the dictionary.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.Dispose(System.Boolean)">
            <summary>
            Frees all handles used to know if an item was collected or not.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.Clear">
            <summary>
            Clears all items in this dictionary.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.Add(`0,`1)">
            <summary>
            Adds an item to this dictionary. Throws an exception if an item
            with the same key already exists.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.Remove(`0)">
            <summary>
            Removes an item with the given key from the dictionary.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.ContainsKey(`0)">
            <summary>
            Gets a value indicating if an item with the specified key exists.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.GetEnumerator">
            <summary>
            Gets an enumerator with all key/value pairs that exist in
            this dictionary.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.ToList">
            <summary>
            Gets a list with all non-collected key/value pairs.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Creates the dictionary from serialization info.
            Actually, it does not load anything, as if everything was
            collected.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDictionary`2.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            It is here to be inherited. Actually, this does not
            add anything, as if everything was collected.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakDictionary`2.Count">
            <summary>
            Gets the number of items in this dictionary.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakDictionary`2.Item(`0)">
            <summary>
            Gets or sets a value for the specified key.
            Returns null if the item does not exist. The indexer, when
            used as an IDictionary throws an exception when the item does
            not exist.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakDictionary`2.Keys">
            <summary>
            Gets the Keys that exist in this dictionary.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakDictionary`2.Values">
            <summary>
            Gets the values that exist in this dictionary.
            </summary>
        </member>
        <member name="T:Pfz.Threading.TicksOrIncrement">
            <summary>
            Class that returns the value of DateTime.Now.Ticks when GetValue is called 
            but also guarantees that two calls will generate different values, even if
            they are done one just after the other.
            </summary>
        </member>
        <member name="M:Pfz.Threading.TicksOrIncrement.GetNext">
            <summary>
            Gets a new DateTime.Now.Ticks value or a random incremented value if
            this is a call done at the same microsecond of the last one.
            </summary>
        </member>
        <member name="T:Pfz.Date">
            <summary>
            Class that represents a Date without Time.
            </summary>
        </member>
        <member name="M:Pfz.Date.Parse(System.String)">
            <summary>
            Parses the given text as a Date using the default format.
            </summary>
        </member>
        <member name="M:Pfz.Date.#ctor(System.Int32,System.Int32,System.Int32)">
            <summary>
            Creates a new date by the specified year, month and day.
            </summary>
        </member>
        <member name="M:Pfz.Date.#ctor(System.DateTime)">
            <summary>
            Creates a new date from a DateTime. The time information is lost.
            </summary>
        </member>
        <member name="M:Pfz.Date.#ctor(System.Int32)">
            <summary>
            Creates a Date object from an integer value previously got from
            the AsInteger property of another Date.
            </summary>
        </member>
        <member name="M:Pfz.Date.op_Equality(Pfz.Date,Pfz.Date)">
            <summary>
            Compares if this two dates are equal.
            </summary>
        </member>
        <member name="M:Pfz.Date.op_Inequality(Pfz.Date,Pfz.Date)">
            <summary>
            Compares if two dates are different.
            </summary>
        </member>
        <member name="M:Pfz.Date.op_LessThan(Pfz.Date,Pfz.Date)">
            <summary>
            Compares if the first date is less than the second date.
            </summary>
        </member>
        <member name="M:Pfz.Date.op_GreaterThan(Pfz.Date,Pfz.Date)">
            <summary>
            Compares if the first date is greater than the second.
            </summary>
        </member>
        <member name="M:Pfz.Date.op_LessThanOrEqual(Pfz.Date,Pfz.Date)">
            <summary>
            Compares if the first date is less than or equal to the second.
            </summary>
        </member>
        <member name="M:Pfz.Date.op_GreaterThanOrEqual(Pfz.Date,Pfz.Date)">
            <summary>
            Compares if the first date is greater than or equal to the second.
            </summary>
        </member>
        <member name="M:Pfz.Date.op_Implicit(Pfz.Date)~System.DateTime">
            <summary>
            Implicit convertion to DateTime object.
            </summary>
        </member>
        <member name="M:Pfz.Date.op_Explicit(System.DateTime)~Pfz.Date">
            <summary>
            Explicit cast from DateTime to Date value.
            </summary>
        </member>
        <member name="M:Pfz.Date.GetHashCode">
            <summary>
            Gets the HashCode of the AsInteger value of this date.
            </summary>
        </member>
        <member name="M:Pfz.Date.Equals(System.Object)">
            <summary>
            Compares if this Date equals another object.
            </summary>
        </member>
        <member name="M:Pfz.Date.Equals(Pfz.Date)">
            <summary>
            Returns true if this Date equals another Date.
            </summary>
        </member>
        <member name="M:Pfz.Date.ToString">
            <summary>
            Converts this Date to a string representation.
            </summary>
        </member>
        <member name="M:Pfz.Date.CompareTo(Pfz.Date)">
            <summary>
            Compares this date to another date.
            </summary>
        </member>
        <member name="P:Pfz.Date.DefaultFormat">
            <summary>
            Gets or sets the default format used to display Date
            strings.
            </summary>
        </member>
        <member name="P:Pfz.Date.Today">
            <summary>
            Gets Today as a Date object.
            </summary>
        </member>
        <member name="P:Pfz.Date.Year">
            <summary>
            Gets the Year.
            </summary>
        </member>
        <member name="P:Pfz.Date.Month">
            <summary>
            Gets the Month.
            </summary>
        </member>
        <member name="P:Pfz.Date.Day">
            <summary>
            Gets the Day.
            </summary>
        </member>
        <member name="P:Pfz.Date.AsInteger">
            <summary>
            Converts this Date value to an integer representation.
            </summary>
        </member>
        <member name="T:Pfz.Collections.ActualValueEnumerator`1">
            <summary>
            This enumerator returns a "next value" every time the actual value is set, but
            if many sets are done before the client is able to process them, the 
            intermediate values are lost, so only the "actual" one is got.
            </summary>
            <typeparam name="T">The type of the values.</typeparam>
        </member>
        <member name="M:Pfz.Collections.ActualValueEnumerator`1.Dispose(System.Boolean)">
            <summary>
            Only sets the event so any waiting thread is free.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ActualValueEnumerator`1.GetNext">
            <summary>
            Gets the next value.
            </summary>
        </member>
        <member name="P:Pfz.Collections.ActualValueEnumerator`1.ActualValue">
            <summary>
            Gets or sets the actual value.
            </summary>
        </member>
        <member name="T:Pfz.Cloneable">
            <summary>
            This is an abstract class that implements the ICloneable interface using 
            the MemberwiseClone method and then clones all ICloneable fields.
            </summary>
        </member>
        <member name="M:Pfz.Cloneable.Clone">
            <summary>
            Clones this object and also all it's fields that references ICloneable objects.
            </summary>
            <returns>A memberwise cloned object, with all fields that are ICloneable also cloned.</returns>
        </member>
        <member name="T:PfzCloneable_Extensions">
            <summary>
            This extension class simple creates the typed Clone method to the Cloneable,
            object, so you clone the object and don't need to cast it to the right type.
            </summary>
        </member>
        <member name="M:PfzCloneable_Extensions.Clone``1(``0)">
            <summary>
            Clones the cloneable object and return the clone with the same type
            as the original object is seen.
            </summary>
            <typeparam name="T">The type of the cloneable object.</typeparam>
            <param name="cloneable">The object to clone.</param>
            <returns>The right-typed clone.</returns>
        </member>
        <member name="T:Pfz.Collections.ReadOnlyDictionary`2">
            <summary>
            Read-only wrapper for dictionaries.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyDictionary`2.#ctor(System.Collections.Generic.IDictionary{`0,`1})">
            <summary>
            Creates a new read-only dictionary over an already existing
            modifiable dictionary.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyDictionary`2.ContainsKey(`0)">
            <summary>
            Returns true if this dictionary contains the given key.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyDictionary`2.TryGetValue(`0,`1@)">
            <summary>
            Tries to get the value for the given key.
            If there is no item with the given key, returns null.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyDictionary`2.CopyTo(System.Collections.Generic.KeyValuePair{`0,`1}[],System.Int32)">
            <summary>
            Copies the key/value pairs to an array.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyDictionary`2.Contains(System.Collections.Generic.KeyValuePair{`0,`1})">
            <summary>
            Verifies if the given pair exists in the dictionary.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyDictionary`2.GetEnumerator">
            <summary>
            Gets an enumerator over all the key/value pairs in this
            dictionary.
            </summary>
        </member>
        <member name="P:Pfz.Collections.ReadOnlyDictionary`2.Keys">
            <summary>
            Gets the keys of the items in this dictionary.
            </summary>
        </member>
        <member name="P:Pfz.Collections.ReadOnlyDictionary`2.Values">
            <summary>
            Gets the values in this dictionary.
            </summary>
        </member>
        <member name="P:Pfz.Collections.ReadOnlyDictionary`2.Count">
            <summary>
            Gets the number of items in this dictionary.
            </summary>
        </member>
        <member name="P:Pfz.Collections.ReadOnlyDictionary`2.Item(`0)">
            <summary>
            Gets a value by it's key.
            Throws an exception if the key does not exist.
            </summary>
        </member>
        <member name="T:Pfz.Box`1">
            <summary>
            A class that simple "box" any value type.
            Sometimes I use this when I need to change single instances of integers and longs.
            Also, this is useful to simulate any "ref" parameter, if you can't really count
            with a ref parameter.
            </summary>
            <typeparam name="T">The type of the value to "box" inside a class.</typeparam>
        </member>
        <member name="M:Pfz.Box`1.#ctor">
            <summary>
            Default constructor.
            </summary>
        </member>
        <member name="M:Pfz.Box`1.#ctor(`0)">
            <summary>
            Initializes the box with the given value.
            </summary>
            <param name="value">The value to initialize the box.</param>
        </member>
        <member name="F:Pfz.Box`1.Value">
            <summary>
            The boxed value. Used as a direct field so you can pass it when a ref is needed.
            </summary>
        </member>
        <member name="M:Pfz.Box`1.Equals(System.Object)">
            <summary>
            Compares this box with a value or another box.
            </summary>
        </member>
        <member name="M:Pfz.Box`1.Equals(Pfz.Box{`0})">
            <summary>
            Compares this box with another box.
            </summary>
        </member>
        <member name="M:Pfz.Box`1.GetHashCode">
            <summary>
            Gets the hashcode of the value or, if it is null, returns 0.
            </summary>
        </member>
        <member name="M:Pfz.Box`1.ToString">
            <summary>
            Gets the ToString of the value held.
            </summary>
        </member>
        <member name="T:Pfz.Threading.AbortSafe">
            <summary>
            Class with methods safe from "Thread.Abort()".
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.AllowAbort">
            <summary>
            This method will make a thread that is running in non-abortable manner 
            (ie, inside a finally block) to skip the rest of the actual finally block
            if an abort was requested.
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.New``1(``0@)">
            <summary>
            Allocates a new object using it's default constructor and sets
            it's result value to the variable passed as out parameter.
            This will work completelly or fail completelly in case of an
            Abort call, so there is no risk of stopping in-the-middle of the work.
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.Run(System.Action)">
            <summary>
            Runs a code block in an AbortSafe manner.
            Be careful when using this, as you must not avoid Aborts of long running
            code.
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.Run(System.Action,System.Action,System.Action)">
            <summary>
            Runs a block of code, guaranting that:
            The allocation block will not be aborted.
            The finally block will be called, independent if the allocation block was
            run.
            The code block is the only one that could be aborted.
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.ReadAllBytes(System.String)">
            <summary>
            Reads all bytes from a file, avoiding errors caused from Thread.Abort().
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.WriteAllBytes(System.String,System.Byte[])">
            <summary>
            Writes all bytes to a file, avoiding errors caused from Aborts.
            If an abort happens, the stream is closed and the file is deleted.
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.Using``1(System.Func{``0},System.Action{``0})">
            <summary>
            Executes the given blocks as if they where a using clause.
            The first block must return a disposable object. The second one will be
            the "body" executed inside the using clause.
            
            It simulates:
            using(...allocationBlock...)
            {
            	...codeBlock...
            }
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.Lock(System.Object,System.Action)">
            <summary>
            Locks an object and executes the given action.
            The lock is abort safe, not the executed block.
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.UnabortableLock(System.Object,System.Action)">
            <summary>
            Locks an object and executes the given action in an unabortable manner.
            Aborts will happen or before the lock acquisition, or after the full block
            is executed and the lock is released.
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.ReadLock(System.Threading.ReaderWriterLockSlim,System.Action)">
            <summary>
            Acquires a read-lock and then runs the action.
            The lock is abort safe, not the executed block.
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.UpgradeableLock(System.Threading.ReaderWriterLockSlim,System.Action)">
            <summary>
            Acquires an upgradeable-lock and then runs the action.
            The lock is abort safe, not the action.
            </summary>
        </member>
        <member name="M:Pfz.Threading.AbortSafe.WriteLock(System.Threading.ReaderWriterLockSlim,System.Action)">
            <summary>
            Acquires a write-lock and then runs the action.
            The lock is abort safe, not the action.
            </summary>
        </member>
        <member name="P:Pfz.Threading.AbortSafe.WasAbortRequested">
            <summary>
            Returns a value indicating if an abort was requested for this thread.
            </summary>
        </member>
        <member name="T:Pfz.ExceptionAwareStream">
            <summary>
            Stream class that has a Dispose receiving an Exception as the cause
            of the dispose. Calling any method after the dispose will throw a
            new ObjectDisposedException with that exception as the inner exception.
            </summary>
        </member>
        <member name="T:Pfz.IExceptionAwareDisposable">
            <summary>
            Interface that must be implemented by objects that are disposable
            and also capables of registering the Exception that caused the Dispose.
            </summary>
        </member>
        <member name="M:Pfz.IExceptionAwareDisposable.Dispose(System.Exception)">
            <summary>
            Disposes the object setting the Exception that was responsible for
            it's disposal.
            </summary>
        </member>
        <member name="P:Pfz.IExceptionAwareDisposable.DisposeException">
            <summary>
            Gets the Exception that caused the dispose of this object, or null.
            </summary>
        </member>
        <member name="M:Pfz.ExceptionAwareStream.Dispose(System.Exception)">
            <summary>
            Disposes the stream and sets the DisposeException.
            </summary>
        </member>
        <member name="M:Pfz.ExceptionAwareStream.Dispose(System.Boolean)">
            <summary>
            Implemented to guarantee that it will be executed only once.
            You must reimplement DoDispose, as this method is sealed.
            </summary>
        </member>
        <member name="M:Pfz.ExceptionAwareStream.OnDispose(System.Boolean)">
            <summary>
            Does the effective dispose.
            </summary>
        </member>
        <member name="M:Pfz.ExceptionAwareStream.CheckUndisposed">
            <summary>
            Checks if this object was disposed. If it is, throws an exception.
            </summary>
        </member>
        <member name="P:Pfz.ExceptionAwareStream.DisposeLock">
            <summary>
            Gets the lock that should be used by the object.
            </summary>
        </member>
        <member name="P:Pfz.ExceptionAwareStream.DisposeException">
            <summary>
            Gets the exception that caused the Dispose, if any.
            </summary>
        </member>
        <member name="P:Pfz.ExceptionAwareStream.WasDisposed">
            <summary>
            Gets a value indicating if this object was already disposed.
            </summary>
        </member>
        <member name="T:Pfz.Collections.EnumeratorDistributor`1">
            <summary>
            This class is responsible for distributing a single enumerator
            among many enumerator readers, considering such readers can
            "loose" some of the items.
            This is useful for senting, for example, web-cam frames. A high-speed
            client can receive all frames, while a slow client can receive frame
            1, then frame 6, frame 12... but will still receive the "most recent"
            frames.
            You can inherit this class the the MultiClientEnumerator themselves
            if you must only send the difference between frames.
            </summary>
            <typeparam name="T">
            The type of the item that the original enumerator returns.
            </typeparam>
        </member>
        <member name="T:Pfz.Threading.ThreadSafeExceptionAwareDisposable">
            <summary>
            A ThreadSafeDisposable inheritor capable of keeping information of why
            it was disposed, considering it is disposed by an exception. This is 
            largelly used in the Remoting framework, as some exceptions can
            dispose the objects, but for the user is better to know the original
            exception, not the ObjectDisposedException.
            </summary>
        </member>
        <member name="M:Pfz.Threading.ThreadSafeExceptionAwareDisposable.Dispose(System.Exception)">
            <summary>
            Disposes the actual object, setting the DisposeException property.
            </summary>
        </member>
        <member name="M:Pfz.Threading.ThreadSafeExceptionAwareDisposable.CheckUndisposed">
            <summary>
            New version of CheckUndisposed, which will throw the appropriate
            exception instead of ObjectDisposedException if this object was
            disposed by another exception.
            </summary>
        </member>
        <member name="P:Pfz.Threading.ThreadSafeExceptionAwareDisposable.DisposeException">
            <summary>
            Gets the Exception that caused this object to be disposed, or null.
            </summary>
        </member>
        <member name="M:Pfz.Collections.EnumeratorDistributor`1.#ctor(Pfz.Collections.IFastEnumerator{`0})">
            <summary>
            Creates a new Distributor over the given real enumerator.
            </summary>
        </member>
        <member name="M:Pfz.Collections.EnumeratorDistributor`1.Dispose(System.Boolean)">
            <summary>
            Disposes the base enumerator and the clients actually connected.
            </summary>
        </member>
        <member name="M:Pfz.Collections.EnumeratorDistributor`1.CreateClient">
            <summary>
            Creates a client for this enumerator.
            Inheritors can initialize additional information before returning 
            the enumerator client to you.
            </summary>
        </member>
        <member name="P:Pfz.Collections.EnumeratorDistributor`1.BaseEnumerator">
            <summary>
            Gets the BaseEnumerator used by this distributor.
            </summary>
        </member>
        <member name="E:Pfz.Collections.EnumeratorDistributor`1.Disposed">
            <summary>
            Called when this object is disposed.
            </summary>
        </member>
        <member name="P:Pfz.Collections.EnumeratorDistributor`1.ActualValue">
            <summary>
            Gets the Actual value without waiting.
            </summary>
        </member>
        <member name="T:Pfz.Threading.UnlimitedThreadPool">
            <summary>
            This is a thread pool that, different from System.Threading.ThreadPool,
            does not have a thread limit and the threads are not background while
            they run. Comparing to the system ThreadPool, it is better if the
            thread can enter in wait mode. This happens when one thread has a 
            "fast" process, but can only terminate after another thread returns.
            
            This thread pool keep threads alive for a certain number of generations.
            The default value is two. So, at the first use, it lives for one more
            generation. After the second use in that generation, it is marked to 
            live for two generations. Subsequent uses in this generation will not
            change anything. Do not use very high values, as this can cause memory
            usage problems.
            </summary>
        </member>
        <member name="M:Pfz.Threading.UnlimitedThreadPool.Run(System.Action)">
            <summary>
            Runs an action in another thread. Uses an existing thread if one is 
            available or creates a new one if none are available, so this call will
            not hang if there are no available threads.
            </summary>
            <param name="action">The function to execute.</param>
        </member>
        <member name="M:Pfz.Threading.UnlimitedThreadPool.Run(System.Action{System.Object},System.Object)">
            <summary>
            Runs an action in another thread. Uses an existing thread if one is 
            available or creates a new one if none are available, so this call will
            not hang if there are no available threads.
            </summary>
            <param name="action">The function to execute.</param>
            <param name="parameter">The object passed as parameter to the action.</param>
        </member>
        <member name="M:Pfz.Threading.UnlimitedThreadPool.Run``1(System.Action{``0},``0)">
            <summary>
            Runs an action in another thread. Uses an existing thread if one is 
            available or creates a new one if none are available, so this call will
            not hang if there are no available threads.
            </summary>
            <typeparam name="T">The type of the parameter.</typeparam>
            <param name="action">The function to execute.</param>
            <param name="parameter">The object passed as parameter to the action.</param>
        </member>
        <member name="P:Pfz.Threading.UnlimitedThreadPool.CollectionsToKeepAlive">
            <summary>
            Gets or sets the maximum number of collections to keep a Thread from this pool
            alive. The default value is two.
            </summary>
        </member>
        <member name="T:Pfz.Caching.GCUtils">
            <summary>
            Some methods and events to interact with garbage collection. You can 
            keep an object alive during the next collection or register to know 
            when a collection has just happened. This is useful if you don't use
            WeakReferences, but know how to free memory if needed. For example, 
            you can do a TrimExcess to your lists to free some memory.
            
            Caution: GC.KeepAlive keeps the object alive until that line of code,
            while GCUtils.KeepAlive keeps the object alive until the next 
            generation.
            </summary>
        </member>
        <member name="M:Pfz.Caching.GCUtils.KeepAlive(System.Object)">
            <summary>
            Keeps an object alive at the next collection. This is useful for WeakReferences as an way
            to guarantee that recently used objects will not be immediatelly collected. At the next
            generation, you can call KeepAlive again, making the object alive for another generation.
            </summary>
            <param name="item"></param>
        </member>
        <member name="M:Pfz.Caching.GCUtils.Expire(System.Object)">
            <summary>
            Expires an object. Is the opposite of KeepAlive.
            </summary>
            <param name="item"></param>
            <returns>true if the object was in the KeepAlive list, false otherwise.</returns>
        </member>
        <member name="E:Pfz.Caching.GCUtils.Collected">
            <summary>
            This event is called after a GarbageCollection has just finished,
            in another thread. As this happens after the collection has finished,
            all other threads are running too, so you must guarantee that
            your event is thread safe.
            </summary>
        </member>
        <member name="T:Pfz.Caching.GCUtils.ReferenceComparer">
            <summary>
            Class used to compare two references.
            They must point to the same instance (not an equal instance) to be
            considered equal.
            This also helps making comparisons faster for objects that
            implement Equals.
            </summary>
        </member>
        <member name="T:Pfz.Caching.WeakList`1">
            <summary>
            A list that only keeps weak-references to it's items.
            Ideal if at some point you only need to do a for-each over all the
            non-collected items. Use WeakHashSet if you need to remove the items
            or calls Contains frequently.
            </summary>
            <typeparam name="T"></typeparam>
        </member>
        <member name="M:Pfz.Caching.WeakList`1.#ctor">
            <summary>
            Creates an empty weak-list.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakList`1.#ctor(System.Int32)">
            <summary>
            Creates an empty weak-list using the given minCapacity to it.
            </summary>
            <param name="initialCapacity">The initialCapacity of the list. The default value is 32.</param>
        </member>
        <member name="M:Pfz.Caching.WeakList`1.Dispose(System.Boolean)">
            <summary>
            Releases all handles.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakList`1.Clear">
            <summary>
            Clears all the items in the list.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakList`1.Add(`0)">
            <summary>
            Adds an item to the list.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakList`1.ToList">
            <summary>
            Gets a strong-list with all the non-collected items present
            in this list.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakList`1.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Creates the WeakList from the serialization info. At this level,
            only loads the MinCapacity.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakList`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Creates serialization info. At this level, only saves the
            MinCapacity.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakList`1.GetEnumerator">
            <summary>
            Gets an enumerator over the non-collected items of this
            list.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakList`1.Count">
            <summary>
            Gets an approximate count of the items added.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakList`1.Item(System.Int32)">
            <summary>
            Gets or sets an item at a given index.
            </summary>
        </member>
        <member name="T:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions">
            <summary>
            Adds methods to use ReaderWriterLockSlim easily,
            always with time-outs to avoid dead-locks.
            See PfzLockConfiguration class if you want to log dead-locks.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.ReadLock(System.Threading.ReaderWriterLockSlim)">
            <summary>
            Acquires a read-lock using the default time-out.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.ReadLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan)">
            <summary>
            Acquires a read-lock, using the given time-out.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryReadLock(System.Threading.ReaderWriterLockSlim)">
            <summary>
            Tries to acquire a read-lock on the given object using the default timeout. 
            If it fails, returns null.
            </summary>
            <param name="lockObject">The object to lock.</param>
            <returns>A disposable object to release the lock, or null.</returns>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryReadLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan)">
            <summary>
            Tries to acquire a read-lock on the given object using the specified timeout. 
            If it fails, returns null.
            </summary>
            <param name="lockObject">The object to lock.</param>
            <param name="timeout">The timeout to try for the lock.</param>
            <returns>A disposable object to release the lock, or null.</returns>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.UpgradeableLock(System.Threading.ReaderWriterLockSlim)">
            <summary>
            Acquires an upgradeable-lock using the default time-out.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.UpgradeableLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan)">
            <summary>
            Acquires an upgradeable-lock, using the given time-out.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryUpgradeableLock(System.Threading.ReaderWriterLockSlim)">
            <summary>
            Tries to acquire an upgradeable lock on the given object, using the default timeout.
            If it fails, returns null.
            </summary>
            <param name="lockObject">The object to try to lock.</param>
            <returns>An disposable object to release the lock, or null if the locks fails.</returns>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryUpgradeableLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan)">
            <summary>
            Tries to acquire an upgradeable lock on the given object, using the specified timeout.
            If it fails, returns null.
            </summary>
            <param name="lockObject">The object to try to lock.</param>
            <param name="timeout">The maximum time to wait for the lock.</param>
            <returns>An disposable object to release the lock, or null if the locks fails.</returns>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.WriteLock(System.Threading.ReaderWriterLockSlim)">
            <summary>
            Acquires a write-lock using the default time-out.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.WriteLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan)">
            <summary>
            Acquires a write-lock, using the given time-out.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryWriteLock(System.Threading.ReaderWriterLockSlim)">
            <summary>
            Tries to acquire a write-lock on the given object using the default timeout.
            If it fails, returns null.
            </summary>
            <param name="lockObject">The object to lock.</param>
            <returns>A disposable object to release the lock, or null.</returns>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryWriteLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan)">
            <summary>
            Tries to acquire a write-lock on the given object using the specified timeout.
            If it fails, returns null.
            </summary>
            <param name="lockObject">The object to lock.</param>
            <param name="timeout">The maximum time to wait for the lock.</param>
            <returns>A disposable object to release the lock, or null.</returns>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.ReadLock(System.Threading.ReaderWriterLockSlim,System.Action)">
            <summary>
            Acquires a ReadLock using the default timeout and then
            executes the given action. The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.ReadLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan,System.Action)">
            <summary>
            Acquires a ReadLock using the given timeout and then
            executes the given action. The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryReadLock(System.Threading.ReaderWriterLockSlim,System.Action)">
            <summary>
            Tries to acquire a ReadLock using the default timeout.
            If the lock is acquired, it executes the action and returns only
            after releasing the lock. If not, it returns false.
            The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryReadLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan,System.Action)">
            <summary>
            Tries to acquire a ReadLock using the given timeout.
            If the lock is acquired, it executes the action and returns only
            after releasing the lock. If not, it returns false.
            The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.UpgradeableLock(System.Threading.ReaderWriterLockSlim,System.Action)">
            <summary>
            Acquires a UpgradeableLock using the default timeout and then
            executes the given action. The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.UpgradeableLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan,System.Action)">
            <summary>
            Acquires a UpgradeableLock using the given timeout and then
            executes the given action. The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryUpgradeableLock(System.Threading.ReaderWriterLockSlim,System.Action)">
            <summary>
            Tries to acquire a UpgradeableLock using the default timeout.
            If the lock is acquired, it executes the action and returns only
            after releasing the lock. If not, it returns false.
            The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryUpgradeableLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan,System.Action)">
            <summary>
            Tries to acquire a UpgradeableLock using the given timeout.
            If the lock is acquired, it executes the action and returns only
            after releasing the lock. If not, it returns false.
            The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.WriteLock(System.Threading.ReaderWriterLockSlim,System.Action)">
            <summary>
            Acquires a WriteLock using the default timeout and then
            executes the given action. The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.WriteLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan,System.Action)">
            <summary>
            Acquires a WriteLock using the given timeout and then
            executes the given action. The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryWriteLock(System.Threading.ReaderWriterLockSlim,System.Action)">
            <summary>
            Tries to acquire a WriteLock using the default timeout.
            If the lock is acquired, it executes the action and returns only
            after releasing the lock. If not, it returns false.
            The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ReaderWriterLockExtensions.PfzReaderWriterLockExtensions.TryWriteLock(System.Threading.ReaderWriterLockSlim,System.TimeSpan,System.Action)">
            <summary>
            Tries to acquire a WriteLock using the given timeout.
            If the lock is acquired, it executes the action and returns only
            after releasing the lock. If not, it returns false.
            The lock acquisition is AbortSafe.
            </summary>
        </member>
        <member name="T:Pfz.Extensions.AsyncForEachExtensions.PfzAsyncForEachExtensions">
            <summary>
            Adds some methods to IEnumerable classes to allow you to do
            asynchronous foreachs.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.AsyncForEachExtensions.PfzAsyncForEachExtensions.AsyncForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})">
            <summary>
            Does a foreach using the default .Net ThreadPool to process
            each item.
            </summary>
            <typeparam name="T">The type of the items.</typeparam>
            <param name="enumerable">The enumerable that contains the items to do the foreach.</param>
            <param name="action">The action that will be executed to each item.</param>
        </member>
        <member name="M:Pfz.Extensions.AsyncForEachExtensions.PfzAsyncForEachExtensions.AsyncForEachUnlimited``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})">
            <summary>
            Executes each item in the collection in a separate thread.
            Be careful when using this, as the AsyncForEach extension
            method is generally better, because having too many 
            simultaneous threads ends-up decreasing performance.
            </summary>
            <typeparam name="T">The type of the items in the collection.</typeparam>
            <param name="enumerable">The enumerable collection.</param>
            <param name="action">The action to execute for each item.</param>
        </member>
        <member name="T:Pfz.Caching.KeepAliveGCHandle">
            <summary>
            This struct works like a KeepAliveWeakReference, but it is internal
            as it's uses the GCHandle directly, and can leak memory if used
            unproperly.
            </summary>
        </member>
        <member name="T:Pfz.Caching.WeakKeyDictionary`2">
            <summary>
            A dictionary were keys are weakreferences. This is useful if you need
            to "extend" existing classes. For example, if you want to add a Tag
            property to any object. The way this dictionary works, you can add
            items to a given object, which will be kept while the object is alive,
            but if the object dies (is collected) they will be allowed to be 
            with it.
            </summary>
            <typeparam name="TKey">The type of the key, which must be a class.</typeparam>
            <typeparam name="TValue">The type of the value.</typeparam>
        </member>
        <member name="M:Pfz.Caching.WeakKeyDictionary`2.#ctor">
            <summary>
            Creates the WeakKeyDictionary.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakKeyDictionary`2.Dispose(System.Boolean)">
            <summary>
            Frees all handles.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakKeyDictionary`2.Clear">
            <summary>
            Clears all items in the dictionary.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakKeyDictionary`2.Add(`0,`1)">
            <summary>
            Adds an item to the dictionary, or throws an exception if an item
            with the same key already exists.
            </summary>
            <param name="key">The key of the item to add.</param>
            <param name="value">The value of the item to add.</param>
        </member>
        <member name="M:Pfz.Caching.WeakKeyDictionary`2.Remove(`0)">
            <summary>
            Tries to remove an item from the dictionary, and returns a value 
            indicating if an item with the specified key existed.
            </summary>
            <param name="key">The key of the item to remove.</param>
            <returns>true if an item with the given key existed, false otherwise.</returns>
        </member>
        <member name="M:Pfz.Caching.WeakKeyDictionary`2.ContainsKey(`0)">
            <summary>
            Checks if an item with the given key exists in this dictionary.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakKeyDictionary`2.TryGetValue(`0,`1@)">
            <summary>
            Tries to get a value with a given key.
            </summary>
            <param name="key">The key of the item to try to get.</param>
            <param name="value">
            The variable that will receive the found value, or the default value 
            if an item with the given key does not exist.
            </param>
            <returns>
            true if an item with the given key was found and stored in value
            parameter, false otherwise.
            </returns>
        </member>
        <member name="M:Pfz.Caching.WeakKeyDictionary`2.ToList">
            <summary>
            Creates a list with all non-collected keys and values.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakKeyDictionary`2.GetEnumerator">
            <summary>
            Gets an enumerator of all non-collected keys and values.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakKeyDictionary`2.Count">
            <summary>
            Gets the number of the items in the dictionary. This value
            is not that useful, as just after getting it the number of 
            items can change by a collection.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakKeyDictionary`2.Item(`0)">
            <summary>
            Gets or sets a value for the given key.
            While getting, if the value does not exist an exception is thrown.
            This can happen if the value was collected, so avoid using getter,
            use TryGetValue instead.
            </summary>
            <param name="key">The key.</param>
        </member>
        <member name="P:Pfz.Caching.WeakKeyDictionary`2.Keys">
            <summary>
            Returns all the non-collected keys.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakKeyDictionary`2.Values">
            <summary>
            Gets all the values still alive in this dictionary.
            </summary>
        </member>
        <member name="T:Pfz.Extensions.DisposeExtensions.PfzDisposeExtensions">
            <summary>
            Adds methods to the IDispose interface.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.DisposeExtensions.PfzDisposeExtensions.CheckedDispose(System.IDisposable)">
            <summary>
            Disposes a disposable object if it is not null.
            </summary>
        </member>
        <member name="T:Pfz.Collections.FastEnumeratorWrapper`1">
            <summary>
            This class creates an IFastEnumerator wrapper over a custom enumerator.
            Note that this class must be used in the server, so it passes the 
            IFastEnumerator to it's client. Using it locally or in the clients will
            probably make things slower.
            </summary>
        </member>
        <member name="M:Pfz.Collections.FastEnumeratorWrapper`1.#ctor(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Creates a new FastEnumerator over the given enumerable.
            </summary>
        </member>
        <member name="M:Pfz.Collections.FastEnumeratorWrapper`1.#ctor(System.Collections.Generic.IEnumerator{`0})">
            <summary>
            Creates a new FastEnumerator over the given enumerator.
            </summary>
        </member>
        <member name="M:Pfz.Collections.FastEnumeratorWrapper`1.Dispose">
            <summary>
            Disposes the internal enumerator.
            </summary>
        </member>
        <member name="M:Pfz.Collections.FastEnumeratorWrapper`1.GetNext">
            <summary>
            Gets the next value, or null.
            </summary>
        </member>
        <member name="T:Pfz.Collections.EnumeratorDistributorClient`1">
            <summary>
            This class connects to a MultiClientEnumeratorDistributor and is able
            to use GetNext to get a next frame when one is available, while it is 
            also able to "loose" values if the real enumerator is running faster 
            than this client. This is useful when getting frames from a web-cam, 
            for example.
            </summary>
        </member>
        <member name="M:Pfz.Collections.EnumeratorDistributorClient`1.#ctor(Pfz.Collections.EnumeratorDistributor{`0})">
            <summary>
            Creates a new multi-client enumerator connected to the given distributor.
            </summary>
        </member>
        <member name="M:Pfz.Collections.EnumeratorDistributorClient`1.Dispose(System.Boolean)">
            <summary>
            Releases the resources used by this enumerator and removes it from
            the distributor list.
            </summary>
        </member>
        <member name="M:Pfz.Collections.EnumeratorDistributorClient`1.GetNext">
            <summary>
            Gets the actual value of the distributor or waits until a new
            value is available.
            </summary>
        </member>
        <member name="P:Pfz.Collections.EnumeratorDistributorClient`1.Distributor">
            <summary>
            Gets the Distributor used by this enumerator.
            </summary>
        </member>
        <member name="T:Pfz.Extensions.MonitorLockExtensions.PfzMonitorLockExtensions">
            <summary>
            Adds methods to lock any object using Monitor methods easily and
            always with time-out, so you can avoid dead-locks.
            See PfzLockConfiguration class if you want to log dead-locks.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.MonitorLockExtensions.PfzMonitorLockExtensions.LockWithTimeout``1(``0)">
            <summary>
            Locks an object or throws an exception if it times-out.
            Use with the using keyword.
            Defaults to one minute.
            </summary>
            <typeparam name="T">Only used to constraint objects to reference types.</typeparam>
            <param name="item">The object to lock.</param>
            <returns>A disposable object so you can do a using in it.</returns>
        </member>
        <member name="M:Pfz.Extensions.MonitorLockExtensions.PfzMonitorLockExtensions.LockWithTimeout``1(``0,System.TimeSpan)">
            <summary>
            Locks an object or throws an exception if it times-out.
            Use with the using keyword.
            </summary>
            <typeparam name="T">Only used to constraint objects to reference types.</typeparam>
            <param name="item">The object to lock.</param>
            <param name="timeout">A timespan representing the timeout value.</param>
            <returns>A disposable object so you can do a using in it.</returns>
        </member>
        <member name="M:Pfz.Extensions.MonitorLockExtensions.PfzMonitorLockExtensions.TryLockWithTimeout``1(``0)">
            <summary>
            Tries to acquire a lock on the given object, using the default lock-timeout.
            In case of failure, it logs the error, but does not generates an exception. Instead, it returns
            null.
            </summary>
            <typeparam name="T">The type of class to lock.</typeparam>
            <param name="item">The item to lock.</param>
            <returns>A disposable object, so you can release the lock, or null if the lock was not acquired.</returns>
        </member>
        <member name="M:Pfz.Extensions.MonitorLockExtensions.PfzMonitorLockExtensions.TryLockWithTimeout``1(``0,System.TimeSpan)">
            <summary>
            Tries to acquire a lock on the given object, using the given time-out.
            In case of failure, it logs the error, but does not generates an exception. Instead, it returns
            null.
            </summary>
            <typeparam name="T">The type of class to lock.</typeparam>
            <param name="item">The item to lock.</param>
            <param name="timeout">The timeout value while trying to acquire the lock.</param>
            <returns>A disposable object, so you can release the lock, or null if the lock was not acquired.</returns>
        </member>
        <member name="M:Pfz.Extensions.MonitorLockExtensions.PfzMonitorLockExtensions.LockWithTimeout``1(``0,System.Action)">
            <summary>
            Locks the specified item with the specified timeout.
            If it acquires the lock, runs the given action. Note that the
            action can be aborted, but the lock will not be held.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.MonitorLockExtensions.PfzMonitorLockExtensions.LockWithTimeout``1(``0,System.TimeSpan,System.Action)">
            <summary>
            Locks the specified item with the specified timeout.
            If it acquires the lock, runs the given action. Note that the
            action can be aborted, but the lock will not be held.
            Allows you to specify the timeout value.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.MonitorLockExtensions.PfzMonitorLockExtensions.TryLockWithTimeout``1(``0,System.Action)">
            <summary>
            Tries to lock an object and then execute an action.
            Returns if the lock was obtained and the action fully executed.
            Be careful, as the lock is already released when the method returns.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.MonitorLockExtensions.PfzMonitorLockExtensions.TryLockWithTimeout``1(``0,System.TimeSpan,System.Action)">
            <summary>
            Tries to lock an object and then execute an action.
            Returns if the lock was obtained and the action fully executed.
            Be careful, as the lock is already released when the method returns.
            </summary>
        </member>
        <member name="T:Pfz.Threading.LockConfiguration">
            <summary>
            This class only configures what to do when a dead-lock occurs while
            acquiring a lock with PfzMonitorLockExtensions or with 
            PfzReaderWriterLockExtensions.
            </summary>
        </member>
        <member name="E:Pfz.Threading.LockConfiguration.TimedOut">
            <summary>
            This event is invoked when any of the Locking extensions
            times-out (probably by a dead-lock).
            </summary>
        </member>
        <member name="P:Pfz.Threading.LockConfiguration.DefaultLockTimeout">
            <summary>
            Gets or sets the default timeout for LockWithTimeout method.
            </summary>
        </member>
        <member name="P:Pfz.Threading.LockConfiguration.LockTimedOutLogPath">
            <summary>
            Gets or sets a directory path in with log files will be generated when/if
            LockWithTimeout times out.
            </summary>
        </member>
        <member name="T:Pfz.Threading.LockConfiguration.LockType">
            <summary>
            Enum used to identify which type of lock has dead-locked when
            invoking DeadLocked event.
            </summary>
        </member>
        <member name="F:Pfz.Threading.LockConfiguration.LockType.Monitor">
            <summary>
            A monitor lock has dead-locked. (LockWithTimeout method).
            </summary>
        </member>
        <member name="F:Pfz.Threading.LockConfiguration.LockType.Read">
            <summary>
            A read-lock has dead-locked.
            </summary>
        </member>
        <member name="F:Pfz.Threading.LockConfiguration.LockType.Upgradeable">
            <summary>
            An upgradeable-read-lock has dead-locked.
            </summary>
        </member>
        <member name="F:Pfz.Threading.LockConfiguration.LockType.Write">
            <summary>
            A write-lock has dead-locked.
            </summary>
        </member>
        <member name="T:Pfz.Threading.LockConfiguration.TimedOutEventArgs">
            <summary>
            Class used as argument of the TimedOut event.
            </summary>
        </member>
        <member name="P:Pfz.Threading.LockConfiguration.TimedOutEventArgs.LockType">
            <summary>
            The LockType that caused the timeout.
            </summary>
        </member>
        <member name="T:Pfz.Caching.WeakDelegate">
            <summary>
            Static class used to convert real (strong) delegates into weak
            delegates.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegate.IsWeakDelegate(System.Delegate)">
            <summary>
            Verifies if a handler is already a weak delegate.
            </summary>
            <param name="handler">The handler to verify.</param>
            <returns>true if the handler is already a weak delegate, false otherwise.</returns>
        </member>
        <member name="M:Pfz.Caching.WeakDelegate.From(System.Action)">
            <summary>
            Creates a weak delegate from an Action delegate.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegate.From``1(System.Action{``0})">
            <summary>
            Creates a weak delegate from an Action&lt;T&gt; delegate.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegate.From``2(System.Action{``0,``1})">
            <summary>
            Creates a weak delegate from an Action&lt;T1, T2&gt; delegate.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegate.From``3(System.Action{``0,``1,``2})">
            <summary>
            Creates a weak delegate from an Action&lt;T1, T2, T3&gt; delegate.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegate.From``4(System.Action{``0,``1,``2,``3})">
            <summary>
            Creates a weak delegate from an Action&lt;T1, T2, T3, T4&gt; delegate.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegate.From(System.EventHandler)">
            <summary>
            Creates a weak delegate from an EventHandler delegate.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegate.From``1(System.EventHandler{``0})">
            <summary>
            Creates a weak delegate from an Action&lt;TEventArgs&gt; delegate.
            </summary>
        </member>
        <member name="T:Pfz.Caching.WeakDelegateBase">
            <summary>
            A class used as the base class to implement weak delegates.
            See WeakDelegate.From method implementations to see how it works.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakDelegateBase.#ctor(System.Delegate)">
            <summary>
            Creates this weak-delegate class based as a copy of the given 
            delegate handler.
            </summary>
            <param name="handler">The handler to copy information from.</param>
        </member>
        <member name="M:Pfz.Caching.WeakDelegateBase.Invoke(System.Object[])">
            <summary>
            Invokes this delegate with the given parameters.
            </summary>
            <param name="parameters">The parameters to be used by the delegate.</param>
        </member>
        <member name="P:Pfz.Caching.WeakDelegateBase.Method">
            <summary>
            Gets the method used by this delegate.
            </summary>
        </member>
        <member name="T:Pfz.Extensions.StreamExtensions.PfzStreamExtensions">
            <summary>
            Adds overloads to the stream Read method and adds the FullRead method,
            which will continue to read until it reads everything that was requested,
            or throws an IOException.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.StreamExtensions.PfzStreamExtensions.Read(System.IO.Stream,System.Byte[])">
            <summary>
            Calls read using the full given buffer.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.StreamExtensions.PfzStreamExtensions.Read(System.IO.Stream,System.Byte[],System.Int32)">
            <summary>
            Calls read using the given buffer and the initialIndex.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.StreamExtensions.PfzStreamExtensions.Write(System.IO.Stream,System.Byte[])">
            <summary>
            Writes all the bytes in the given buffer.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.StreamExtensions.PfzStreamExtensions.Write(System.IO.Stream,System.Byte[],System.Int32)">
            <summary>
            Writes the bytes from the given buffer, beginning at the given beginIndex.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.StreamExtensions.PfzStreamExtensions.FullRead(System.IO.Stream,System.Byte[])">
            <summary>
            Will read the given buffer to the end.
            Throws an exception if it's not possible to read the full buffer.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.StreamExtensions.PfzStreamExtensions.FullRead(System.IO.Stream,System.Byte[],System.Int32)">
            <summary>
            Full reads the stream over the given buffer, but only at the given
            initialIndex. If the requested length can't be read, throws an 
            IOException.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.StreamExtensions.PfzStreamExtensions.FullRead(System.IO.Stream,System.Byte[],System.Int32,System.Int32)">
            <summary>
            Reads the buffer in the requested area, but throws an exception if
            can't read the full requested area.
            </summary>
        </member>
        <member name="T:Pfz.Caching.KeepAliveWeakReference">
            <summary>
            This is a WeakReference class with KeepAlive capability.
            Everytime you get the Target from this WeakReference, it calls the GCUtils.KeepAlive.
            This is a very simple way to use weak-references only to your objects and also
            keep them alive if they are used frequently.
            </summary>
        </member>
        <member name="M:Pfz.Caching.KeepAliveWeakReference.#ctor(System.Object)">
            <summary>
            Constructs a KeepAliveWeakReference pointing to a target.
            </summary>
            <param name="target">The target of this KeepAliveWeakReference.</param>
        </member>
        <member name="M:Pfz.Caching.KeepAliveWeakReference.#ctor(System.Object,System.Boolean)">
            <summary>
            Constructs a KeepAliveWeakReference pointing to a target and allowing to trackResurrection.
            The Caching framework does not use this constructor, it is only here to keep the functionality
            of the second parameter present in the System.WeakReference constructor.
            </summary>
            <param name="target">The target of this WeakReference.</param>
            <param name="trackResurrection">Boolean indicating if this WeakReference must trackResurrection.</param>
        </member>
        <member name="M:Pfz.Caching.KeepAliveWeakReference.#ctor(System.Object,System.Boolean,System.Boolean)">
            <summary>
            Constructs a KeepAliveWeakReference pointing to a target, allowing to trackResurrection and
            allowing you to tell if immediateExpiration is allowed. The other two constructors always
            do a KeepAlive, so they don't allow immediateExpiration.
            </summary>
            <param name="target">The target of this WeakReference.</param>
            <param name="trackResurrection">Boolean indicating if this WeakReference must trackResurrection.</param>
            <param name="allowImmediateExpiration">
            If true, the target can be collected in the next collection.
            If false, it will be kept alive at the next collection.
            </param>
        </member>
        <member name="M:Pfz.Caching.KeepAliveWeakReference.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Simple keeping the serialization constructor present in WeakReference.
            </summary>
            <param name="info"></param>
            <param name="context"></param>
        </member>
        <member name="P:Pfz.Caching.KeepAliveWeakReference.Target">
            <summary>
            Overrides the WeakReference.Target, so it calls KeepAlive while gets or sets the Target.
            </summary>
        </member>
        <member name="P:Pfz.Caching.KeepAliveWeakReference.TargetAllowingExpiration">
            <summary>
            This is equivalent to a custom WeakReference target, as it's gets or sets the target
            without calling KeepAlive. Keep in mind that when an external code uses WeakReference,
            you can pass a KeepAliveWeakReference as a parameter, and the conventional Target that
            is used by default will have the KeepAlive effect.
            </summary>
        </member>
        <member name="T:Pfz.Caching.KeepAliveWeakReference`1">
            <summary>
            A typed version of weak-reference.
            Note that it simple hides the untyped Target and TargetAllowingExpiration.
            If you cast this object as a simple WeakReference you can still set
            an invalid typed target to it. This is only a helper class to avoid
            manual casts.
            </summary>
            <typeparam name="T">The type of the objects used by this weak-reference.</typeparam>
        </member>
        <member name="M:Pfz.Caching.KeepAliveWeakReference`1.#ctor(System.Object)">
            <summary>
            Constructs a KeepAliveWeakReference pointing to a target.
            </summary>
            <param name="target">The target of this KeepAliveWeakReference.</param>
        </member>
        <member name="M:Pfz.Caching.KeepAliveWeakReference`1.#ctor(System.Object,System.Boolean)">
            <summary>
            Constructs a KeepAliveWeakReference pointing to a target and allowing to trackResurrection.
            The Caching framework does not use this constructor, it is only here to keep the functionality
            of the second parameter present in the System.WeakReference constructor.
            </summary>
            <param name="target">The target of this WeakReference.</param>
            <param name="trackResurrection">Boolean indicating if this WeakReference must trackResurrection.</param>
        </member>
        <member name="M:Pfz.Caching.KeepAliveWeakReference`1.#ctor(System.Object,System.Boolean,System.Boolean)">
            <summary>
            Constructs a KeepAliveWeakReference pointing to a target, allowing to trackResurrection and
            allowing you to tell if immediateExpiration is allowed. The other two constructors always
            do a KeepAlive, so they don't allow immediateExpiration.
            </summary>
            <param name="target">The target of this WeakReference.</param>
            <param name="trackResurrection">Boolean indicating if this WeakReference must trackResurrection.</param>
            <param name="allowImmediateExpiration">
            If true, the target can be collected in the next collection.
            If false, it will be kept alive at the next collection.
            </param>
        </member>
        <member name="M:Pfz.Caching.KeepAliveWeakReference`1.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Simple keeping the serialization constructor present in WeakReference.
            </summary>
            <param name="info"></param>
            <param name="context"></param>
        </member>
        <member name="P:Pfz.Caching.KeepAliveWeakReference`1.Target">
            <summary>
            Gets or sets the typed target, calling GCUtils.KeepAlive() 
            while doing it.
            </summary>
        </member>
        <member name="P:Pfz.Caching.KeepAliveWeakReference`1.TargetAllowingExpiration">
            <summary>
            Gets or sets the typed-target, without calling GCUtils.KeepAlive().
            </summary>
        </member>
        <member name="T:Pfz.Caching.ResultCache`2">
            <summary>
            This class acts as a cache for function evalutations. This is inspired
            by the functional and immutable programming model, so calling a function
            twice with the same parameter, which will generate the same result, will 
            be evaluated only once.
            As a cache, such generated results can be garbage collected, but the
            cache is able to generate the same value again, given the same
            parameter. And, of course, the parameter can be an struct, so this 
            enables multi-parameters with a little extra effort.
            
            To use this cache, you must override and implement the method Generate.
            It is common to create the cache as an inheritor of this class with 
            a private constructor, and make it acessible by a static function call.
            </summary>
        </member>
        <member name="M:Pfz.Caching.ResultCache`2.#ctor">
            <summary>
            Initializes the functional cache, and register it in the Collected event.
            </summary>
        </member>
        <member name="M:Pfz.Caching.ResultCache`2.DoExecute(`0)">
            <summary>
            You must implement this method to effectivelly execute the function.
            Remember that such function must always return the same value considering
            the same input values.
            </summary>
            <param name="parameter">The parameter value.</param>
            <returns>Your generated result value.</returns>
        </member>
        <member name="M:Pfz.Caching.ResultCache`2.Execute(`0)">
            <summary>
            Evaluates the function, or uses the cached value if this function
            was already evaluated with the same parameters.
            
            This method is virtual so it is possible to clone the result in cases
            where the result is modifiable just before returning it.
            As the value is cached, you must guarantee that the value is not modifiable 
            or, if it is, at least clone it so the returned value, if modified, will
            not destroy the cached result.
            </summary>
            <param name="parameter">The parameter value.</param>
            <returns>Your generated result value.</returns>
        </member>
        <member name="M:Pfz.Caching.ResultCache`2.Clear">
            <summary>
            Clears the cache.
            </summary>
        </member>
        <member name="M:Pfz.Caching.ResultCache`2.Add(`0,`1)">
            <summary>
            Adds a value to the cache. This is here so inherited classes
            that know they are generating values valid to be added to the
            cache add it. Remember that this method throws an exception
            when the value already exists and that Cache in general
            must be thread-safe.
            </summary>
        </member>
        <member name="M:Pfz.Caching.ResultCache`2.AddOrReplace(`0,`1)">
            <summary>
            Adds or replaces a value from the cache. This method is here
            so inherited classes can replace existing cached values if,
            for some reason, such value changes.
            If you need to do this, remember that the cache can be used
            by many threads and even the cache itself being thread-safe,
            you may need your own locking to avoid incoherent states.
            </summary>
        </member>
        <member name="M:Pfz.Caching.ResultCache`2.Remove(`0)">
            <summary>
            Removes a cached result.
            </summary>
        </member>
        <member name="T:Pfz.Extensions.ClonningExtensions.PfzClonningExtensions">
            <summary>
            Adds some methods for clonning objects.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ClonningExtensions.PfzClonningExtensions.TypedClone``1(``0)">
            <summary>
            Clones the source object returning the new one as the same type
            (cast) of the original.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.ClonningExtensions.PfzClonningExtensions.CloneBySerialization``1(``0)">
            <summary>
            Clones an object by serializing it to a memory-stream and then
            deserializing it.
            </summary>
        </member>
        <member name="T:Pfz.Extensions.DisplayNameExtensions.PfzDisplayNameExtensions">
            <summary>
            Adds methods to work easily with Enums.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.DisplayNameExtensions.PfzDisplayNameExtensions.GetDisplayName(System.Enum)">
            <summary>
            Gets the display name of an enumerated value.
            If no EnumDisplayName attribute is set, uses the default enum name.
            </summary>
            <param name="enumValue">The enum value to get the display name.</param>
            <returns>The display name.</returns>
        </member>
        <member name="M:Pfz.Extensions.DisplayNameExtensions.PfzDisplayNameExtensions.GetDisplayName(System.Reflection.MemberInfo)">
            <summary>
            Gets the DisplayName of a member, or it's real name if it does
            not have a DisplayName.
            </summary>
            <param name="member">The member to get the display name for.</param>
            <returns>A name.</returns>
        </member>
        <member name="T:Pfz.Caching.WeakArray`1">
            <summary>
            This is an array of objects, where each object can be collected.
            Each time an item is accessed by the indexer, a GCUtils.KeepAlive
            is done.
            </summary>
            <typeparam name="T">The type of the array.</typeparam>
        </member>
        <member name="F:Pfz.Caching.WeakArray`1.Empty">
            <summary>
            Gets an empty WeakArray.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakArray`1.#ctor(System.Int32)">
            <summary>
            Creates the array with the given length.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakArray`1.Dispose(System.Boolean)">
            <summary>
            Releases the handles used by the array.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakArray`1.ToArray">
            <summary>
            Converts this WeakArray into a common array.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakArray`1.ToList">
            <summary>
            Converts this WeakArray into a list.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakArray`1.GetEnumerator">
            <summary>
            Gets an enumerator for this array, so foreach can be done.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakArray`1.Length">
            <summary>
            Gets the number of items in this array.
            </summary>
        </member>
        <member name="P:Pfz.Caching.WeakArray`1.Item(System.Int32)">
            <summary>
            Gets or sets the items in this array.
            </summary>
            <param name="index">The index of the item to get or set.</param>
        </member>
        <member name="T:Pfz.Caching.WeakHashSet`1">
            <summary>
            HashSet class which allows items to be collected.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakHashSet`1.#ctor">
            <summary>
            Creates a new instance of the WeakHashSet class.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakHashSet`1.Dispose(System.Boolean)">
            <summary>
            Releases all the GCHandles used internally.
            </summary>
            <param name="disposing"></param>
        </member>
        <member name="M:Pfz.Caching.WeakHashSet`1.Add(`0)">
            <summary>
            Tries to add an item in this hashset.
            Returns true if the item was added, or false if the item was
            already present.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakHashSet`1.Contains(`0)">
            <summary>
            Returns true if the given item is in this hashset, false otherwise.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakHashSet`1.ToList">
            <summary>
            Gets a list with all the non-collected items present in this
            hashset.
            </summary>
            <returns></returns>
        </member>
        <member name="M:Pfz.Caching.WeakHashSet`1.Remove(`0)">
            <summary>
            Removes the given item from this hashset.
            Returns a value indicating if the given item was in the hashset.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakHashSet`1.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Creates the class from serialization. At this level, does not read
            anything, as if everything was collected.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakHashSet`1.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
            <summary>
            Does not add any items to the serialization info, as if everything
            was collected.
            </summary>
        </member>
        <member name="M:Pfz.Caching.WeakHashSet`1.GetEnumerator">
            <summary>
            Gets an enumerator over the non-collected items in this hashset.
            </summary>
        </member>
        <member name="T:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions">
            <summary>
            Class that has methods to convert values to and from many different
            representations.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.ToString(System.UInt64,System.Byte)">
            <summary>
            Converts a value to string using the specific numericBase.
            </summary>
            <param name="value">The value to generate a string representation.</param>
            <param name="numericBase">The numericBase to use. 2 is binary, 16 is hexadecimal and so on.</param>
            <returns>An string representation of the given value using the right numericBase.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.ToString(System.Int64,System.Byte)">
            <summary>
            Converts a value to string using the specific numericBase.
            </summary>
            <param name="value">The value to generate a string representation.</param>
            <param name="numericBase">The numericBase to use. 2 is binary, 16 is hexadecimal and so on.</param>
            <returns>An string representation of the given value using the right numericBase.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.TryParseUInt64(System.String,System.Byte,System.UInt64@)">
            <summary>
            Tries to converts an string into a ulong representation using an specific 
            numericBase.
            </summary>
            <param name="value">The string representation to convert to an ulong.</param>
            <param name="numericBase">The numericBase to use. For example, 2 is binary.</param>
            <param name="result">The resulting value.</param>
            <returns>true if the convertion was possible.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.ParseUInt64(System.String,System.Byte)">
            <summary>
            Parses an string into an ulong using the given numericBase.
            </summary>
            <param name="value">The value to convert.</param>
            <param name="numericBase">The numericBase to use. For example, 2 is binary.</param>
            <returns>An ulong or throws an exception.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.TryParseInt64(System.String,System.Byte,System.Int64@)">
            <summary>
            Tries to converts an string into a ulong representation using an specific 
            numericBase.
            </summary>
            <param name="value">The string representation to convert to an ulong.</param>
            <param name="numericBase">The numericBase to use. For example, 2 is binary.</param>
            <param name="result">The resulting value.</param>
            <returns>true if the convertion was possible.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.ParseInt64(System.String,System.Byte)">
            <summary>
            Parses an string into an ulong using the given numericBase.
            </summary>
            <param name="value">The value to convert.</param>
            <param name="numericBase">The numericBase to use. For example, 2 is binary.</param>
            <returns>An ulong or throws an exception.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.ToString(System.UInt32,System.Byte)">
            <summary>
            Converts a value to string using the specific numericBase.
            </summary>
            <param name="value">The value to generate a string representation.</param>
            <param name="numericBase">The numericBase to use. 2 is binary, 16 is hexadecimal and so on.</param>
            <returns>An string representation of the given value using the right numericBase.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.ToString(System.Int32,System.Byte)">
            <summary>
            Converts a value to string using the specific numericBase.
            </summary>
            <param name="value">The value to generate a string representation.</param>
            <param name="numericBase">The numericBase to use. 2 is binary, 16 is hexadecimal and so on.</param>
            <returns>An string representation of the given value using the right numericBase.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.TryParseUInt32(System.String,System.Byte,System.UInt32@)">
            <summary>
            Tries to converts an string into a uint representation using an specific 
            numericBase.
            </summary>
            <param name="value">The string representation to convert to an uint.</param>
            <param name="numericBase">The numericBase to use. For example, 2 is binary.</param>
            <param name="result">The resulting value.</param>
            <returns>true if the convertion was possible.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.ParseUInt32(System.String,System.Byte)">
            <summary>
            Parses an string into an uint using the given numericBase.
            </summary>
            <param name="value">The value to convert.</param>
            <param name="numericBase">The numericBase to use. For example, 2 is binary.</param>
            <returns>An uint or throws an exception.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.TryParseInt32(System.String,System.Byte,System.Int32@)">
            <summary>
            Tries to converts an string into a uint representation using an specific 
            numericBase.
            </summary>
            <param name="value">The string representation to convert to an uint.</param>
            <param name="numericBase">The numericBase to use. For example, 2 is binary.</param>
            <param name="result">The resulting value.</param>
            <returns>true if the convertion was possible.</returns>
        </member>
        <member name="M:Pfz.Extensions.NumericConversionsExtensions.PfzNumericConversionsExtensions.ParseInt32(System.String,System.Byte)">
            <summary>
            Parses an string into an uint using the given numericBase.
            </summary>
            <param name="value">The value to convert.</param>
            <param name="numericBase">The numericBase to use. For example, 2 is binary.</param>
            <returns>An uint or throws an exception.</returns>
        </member>
        <member name="T:Pfz.Threading.ActionRunner`1">
            <summary>
            Class that creates a thread to run Actions as messages. It only creates 
            one thread to process all messages. Use it only when you know you want to
            process many messages asynchronously, but don't want (or can't) use ThreadPool 
            threads.
            <typeparam name="T">The type of the actions this executor invokes.</typeparam>
            </summary>
        </member>
        <member name="M:Pfz.Threading.ActionRunner`1.#ctor">
            <summary>
            Creates a new action runner.
            </summary>
        </member>
        <member name="M:Pfz.Threading.ActionRunner`1.Dispose(System.Boolean)">
            <summary>
            Frees all used resources.
            </summary>
            <param name="disposing"></param>
        </member>
        <member name="M:Pfz.Threading.ActionRunner`1.Run(System.Action{`0},`0)">
            <summary>
            Runs the given action.
            </summary>
            <param name="action">The action to run.</param>
            <param name="value">The value for the given action.</param>
        </member>
        <member name="T:Pfz.Time">
            <summary>
            A struct that represents Time only (instead of Date and Time).
            </summary>
        </member>
        <member name="M:Pfz.Time.Parse(System.String)">
            <summary>
            Parses the given text as a Time using the default format.
            </summary>
        </member>
        <member name="M:Pfz.Time.#ctor(System.Int32)">
            <summary>
            Creates a new time value from a given integer time, which
            must be previously got from a Time.AsInteger.
            </summary>
            <param name="integerTime"></param>
        </member>
        <member name="M:Pfz.Time.#ctor(System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            Creates a new time object from the specified parameters.
            </summary>
        </member>
        <member name="M:Pfz.Time.#ctor(System.DateTime)">
            <summary>
            Creates a new time object from the specified dateTime, obviouly
            getting only the time part.
            </summary>
            <param name="dateTime"></param>
        </member>
        <member name="M:Pfz.Time.op_Equality(Pfz.Time,Pfz.Time)">
            <summary>
            Compares if two time objects are equal.
            </summary>
        </member>
        <member name="M:Pfz.Time.op_Inequality(Pfz.Time,Pfz.Time)">
            <summary>
            Compares if two time objects are different.
            </summary>
        </member>
        <member name="M:Pfz.Time.op_LessThan(Pfz.Time,Pfz.Time)">
            <summary>
            Compares if a time object is less than other.
            </summary>
        </member>
        <member name="M:Pfz.Time.op_GreaterThan(Pfz.Time,Pfz.Time)">
            <summary>
            Compares if a time object is greater than other.
            </summary>
        </member>
        <member name="M:Pfz.Time.op_LessThanOrEqual(Pfz.Time,Pfz.Time)">
            <summary>
            Compares if a time object is less than or equal to
            another.
            </summary>
        </member>
        <member name="M:Pfz.Time.op_GreaterThanOrEqual(Pfz.Time,Pfz.Time)">
            <summary>
            Compares if a time value is greater than or equal to
            another.
            </summary>
        </member>
        <member name="M:Pfz.Time.op_Implicit(Pfz.Time)~System.DateTime">
            <summary>
            Implicit convert a Time object to a DateTime object.
            </summary>
            <param name="time"></param>
            <returns></returns>
        </member>
        <member name="M:Pfz.Time.op_Explicit(System.DateTime)~Pfz.Time">
            <summary>
            Explicit converts a DateTime object to a Time object.
            </summary>
            <param name="dateTime"></param>
            <returns></returns>
        </member>
        <member name="M:Pfz.Time.GetHashCode">
            <summary>
            Gets the hashcode of this time object.
            </summary>
            <returns></returns>
        </member>
        <member name="M:Pfz.Time.Equals(System.Object)">
            <summary>
            Returns true if this time object equals another object.
            </summary>
        </member>
        <member name="M:Pfz.Time.Equals(Pfz.Time)">
            <summary>
            Returns true if this time object equals the value of
            another time object.
            </summary>
        </member>
        <member name="M:Pfz.Time.ToString">
            <summary>
            Gets the time formatted.
            </summary>
            <returns></returns>
        </member>
        <member name="M:Pfz.Time.CompareTo(Pfz.Time)">
            <summary>
            Returns an integer value with the comparison result of 
            this time and another time. Negative value means this
            time is smaller than the other.
            </summary>
        </member>
        <member name="P:Pfz.Time.DefaultFormat">
            <summary>
            Gets or sets the default format used to display Time values.
            </summary>
        </member>
        <member name="P:Pfz.Time.Now">
            <summary>
            Gets the actual time, without date information.
            </summary>
        </member>
        <member name="P:Pfz.Time.Hour">
            <summary>
            Gets the hour of this time object.
            </summary>
        </member>
        <member name="P:Pfz.Time.Minute">
            <summary>
            Gets the minute of this time object.
            </summary>
        </member>
        <member name="P:Pfz.Time.Second">
            <summary>
            Gets the second of this time object.
            </summary>
        </member>
        <member name="P:Pfz.Time.Millisecond">
            <summary>
            Gets the millisecond of this time object.
            </summary>
        </member>
        <member name="P:Pfz.Time.AsInteger">
            <summary>
            Gets this value as an integer representation.
            </summary>
        </member>
        <member name="T:Pfz.Collections.ReadOnlyHashSet`1">
            <summary>
            Read-only wrapper for hashsets.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.#ctor(System.Collections.Generic.HashSet{`0})">
            <summary>
            Creates a new read-only hashset wrapper over a modifiable hashset.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.GetEnumerator">
            <summary>
            Returns an enumerator to iterate through all items in this
            hashset.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.Contains(`0)">
            <summary>
            Returns true if the given item exists in this hashset, otherwise
            false.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.CopyTo(`0[])">
            <summary>
            Copies the values of this hashset to an array.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.CopyTo(`0[],System.Int32)">
            <summary>
            Copies the values of this hashset to an array, beginning
            at the given destination index.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.CopyTo(`0[],System.Int32,System.Int32)">
            <summary>
            Copies the given count items from this hashset to an array,
            beginning at the given destination index.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.IsProperSubsetOf(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Determines wheter this hashset is a proper subset of the other
            collection.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.IsProperSupersetOf(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Determines wheter this hashset is a proper superset of the other
            collection.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.IsSubsetOf(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Determines wheter this hashset is a subset of the other
            collection.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.IsSupersetOf(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Determines wheter this hashset is a superset of the other
            collection.
            </summary>
        </member>
        <member name="M:Pfz.Collections.ReadOnlyHashSet`1.Overlaps(System.Collections.Generic.IEnumerable{`0})">
            <summary>
            Determines wheter this hashset overlaps the other collection.
            </summary>
        </member>
        <member name="P:Pfz.Collections.ReadOnlyHashSet`1.Count">
            <summary>
            Gets the number of items in this hashset.
            </summary>
        </member>
        <member name="T:Pfz.Extensions.TypeExtensions.PfzTypeExtensions">
            <summary>
            Adds some methods to the Type class so you can discover the
            sub-types easily.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.TypeExtensions.PfzTypeExtensions.GetDirectSubClasses(System.Type,System.Reflection.Assembly)">
            <summary>
            Gets the sub-classes of the specific type, in the specific assembly.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.TypeExtensions.PfzTypeExtensions.GetSubClassesRecursive(System.Type,System.Reflection.Assembly)">
            <summary>
            Gets the sub-classes of the specific type, in the specific assembly.
            </summary>
        </member>
        <member name="M:Pfz.Extensions.TypeExtensions.PfzTypeExtensions.GetReferencedAssemblies(System.Type)">
            <summary>
            Gets all assemblies that must be referenced if you want to
            use everything from the given type. Useful for CodeDOM.
            </summary>
            <param name="type">The type to get all referenced assemblies.</param>
            <returns>A hashset with all referenced assemblies.</returns>
        </member>
        <member name="M:Pfz.Extensions.TypeExtensions.PfzTypeExtensions.GetReferencedAssemblies(System.Collections.Generic.IEnumerable{System.Type})">
            <summary>
            Gets all assemblies that must be referenced if you want to
            use everything from the given types. Useful for CodeDOM.
            </summary>
            <param name="types">A collection of all needed types.</param>
            <returns>A HashSet of all referenced assemblies.</returns>
        </member>
        <member name="M:Pfz.Extensions.TypeExtensions.PfzTypeExtensions.AddReferencedAssemblies(System.Type,System.Collections.Generic.HashSet{System.Reflection.Assembly},System.Collections.Generic.HashSet{System.Type})">
            <summary>
            Adds all the referenced types/assemblies into the given hashsets.
            This is almost an internal implementation, but if you need to add
            many references but do not have a collection previouly created, you
            must use this method for performance reasons.
            </summary>
            <param name="type">The type to get all the referencies.</param>
            <param name="alreadyAddedAssemblies">A hashset, that is used to add the new referenced assemblies.</param>
            <param name="alreadyAddedTypes">A hashset, that is used to add the new referenced types and to avoid reprocessing them.</param>
        </member>
    </members>
</doc>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Microsoft
United States United States
I started to program computers when I was 11 years old, as a hobbyist, programming in AMOS Basic and Blitz Basic for Amiga.
At 12 I had my first try with assembler, but it was too difficult at the time. Then, in the same year, I learned C and, after learning C, I was finally able to learn assembler (for Motorola 680x0).
Not sure, but probably between 12 and 13, I started to learn C++. I always programmed "in an object oriented way", but using function pointers instead of virtual methods.

At 15 I started to learn Pascal at school and to use Delphi. At 16 I started my first internship (using Delphi). At 18 I started to work professionally using C++ and since then I've developed my programming skills as a professional developer in C++ and C#, generally creating libraries that help other developers do their work easier, faster and with less errors.

Want more info or simply want to contact me?
Take a look at: http://paulozemek.azurewebsites.net/
Or e-mail me at: paulozemek@outlook.com

Codeproject MVP 2012, 2015 & 2016
Microsoft MVP 2013-2014 (in October 2014 I started working at Microsoft, so I can't be a Microsoft MVP anymore).

Comments and Discussions