Skip to content
This repository was archived by the owner on May 16, 2022. It is now read-only.

Commit cca2c5b

Browse files
mayukineuecc
authored andcommitted
Force DefaultResolver
1 parent 106dca7 commit cca2c5b

File tree

7 files changed

+97
-56
lines changed

7 files changed

+97
-56
lines changed

src/ZeroFormatter.CodeGenerator/EnumGenerator.tt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,16 @@ namespace <#= Namespace #>
1515
using global::ZeroFormatter.Internal;
1616
using global::ZeroFormatter.Segments;
1717

18+
<#
19+
var resolverName = (ForceDefaultResolver) ? "ZeroFormatter.Formatters.DefaultResolver" : "TTypeResolver";
20+
var resolverNameGenericArg = (ForceDefaultResolver) ? "" : "<TTypeResolver>";
21+
#>
1822
<# foreach(var t in Types) { #>
1923

20-
public class <#= t.Name #>Formatter<TTypeResolver> : Formatter<TTypeResolver, <#= t.FullName #>>
21-
where TTypeResolver : ITypeResolver, new()
24+
public class <#= t.Name #>Formatter<#= resolverNameGenericArg #> : Formatter<<#= resolverName #>, <#= t.FullName #>>
25+
<# if(!ForceDefaultResolver) { #>
26+
where <#= resolverName #> : ITypeResolver, new()
27+
<# } #>
2228
{
2329
public override int? GetLength()
2430
{
@@ -39,8 +45,10 @@ namespace <#= Namespace #>
3945

4046
<# if (t.IncludeNullable) { #>
4147

42-
public class Nullable<#= t.Name #>Formatter<TTypeResolver> : Formatter<TTypeResolver, <#= t.FullName #>?>
43-
where TTypeResolver : ITypeResolver, new()
48+
public class Nullable<#= t.Name #>Formatter<#= resolverNameGenericArg #> : Formatter<<#= resolverName #>, <#= t.FullName #>?>
49+
<# if(!ForceDefaultResolver) { #>
50+
where <#= resolverName #> : ITypeResolver, new()
51+
<# } #>
4452
{
4553
public override int? GetLength()
4654
{

src/ZeroFormatter.CodeGenerator/GeneratorPartial.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public partial class EnumGenerator
1010
{
1111
public string Namespace { get; set; }
1212
public EnumType[] Types { get; set; }
13+
public bool ForceDefaultResolver { get; set; }
1314
}
1415

1516
public class EnumType : IEquatable<EnumType>
@@ -37,6 +38,7 @@ public partial class UnionGenerator
3738
{
3839
public string Namespace { get; set; }
3940
public UnionType[] Types { get; set; }
41+
public bool ForceDefaultResolver { get; set; }
4042
}
4143

4244
public class UnionType
@@ -54,12 +56,14 @@ public partial class ObjectGenerator
5456
{
5557
public string Namespace { get; set; }
5658
public ObjectSegmentType[] Types { get; set; }
59+
public bool ForceDefaultResolver { get; set; }
5760
}
5861

5962
public partial class StructGenerator
6063
{
6164
public string Namespace { get; set; }
6265
public ObjectSegmentType[] Types { get; set; }
66+
public bool ForceDefaultResolver { get; set; }
6367
}
6468

6569
public class ObjectSegmentType
@@ -127,6 +131,7 @@ public partial class InitializerGenerator
127131
public UnionGenerator[] Unions { get; set; }
128132
public GenericType[] GenericTypes { get; set; }
129133
public bool UnuseUnityAttribute { get; set; }
134+
public bool ForceDefaultResolver { get; set; }
130135
public string ResolverName { get; set; }
131136
public string Namespace { get; set; }
132137
}

src/ZeroFormatter.CodeGenerator/InitializerGenerator.tt

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,18 @@ namespace <#= Namespace #>
2828
{
2929
if(registered) return;
3030
registered = true;
31-
31+
<#
32+
var resolverName = (ForceDefaultResolver) ? "ZeroFormatter.Formatters.DefaultResolver" : ResolverName;
33+
var resolverNameGenericArg = (ForceDefaultResolver) ? "" : "<" + ResolverName + ">";
34+
#>
3235
// Enums
3336
<# foreach(var g in Enums) { foreach(var t in g.Types) { #>
34-
ZeroFormatter.Formatters.Formatter<<#= ResolverName #>, <#= t.FullName #>>.Register(new <#= g.Namespace + "." + t.Name #>Formatter<<#= ResolverName #>>());
37+
ZeroFormatter.Formatters.Formatter<<#= resolverName #>, <#= t.FullName #>>.Register(new <#= g.Namespace + "." + t.Name #>Formatter<#= resolverNameGenericArg #>());
3538
<# if(t.IsGenerateEqualityComparer) { #>
3639
ZeroFormatter.Comparers.ZeroFormatterEqualityComparer<<#= t.FullName #>>.Register(new <#= g.Namespace + "." + t.Name #>EqualityComparer());
3740
<# } #>
3841
<# if (t.IncludeNullable) { #>
39-
ZeroFormatter.Formatters.Formatter<<#= ResolverName #>, <#= t.FullName #>?>.Register(new <#= g.Namespace + ".Nullable" + t.Name #>Formatter<<#= ResolverName #>>());
42+
ZeroFormatter.Formatters.Formatter<<#= resolverName #>, <#= t.FullName #>?>.Register(new <#= g.Namespace + ".Nullable" + t.Name #>Formatter<#= resolverNameGenericArg #>());
4043
<# if(t.IsGenerateEqualityComparer) { #>
4144
ZeroFormatter.Comparers.ZeroFormatterEqualityComparer<<#= t.FullName #>?>.Register(new NullableEqualityComparer<<#= t.FullName #>>());
4245
<# } #>
@@ -45,53 +48,53 @@ namespace <#= Namespace #>
4548
<# } } #>
4649
// Objects
4750
<# foreach(var g in Objects) { foreach(var t in g.Types) { #>
48-
ZeroFormatter.Formatters.Formatter<<#= ResolverName #>, <#= t.FullName #>>.Register(new <#= g.Namespace + "." + t.Name #>Formatter<<#= ResolverName #>>());
51+
ZeroFormatter.Formatters.Formatter<<#= resolverName #>, <#= t.FullName #>>.Register(new <#= g.Namespace + "." + t.Name #>Formatter<#= resolverNameGenericArg #>());
4952
<# } } #>
5053
// Structs
5154
<# foreach(var g in Structs) { foreach(var t in g.Types) { #>
5255
{
53-
var structFormatter = new <#= g.Namespace + "." + t.Name #>Formatter<<#= ResolverName #>>();
54-
ZeroFormatter.Formatters.Formatter<<#= ResolverName #>, <#= t.FullName #>>.Register(structFormatter);
55-
ZeroFormatter.Formatters.Formatter<<#= ResolverName #>, <#= t.FullName #>?>.Register(new global::ZeroFormatter.Formatters.NullableStructFormatter<<#= ResolverName #>, <#= t.FullName #>>(structFormatter));
56+
var structFormatter = new <#= g.Namespace + "." + t.Name #>Formatter<#= resolverNameGenericArg #>();
57+
ZeroFormatter.Formatters.Formatter<<#= resolverName #>, <#= t.FullName #>>.Register(structFormatter);
58+
ZeroFormatter.Formatters.Formatter<<#= resolverName #>, <#= t.FullName #>?>.Register(new global::ZeroFormatter.Formatters.NullableStructFormatter<<#= resolverName #>, <#= t.FullName #>>(structFormatter));
5659
}
5760
<# } } #>
5861
// Unions
5962
<# foreach(var g in Unions) { foreach(var t in g.Types) { #>
6063
{
61-
var unionFormatter = new <#= g.Namespace + "." + t.Name #>Formatter<<#= ResolverName #>>();
62-
ZeroFormatter.Formatters.Formatter<<#= ResolverName #>, <#= t.FullName #>>.Register(unionFormatter);
64+
var unionFormatter = new <#= g.Namespace + "." + t.Name #>Formatter<#= resolverNameGenericArg #>();
65+
ZeroFormatter.Formatters.Formatter<<#= resolverName #>, <#= t.FullName #>>.Register(unionFormatter);
6366
}
6467
<# } } #>
6568
// Generics
6669
<# foreach(var g in GenericTypes) { #>
6770
<# if (g.TypeKind == GenericTypeKind.KeyTuple) { #>
68-
ZeroFormatter.Formatters.Formatter.RegisterKeyTuple<<#= ResolverName #>, <#= g.ElementTypes #>>();
71+
ZeroFormatter.Formatters.Formatter.RegisterKeyTuple<<#= resolverName #>, <#= g.ElementTypes #>>();
6972
<# } else if(g.TypeKind == GenericTypeKind.List) { #>
70-
ZeroFormatter.Formatters.Formatter.RegisterList<<#= ResolverName #>, <#= g.ElementTypes #>>();
73+
ZeroFormatter.Formatters.Formatter.RegisterList<<#= resolverName #>, <#= g.ElementTypes #>>();
7174
<# } else if(g.TypeKind == GenericTypeKind.Array) { #>
72-
ZeroFormatter.Formatters.Formatter.RegisterArray<<#= ResolverName #>, <#= g.ElementTypes #>>();
75+
ZeroFormatter.Formatters.Formatter.RegisterArray<<#= resolverName #>, <#= g.ElementTypes #>>();
7376
<# } else if(g.TypeKind == GenericTypeKind.Collection) { #>
74-
ZeroFormatter.Formatters.Formatter.RegisterCollection<<#= ResolverName #>, <#= g.ElementTypes #>>();
77+
ZeroFormatter.Formatters.Formatter.RegisterCollection<<#= resolverName #>, <#= g.ElementTypes #>>();
7578
<# } else if(g.TypeKind == GenericTypeKind.ReadOnlyList) { #>
76-
ZeroFormatter.Formatters.Formatter.RegisterReadOnlyList<<#= ResolverName #>, <#= g.ElementTypes #>>();
79+
ZeroFormatter.Formatters.Formatter.RegisterReadOnlyList<<#= resolverName #>, <#= g.ElementTypes #>>();
7780
<# } else if(g.TypeKind == GenericTypeKind.Dictionary) { #>
78-
ZeroFormatter.Formatters.Formatter.RegisterDictionary<<#= ResolverName #>, <#= g.ElementTypes #>>();
81+
ZeroFormatter.Formatters.Formatter.RegisterDictionary<<#= resolverName #>, <#= g.ElementTypes #>>();
7982
<# } else if(g.TypeKind == GenericTypeKind.LazyDictionary) { #>
80-
ZeroFormatter.Formatters.Formatter.RegisterLazyDictionary<<#= ResolverName #>, <#= g.ElementTypes #>>();
83+
ZeroFormatter.Formatters.Formatter.RegisterLazyDictionary<<#= resolverName #>, <#= g.ElementTypes #>>();
8184
<# } else if(g.TypeKind == GenericTypeKind.LazyReadOnlyDictionary) { #>
82-
ZeroFormatter.Formatters.Formatter.RegisterLazyReadOnlyDictionary<<#= ResolverName #>, <#= g.ElementTypes #>>();
85+
ZeroFormatter.Formatters.Formatter.RegisterLazyReadOnlyDictionary<<#= resolverName #>, <#= g.ElementTypes #>>();
8386
<# } else if(g.TypeKind == GenericTypeKind.Lookup) { #>
84-
ZeroFormatter.Formatters.Formatter.RegisterLookup<<#= ResolverName #>, <#= g.ElementTypes #>>();
87+
ZeroFormatter.Formatters.Formatter.RegisterLookup<<#= resolverName #>, <#= g.ElementTypes #>>();
8588
<# } else if(g.TypeKind == GenericTypeKind.InterfaceCollection) { #>
86-
ZeroFormatter.Formatters.Formatter.RegisterInterfaceCollection<<#= ResolverName #>, <#= g.ElementTypes #>>();
89+
ZeroFormatter.Formatters.Formatter.RegisterInterfaceCollection<<#= resolverName #>, <#= g.ElementTypes #>>();
8790
<# } else if(g.TypeKind == GenericTypeKind.Enumerable) { #>
88-
ZeroFormatter.Formatters.Formatter.RegisterEnumerable<<#= ResolverName #>, <#= g.ElementTypes #>>();
91+
ZeroFormatter.Formatters.Formatter.RegisterEnumerable<<#= resolverName #>, <#= g.ElementTypes #>>();
8992
<# } else if(g.TypeKind == GenericTypeKind.ReadOnlyCollection) { #>
90-
ZeroFormatter.Formatters.Formatter.RegisterReadOnlyCollection<<#= ResolverName #>, <#= g.ElementTypes #>>();
93+
ZeroFormatter.Formatters.Formatter.RegisterReadOnlyCollection<<#= resolverName #>, <#= g.ElementTypes #>>();
9194
<# } else if(g.TypeKind == GenericTypeKind.KeyValuePair) { #>
92-
ZeroFormatter.Formatters.Formatter.RegisterKeyValuePair<<#= ResolverName #>, <#= g.ElementTypes #>>();
95+
ZeroFormatter.Formatters.Formatter.RegisterKeyValuePair<<#= resolverName #>, <#= g.ElementTypes #>>();
9396
<# } else if(g.TypeKind == GenericTypeKind.LazyLookup) { #>
94-
ZeroFormatter.Formatters.Formatter.RegisterLazyLookup<<#= ResolverName #>, <#= g.ElementTypes #>>();
97+
ZeroFormatter.Formatters.Formatter.RegisterLazyLookup<<#= resolverName #>, <#= g.ElementTypes #>>();
9598
<# } } #>
9699
}
97100
}

src/ZeroFormatter.CodeGenerator/ObjectGenerator.tt

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,15 @@ namespace <#= Namespace #>
1414
using global::ZeroFormatter.Internal;
1515
using global::ZeroFormatter.Segments;
1616

17+
<#
18+
var resolverName = (ForceDefaultResolver) ? "ZeroFormatter.Formatters.DefaultResolver" : "TTypeResolver";
19+
var resolverNameGenericArg = (ForceDefaultResolver) ? "" : "<TTypeResolver>";
20+
#>
1721
<# foreach(var t in Types) { #>
18-
public class <#= t.Name #>Formatter<TTypeResolver> : Formatter<TTypeResolver, <#= t.FullName #>>
22+
public class <#= t.Name #>Formatter<#= resolverNameGenericArg #> : Formatter<<#= resolverName #>, <#= t.FullName #>>
23+
<# if(!ForceDefaultResolver) { #>
1924
where TTypeResolver : ITypeResolver, new()
25+
<# } #>
2026
{
2127
public override int? GetLength()
2228
{
@@ -41,7 +47,7 @@ namespace <#= Namespace #>
4147

4248
offset += (8 + 4 * (<#= t.LastIndex #> + 1));
4349
<# foreach(var p in t.Properties) { #>
44-
offset += ObjectSegmentHelper.SerializeFromFormatter<TTypeResolver, <#= p.Type #>>(ref bytes, startOffset, offset, <#= p.Index #>, value.<#= p.Name #>);
50+
offset += ObjectSegmentHelper.SerializeFromFormatter<<#= resolverName #>, <#= p.Type #>>(ref bytes, startOffset, offset, <#= p.Index #>, value.<#= p.Name #>);
4551
<# } #>
4652

4753
return ObjectSegmentHelper.WriteSize(ref bytes, startOffset, offset, <#= t.LastIndex #>);
@@ -56,13 +62,14 @@ namespace <#= Namespace #>
5662
byteSize = 4;
5763
return null;
5864
}
59-
return new <#= t.Name #>ObjectSegment<TTypeResolver>(tracker, new ArraySegment<byte>(bytes, offset, byteSize));
65+
return new <#= t.Name #>ObjectSegment<#= resolverNameGenericArg #>(tracker, new ArraySegment<byte>(bytes, offset, byteSize));
6066
}
6167
}
6268

63-
public class <#= t.Name #>ObjectSegment<TTypeResolver> : <#= t.FullName #>, IZeroFormatterSegment
69+
public class <#= t.Name #>ObjectSegment<#= resolverNameGenericArg #> : <#= t.FullName #>, IZeroFormatterSegment
70+
<# if(!ForceDefaultResolver) { #>
6471
where TTypeResolver : ITypeResolver, new()
65-
{
72+
<# } #> {
6673
static readonly int[] __elementSizes = new int[]{ <#= string.Join(", ", t.ElementFixedSizes) #> };
6774

6875
readonly ArraySegment<byte> __originalBytes;
@@ -73,7 +80,7 @@ namespace <#= Namespace #>
7380
<# foreach(var p in t.Properties) { #>
7481
<# if(p.IsFixedSize) { #>
7582
<# } else if(p.IsCacheSegment) { #>
76-
CacheSegment<TTypeResolver, <#= p.Type #>> _<#= p.Name #>;
83+
CacheSegment<<#= resolverName #>, <#= p.Type #>> _<#= p.Name #>;
7784
<# } else { #>
7885
<#= p.Type #> _<#= p.Name #>;
7986
<# } } #>
@@ -85,11 +92,11 @@ namespace <#= Namespace #>
8592
<# if(p.IsFixedSize) { #>
8693
<#= (p.IsGetProtected ? "protected " : "") + "get" #>
8794
{
88-
return ObjectSegmentHelper.GetFixedProperty<TTypeResolver, <#= p.Type #>>(__originalBytes, <#= p.Index #>, __binaryLastIndex, __extraFixedBytes, __tracker);
95+
return ObjectSegmentHelper.GetFixedProperty<<#= resolverName #>, <#= p.Type #>>(__originalBytes, <#= p.Index #>, __binaryLastIndex, __extraFixedBytes, __tracker);
8996
}
9097
<#= (p.IsSetProtected ? "protected " : "") + "set" #>
9198
{
92-
ObjectSegmentHelper.SetFixedProperty<TTypeResolver, <#= p.Type #>>(__originalBytes, <#= p.Index #>, __binaryLastIndex, __extraFixedBytes, value, __tracker);
99+
ObjectSegmentHelper.SetFixedProperty<<#= resolverName #>, <#= p.Type #>>(__originalBytes, <#= p.Index #>, __binaryLastIndex, __extraFixedBytes, value, __tracker);
93100
}
94101
<# } else if(p.IsCacheSegment) { #>
95102
<#= (p.IsGetProtected ? "protected " : "") + "get" #>
@@ -128,9 +135,9 @@ namespace <#= Namespace #>
128135
<# foreach(var p in t.Properties) { #>
129136
<# if (p.IsFixedSize) { #>
130137
<# } else if(p.IsCacheSegment) { #>
131-
_<#= p.Name #> = new CacheSegment<TTypeResolver, <#= p.Type #>>(__tracker, ObjectSegmentHelper.GetSegment(originalBytes, <#= p.Index #>, __binaryLastIndex, __tracker));
138+
_<#= p.Name #> = new CacheSegment<<#= resolverName #>, <#= p.Type #>>(__tracker, ObjectSegmentHelper.GetSegment(originalBytes, <#= p.Index #>, __binaryLastIndex, __tracker));
132139
<# } else { #>
133-
_<#= p.Name #> = ObjectSegmentHelper.DeserializeSegment<TTypeResolver, <#= p.Type #>>(originalBytes, <#= p.Index #>, __binaryLastIndex, __tracker);
140+
_<#= p.Name #> = ObjectSegmentHelper.DeserializeSegment<<#= resolverName #>, <#= p.Type #>>(originalBytes, <#= p.Index #>, __binaryLastIndex, __tracker);
134141
<# } #>
135142
<# } #>
136143
}
@@ -154,11 +161,11 @@ namespace <#= Namespace #>
154161

155162
<# foreach(var p in t.Properties) { #>
156163
<# if (p.IsFixedSize) { #>
157-
offset += ObjectSegmentHelper.SerializeFixedLength<TTypeResolver, <#= p.Type #>>(ref targetBytes, startOffset, offset, <#= p.Index #>, __binaryLastIndex, __originalBytes, __extraFixedBytes, __tracker);
164+
offset += ObjectSegmentHelper.SerializeFixedLength<<#= resolverName #>, <#= p.Type #>>(ref targetBytes, startOffset, offset, <#= p.Index #>, __binaryLastIndex, __originalBytes, __extraFixedBytes, __tracker);
158165
<# } else if(p.IsCacheSegment) { #>
159-
offset += ObjectSegmentHelper.SerializeCacheSegment<TTypeResolver, <#= p.Type #>>(ref targetBytes, startOffset, offset, <#= p.Index #>, ref _<#= p.Name #>);
166+
offset += ObjectSegmentHelper.SerializeCacheSegment<<#= resolverName #>, <#= p.Type #>>(ref targetBytes, startOffset, offset, <#= p.Index #>, ref _<#= p.Name #>);
160167
<# } else { #>
161-
offset += ObjectSegmentHelper.SerializeSegment<TTypeResolver, <#= p.Type #>>(ref targetBytes, startOffset, offset, <#= p.Index #>, _<#= p.Name #>);
168+
offset += ObjectSegmentHelper.SerializeSegment<<#= resolverName #>, <#= p.Type #>>(ref targetBytes, startOffset, offset, <#= p.Index #>, _<#= p.Name #>);
162169
<# } } #>
163170

164171
return ObjectSegmentHelper.WriteSize(ref targetBytes, startOffset, offset, <#= t.LastIndex #>);

0 commit comments

Comments
 (0)