THRIFT-5216 generate DeepCopy methods
Client: netstd
Patch: Jens Geyer
This closes #2155
diff --git a/lib/netstd/Thrift/Collections/TCollections.cs b/lib/netstd/Thrift/Collections/TCollections.cs
index 147bfc7..b386c37 100644
--- a/lib/netstd/Thrift/Collections/TCollections.cs
+++ b/lib/netstd/Thrift/Collections/TCollections.cs
@@ -16,11 +16,12 @@
// under the License.
using System.Collections;
+using System.Collections.Generic;
namespace Thrift.Collections
{
// ReSharper disable once InconsistentNaming
- public class TCollections
+ public static class TCollections
{
/// <summary>
/// This will return true if the two collections are value-wise the same.
@@ -38,6 +39,18 @@
return false;
}
+ // for dictionaries, we need to compare keys and values separately
+ // because KeyValuePair<K,V>.Equals() will not do what we want
+ var fdict = first as IDictionary;
+ var sdict = second as IDictionary;
+ if ((fdict != null) || (sdict != null))
+ {
+ if ((fdict == null) || (sdict == null))
+ return false;
+ return TCollections.Equals(fdict.Keys, sdict.Keys)
+ && TCollections.Equals(fdict.Values, sdict.Values);
+ }
+
var fiter = first.GetEnumerator();
var siter = second.GetEnumerator();
@@ -91,11 +104,13 @@
unchecked
{
- hashcode = (hashcode*397) ^ (objHash);
+ hashcode = (hashcode * 397) ^ (objHash);
}
}
return hashcode;
}
+
+
}
-}
\ No newline at end of file
+}
diff --git a/lib/netstd/Thrift/Collections/THashSet.cs b/lib/netstd/Thrift/Collections/THashSet.cs
index ffab577..8dfb9e3 100644
--- a/lib/netstd/Thrift/Collections/THashSet.cs
+++ b/lib/netstd/Thrift/Collections/THashSet.cs
@@ -60,12 +60,12 @@
Items.CopyTo(array, arrayIndex);
}
- public IEnumerator GetEnumerator()
+ IEnumerator IEnumerable.GetEnumerator()
{
return Items.GetEnumerator();
}
- IEnumerator<T> IEnumerable<T>.GetEnumerator()
+ public IEnumerator<T> GetEnumerator()
{
return ((IEnumerable<T>) Items).GetEnumerator();
}
diff --git a/lib/netstd/Thrift/Collections/ToStringExtension.cs b/lib/netstd/Thrift/Collections/ToStringExtension.cs
deleted file mode 100644
index 40dd9dd..0000000
--- a/lib/netstd/Thrift/Collections/ToStringExtension.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-// 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;
-using System.Collections.Generic;
-using System.Text;
-using Thrift.Protocol;
-
-namespace Thrift.Collections
-{
-
-
- public static class ToStringExtensions
- {
- public static void ToString(this object self, StringBuilder sb, bool first = true)
- {
- if (!first)
- sb.Append(", ");
-
- bool first_child = true;
- if (self is string) // string is IEnumerable
- {
- sb.Append('"');
- sb.Append(self);
- sb.Append('"');
- }
- else if (self is IDictionary)
- {
- sb.Append("{ ");
- foreach (DictionaryEntry pair in (self as IDictionary))
- {
- if (first_child)
- first_child = false;
- else
- sb.Append(",");
-
- sb.Append("{ ");
- pair.Key.ToString(sb);
- sb.Append(", ");
- pair.Value.ToString(sb);
- sb.Append("}");
- }
- sb.Append("}");
- }
- else if (self is IEnumerable)
- {
- sb.Append("{ ");
- foreach (var elm in (self as IEnumerable))
- {
- elm.ToString(sb, first_child);
- first_child = false;
- }
- sb.Append("}");
- }
- else if (self is TBase)
- {
- sb.Append((self as TBase).ToString());
- }
- else
- {
- sb.Append(self.ToString());
- }
- }
- }
-
-
-}