diff --git a/src/ZoneTree/Core/TypeExtensions.cs b/src/ZoneTree/Core/TypeExtensions.cs new file mode 100644 index 0000000..337e33c --- /dev/null +++ b/src/ZoneTree/Core/TypeExtensions.cs @@ -0,0 +1,37 @@ +using System.Text; + +namespace Tenray.ZoneTree.Core; + +public static class TypeExtensions +{ + public static string SimplifiedFullName(this Type type) + { + if (!type.IsGenericType) + return type.FullName; + var builder = new StringBuilder(); + var typeName = type.Namespace + "." + type.Name; + int index = typeName.IndexOf('`'); + if (index > 0) + { + builder.Append(typeName.Substring(0, index)); + } + else + { + builder.Append(typeName); + } + + builder.Append("<"); + var genericArguments = type.GetGenericArguments(); + var len = genericArguments.Length; + for (var i = 0; i < len; i++) + { + if (i > 0) + { + builder.Append(", "); + } + builder.Append(genericArguments[i].SimplifiedFullName()); + } + builder.Append(">"); + return builder.ToString(); + } +} \ No newline at end of file diff --git a/src/ZoneTree/Core/ZoneTree.cs b/src/ZoneTree/Core/ZoneTree.cs index f04d788..714af09 100644 --- a/src/ZoneTree/Core/ZoneTree.cs +++ b/src/ZoneTree/Core/ZoneTree.cs @@ -185,11 +185,11 @@ public sealed partial class ZoneTree : IZoneTree, IZ { if (MutableSegment != null) ZoneTreeMeta.MutableSegment = MutableSegment.SegmentId; - ZoneTreeMeta.ComparerType = Options.Comparer.GetType().FullName; - ZoneTreeMeta.KeyType = typeof(TKey).FullName; - ZoneTreeMeta.ValueType = typeof(TValue).FullName; - ZoneTreeMeta.KeySerializerType = Options.KeySerializer.GetType().FullName; - ZoneTreeMeta.ValueSerializerType = Options.ValueSerializer.GetType().FullName; + ZoneTreeMeta.ComparerType = Options.Comparer.GetType().SimplifiedFullName(); + ZoneTreeMeta.KeyType = typeof(TKey).SimplifiedFullName(); + ZoneTreeMeta.ValueType = typeof(TValue).SimplifiedFullName(); + ZoneTreeMeta.KeySerializerType = Options.KeySerializer.GetType().SimplifiedFullName(); + ZoneTreeMeta.ValueSerializerType = Options.ValueSerializer.GetType().SimplifiedFullName(); ZoneTreeMeta.DiskSegment = DiskSegment.SegmentId; ZoneTreeMeta.ReadOnlySegments = ReadOnlySegmentQueue.Select(x => x.SegmentId).ToArray(); ZoneTreeMeta.BottomSegments = BottomSegmentQueue.Select(x => x.SegmentId).ToArray(); diff --git a/src/ZoneTree/Core/ZoneTreeLoader.cs b/src/ZoneTree/Core/ZoneTreeLoader.cs index 97985c6..5006303 100644 --- a/src/ZoneTree/Core/ZoneTreeLoader.cs +++ b/src/ZoneTree/Core/ZoneTreeLoader.cs @@ -1,4 +1,5 @@ using System.Collections.Concurrent; +using System.Text; using Tenray.ZoneTree.Exceptions; using Tenray.ZoneTree.Options; using Tenray.ZoneTree.Segments; @@ -54,30 +55,30 @@ public sealed class ZoneTreeLoader Version.Parse(version), ZoneTreeInfo.ProductVersion); - if (!string.Equals(ZoneTreeMeta.KeyType, typeof(TKey).FullName, StringComparison.Ordinal)) + if (!string.Equals(ZoneTreeMeta.KeyType, typeof(TKey).SimplifiedFullName(), StringComparison.Ordinal)) throw new TreeKeyTypeMismatchException( ZoneTreeMeta.KeyType, - typeof(TKey).FullName); + typeof(TKey).SimplifiedFullName()); - if (!string.Equals(ZoneTreeMeta.ValueType, typeof(TValue).FullName, StringComparison.Ordinal)) + if (!string.Equals(ZoneTreeMeta.ValueType, typeof(TValue).SimplifiedFullName(), StringComparison.Ordinal)) throw new TreeValueTypeMismatchException( ZoneTreeMeta.ValueType, - typeof(TValue).FullName); + typeof(TValue).SimplifiedFullName()); - if (!string.Equals(ZoneTreeMeta.ComparerType, Options.Comparer.GetType().FullName, StringComparison.Ordinal)) + if (!string.Equals(ZoneTreeMeta.ComparerType, Options.Comparer.GetType().SimplifiedFullName(), StringComparison.Ordinal)) throw new TreeComparerMismatchException( ZoneTreeMeta.ComparerType, - Options.Comparer.GetType().FullName); + Options.Comparer.GetType().SimplifiedFullName()); - if (!string.Equals(ZoneTreeMeta.KeySerializerType, Options.KeySerializer.GetType().FullName, StringComparison.Ordinal)) + if (!string.Equals(ZoneTreeMeta.KeySerializerType, Options.KeySerializer.GetType().SimplifiedFullName(), StringComparison.Ordinal)) throw new TreeKeySerializerTypeMismatchException( ZoneTreeMeta.KeySerializerType, - Options.KeySerializer.GetType().FullName); + Options.KeySerializer.GetType().SimplifiedFullName()); - if (!string.Equals(ZoneTreeMeta.ValueSerializerType, Options.ValueSerializer.GetType().FullName, StringComparison.Ordinal)) + if (!string.Equals(ZoneTreeMeta.ValueSerializerType, Options.ValueSerializer.GetType().SimplifiedFullName(), StringComparison.Ordinal)) throw new TreeValueSerializerTypeMismatchException( ZoneTreeMeta.ValueSerializerType, - Options.ValueSerializer.GetType().FullName); + Options.ValueSerializer.GetType().SimplifiedFullName()); } void LoadZoneTreeMetaWAL() @@ -267,4 +268,4 @@ public sealed class ZoneTreeLoader ReadOnlySegments, MutableSegment, DiskSegment, BottomSegments, maximumSegmentId); return zoneTree; } -} \ No newline at end of file +} diff --git a/src/ZoneTree/Directory.Build.props b/src/ZoneTree/Directory.Build.props index 8567e00..e24b4a7 100644 --- a/src/ZoneTree/Directory.Build.props +++ b/src/ZoneTree/Directory.Build.props @@ -5,8 +5,8 @@ Ahmed Yasin Koculu ZoneTree ZoneTree - 1.7.6.0 - 1.7.6.0 + 1.7.8.0 + 1.7.8.0 Ahmed Yasin Koculu ZoneTree ZoneTree is a persistent, high-performance, transactional, ACID-compliant ordered key-value database for NET. It can operate in memory or on local/cloud storage.