Created
February 19, 2014 02:56
-
-
Save analogrelay/9085258 to your computer and use it in GitHub Desktop.
HashCodeCombiner - Useful for GetHashCode implementations!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Copied from http://aspnetwebstack.codeplex.com/SourceControl/latest#src/Common/HashCodeCombiner.cs | |
| // Licensed under the Apache 2 License Terms as defined in http://aspnetwebstack.codeplex.com/SourceControl/latest#License.txt | |
| // The only change made is to move the class to the System namespace to make it easily available in any project this file is included in. | |
| // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. | |
| using System.Collections; | |
| namespace System | |
| { | |
| internal class HashCodeCombiner | |
| { | |
| private long _combinedHash64 = 0x1505L; | |
| public int CombinedHash | |
| { | |
| get { return _combinedHash64.GetHashCode(); } | |
| } | |
| public HashCodeCombiner Add(IEnumerable e) | |
| { | |
| if (e == null) | |
| { | |
| Add(0); | |
| } | |
| else | |
| { | |
| int count = 0; | |
| foreach (object o in e) | |
| { | |
| Add(o); | |
| count++; | |
| } | |
| Add(count); | |
| } | |
| return this; | |
| } | |
| public HashCodeCombiner Add(int i) | |
| { | |
| _combinedHash64 = ((_combinedHash64 << 5) + _combinedHash64) ^ i; | |
| return this; | |
| } | |
| public HashCodeCombiner Add(object o) | |
| { | |
| int hashCode = (o != null) ? o.GetHashCode() : 0; | |
| Add(hashCode); | |
| return this; | |
| } | |
| public static HashCodeCombiner Start() | |
| { | |
| return new HashCodeCombiner(); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment