diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2013-09-19 22:36:33 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2013-09-19 22:36:33 +0400 |
commit | 795dde3d67005d38a6c62447d60d65f7b7941c69 (patch) | |
tree | d706d45f3e1eb205720840989f7016a0f14f3686 /ICSharpCode.NRefactory.IKVM | |
parent | d655319f903f50beb20066fb3ca3f8ab344ee45e (diff) |
Removed fast interning provider (interning is atm too slow -> needs to
be fixed).
Diffstat (limited to 'ICSharpCode.NRefactory.IKVM')
-rw-r--r-- | ICSharpCode.NRefactory.IKVM/FastInterningProvider.cs | 142 | ||||
-rw-r--r-- | ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.IKVM.csproj | 1 | ||||
-rw-r--r-- | ICSharpCode.NRefactory.IKVM/IkvmLoader.cs | 1 |
3 files changed, 0 insertions, 144 deletions
diff --git a/ICSharpCode.NRefactory.IKVM/FastInterningProvider.cs b/ICSharpCode.NRefactory.IKVM/FastInterningProvider.cs deleted file mode 100644 index 91ec573f..00000000 --- a/ICSharpCode.NRefactory.IKVM/FastInterningProvider.cs +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright (c) 2010-2013 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Runtime.CompilerServices; - -using ICSharpCode.NRefactory.Utils; - -namespace ICSharpCode.NRefactory.TypeSystem.Implementation -{ - /// <summary> - /// Fast interning provider. The main difference is that it only supports to intern non frozen objects. - /// </summary> - sealed class FastInterningProvider : InterningProvider - { - sealed class InterningComparer : IEqualityComparer<ISupportsInterning> - { - public bool Equals(ISupportsInterning x, ISupportsInterning y) - { - return x.EqualsForInterning(y); - } - - public int GetHashCode(ISupportsInterning obj) - { - return obj.GetHashCodeForInterning(); - } - } - - sealed class ListComparer : IEqualityComparer<IEnumerable> - { - public bool Equals(IEnumerable a, IEnumerable b) - { - if (a.GetType() != b.GetType()) - return false; - IEnumerator e1 = a.GetEnumerator(); - IEnumerator e2 = b.GetEnumerator(); - while (e1.MoveNext()) { - // e1 has more elements than e2; or elements are different - if (!e2.MoveNext() || e1.Current != e2.Current) - return false; - } - if (e2.MoveNext()) // e2 has more elements than e1 - return false; - // No need to dispose e1/e2: non-generic IEnumerator doesn't implement IDisposable, - // and the underlying enumerator will likely be a List<T>.Enumerator which has an empty Dispose() method. - return true; - } - - public int GetHashCode(IEnumerable obj) - { - int hashCode = obj.GetType().GetHashCode(); - unchecked { - foreach (object o in obj) { - hashCode *= 27; - hashCode += RuntimeHelpers.GetHashCode(o); - } - } - return hashCode; - } - } - - Dictionary<object, object> byValueDict = new Dictionary<object, object>(); - Dictionary<ISupportsInterning, ISupportsInterning> supportsInternDict = new Dictionary<ISupportsInterning, ISupportsInterning>(new InterningComparer()); - Dictionary<IEnumerable, IEnumerable> listDict = new Dictionary<IEnumerable, IEnumerable>(new ListComparer()); - - public override ISupportsInterning Intern(ISupportsInterning obj) - { - if (obj == null) - return null; - - ISupportsInterning output; - if (supportsInternDict.TryGetValue(obj, out output)) { - return output; - } else { - // ensure objects are frozen when we put them into the dictionary - // note that Freeze may change the hash code of the object - FreezableHelper.Freeze(obj); - supportsInternDict.Add(obj, obj); - return obj; - } - } - - public override string Intern(string text) - { - if (text == null) - return null; - - object output; - if (byValueDict.TryGetValue(text, out output)) - return (string)output; - else - return text; - } - - public override object InternValue(object obj) - { - if (obj == null) - return null; - - object output; - if (byValueDict.TryGetValue(obj, out output)) - return output; - else - return obj; - } - - public override IList<T> InternList<T>(IList<T> list) - { - if (list == null) - return null; - if (list.Count == 0) - return EmptyList<T>.Instance; - if (!list.IsReadOnly) - list = new ReadOnlyCollection<T>(list); - IEnumerable output; - if (listDict.TryGetValue(list, out output)) - list = (IList<T>)output; - else - listDict.Add(list, list); - return list; - } - } -} diff --git a/ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.IKVM.csproj b/ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.IKVM.csproj index ea42305a..8ef5b98e 100644 --- a/ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.IKVM.csproj +++ b/ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.IKVM.csproj @@ -44,7 +44,6 @@ <Compile Include="IntConstantValue.cs" />
<Compile Include="StructConstantValue.cs" />
<Compile Include="ShortConstantValue.cs" />
- <Compile Include="FastInterningProvider.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
diff --git a/ICSharpCode.NRefactory.IKVM/IkvmLoader.cs b/ICSharpCode.NRefactory.IKVM/IkvmLoader.cs index 92d5ccf2..9d73743f 100644 --- a/ICSharpCode.NRefactory.IKVM/IkvmLoader.cs +++ b/ICSharpCode.NRefactory.IKVM/IkvmLoader.cs @@ -74,7 +74,6 @@ namespace ICSharpCode.NRefactory.TypeSystem /// </summary> public IkvmLoader() { - interningProvider = new FastInterningProvider (); } #region Load Assembly From Disk |