diff options
author | Jens Geyer <jensg@apache.org> | 2013-04-29 22:10:10 +0200 |
---|---|---|
committer | Jens Geyer <jensg@apache.org> | 2013-04-29 22:10:10 +0200 |
commit | b706b1a905ce5eb8b195300c585caf53a8272c11 (patch) | |
tree | 3520d6031070832859c5afcbfcbca48c428d50b2 /lib/csharp | |
parent | 1b4c9b9691b856283f13f6ffb5979acc0d2c1738 (diff) | |
download | thrift-b706b1a905ce5eb8b195300c585caf53a8272c11.tar.gz |
THRIFT-1742 Optionally implement hashcode and equals in c#
Patch: Carl Yeksigian
Diffstat (limited to 'lib/csharp')
-rw-r--r-- | lib/csharp/Makefile.am | 1 | ||||
-rw-r--r-- | lib/csharp/src/Collections/TCollections.cs | 94 | ||||
-rw-r--r-- | lib/csharp/src/Thrift.WP7.csproj | 1 | ||||
-rw-r--r-- | lib/csharp/src/Thrift.csproj | 5 |
4 files changed, 99 insertions, 2 deletions
diff --git a/lib/csharp/Makefile.am b/lib/csharp/Makefile.am index 9b07f4fbd..f13f90a0f 100644 --- a/lib/csharp/Makefile.am +++ b/lib/csharp/Makefile.am @@ -19,6 +19,7 @@ THRIFTCODE= \ src/Collections/THashSet.cs \ + src/Collections/TCollections.cs \ src/Properties/AssemblyInfo.cs \ src/Protocol/TAbstractBase.cs \ src/Protocol/TBase.cs \ diff --git a/lib/csharp/src/Collections/TCollections.cs b/lib/csharp/src/Collections/TCollections.cs new file mode 100644 index 000000000..23fd8da3e --- /dev/null +++ b/lib/csharp/src/Collections/TCollections.cs @@ -0,0 +1,94 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +using System; +using System.Collections; + +namespace Thrift.Collections +{ + public class TCollections + { + /// <summary> + /// This will return true if the two collections are value-wise the same. + /// If the collection contains a collection, the collections will be compared using this method. + /// </summary> + public static bool Equals (IEnumerable first, IEnumerable second) + { + if (first == null && second == null) + { + return true; + } + if (first == null || second == null) + { + return false; + } + IEnumerator fiter = first.GetEnumerator (); + IEnumerator siter = second.GetEnumerator (); + + bool fnext = fiter.MoveNext (); + bool snext = siter.MoveNext (); + while (fnext && snext) + { + IEnumerable fenum = fiter.Current as IEnumerable; + IEnumerable senum = siter.Current as IEnumerable; + if (fenum != null && senum != null) + { + if (!Equals(fenum, senum)) + { + return false; + } + } + else if (fenum == null ^ senum == null) + { + return false; + } + else if (!Equals(fiter.Current, siter.Current)) + { + return false; + } + fnext = fiter.MoveNext(); + snext = siter.MoveNext(); + } + + return fnext == snext; + } + + /// <summary> + /// This returns a hashcode based on the value of the enumerable. + /// </summary> + public static int GetHashCode (IEnumerable enumerable) + { + if (enumerable == null) + { + return 0; + } + + int hashcode = 0; + foreach (Object obj in enumerable) + { + IEnumerable enum2 = obj as IEnumerable; + int objHash = enum2 == null ? obj.GetHashCode () : GetHashCode (enum2); + unchecked + { + hashcode = (hashcode * 397) ^ (objHash); + } + } + return hashcode; + } + } +}
\ No newline at end of file diff --git a/lib/csharp/src/Thrift.WP7.csproj b/lib/csharp/src/Thrift.WP7.csproj index be38bc83e..3d5b027b0 100644 --- a/lib/csharp/src/Thrift.WP7.csproj +++ b/lib/csharp/src/Thrift.WP7.csproj @@ -70,6 +70,7 @@ <Reference Include="System.Net" /> </ItemGroup> <ItemGroup> + <Compile Include="Collections\TCollections.cs" /> <Compile Include="Collections\THashSet.cs" /> <Compile Include="Properties\AssemblyInfo.WP7.cs" /> <Compile Include="Protocol\TBase.cs" /> diff --git a/lib/csharp/src/Thrift.csproj b/lib/csharp/src/Thrift.csproj index 0263d7284..0722c18bc 100644 --- a/lib/csharp/src/Thrift.csproj +++ b/lib/csharp/src/Thrift.csproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -77,6 +77,7 @@ <Reference Include="System.Web" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="Collections\TCollections.cs" />
<Compile Include="Collections\THashSet.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Protocol\TAbstractBase.cs" />
@@ -137,4 +138,4 @@ <ProjectExtensions>
<VisualStudio AllowExistingFolder="true" />
</ProjectExtensions>
-</Project>
\ No newline at end of file +</Project> |