feat: 在TType添加CollectionLevel,用于连续嵌套容器时生成解析代码
parent
6620cca6e1
commit
79940dcf09
|
|
@ -8,7 +8,6 @@ namespace Luban.Job.Cfg.TypeVisitors
|
|||
class CsJsonDeserialize : ITypeFuncVisitor<string, string, string>
|
||||
{
|
||||
public static CsJsonDeserialize Ins { get; } = new();
|
||||
public int Flag { get; set; }
|
||||
public string Accept(TBool type, string json, string x)
|
||||
{
|
||||
return $"{x} = {json}.GetBoolean();";
|
||||
|
|
@ -86,12 +85,12 @@ namespace Luban.Job.Cfg.TypeVisitors
|
|||
|
||||
public string Accept(TArray type, string json, string x)
|
||||
{
|
||||
Flag++;
|
||||
string _n = $"_n{Flag}";
|
||||
string __e = $"__e{Flag}";
|
||||
string __v = $"__v{Flag}";
|
||||
string __json = $"__json{Flag}";
|
||||
string __index = $"__index{Flag}";
|
||||
int level = type.CollectionLevel;
|
||||
string _n = $"_n{level}";
|
||||
string __e = $"__e{level}";
|
||||
string __v = $"__v{level}";
|
||||
string __json = $"__json{level}";
|
||||
string __index = $"__index{level}";
|
||||
string typeStr = $"{type.ElementType.Apply(CsDefineTypeName.Ins)}[{_n}]";
|
||||
if (type.Dimension > 1)
|
||||
{
|
||||
|
|
@ -110,21 +109,19 @@ namespace Luban.Job.Cfg.TypeVisitors
|
|||
|
||||
public string Accept(TList type, string json, string x)
|
||||
{
|
||||
Flag++;
|
||||
string _n = $"_n{Flag}";
|
||||
string __e = $"__e{Flag}";
|
||||
string __v = $"__v{Flag}";
|
||||
string __json = $"__json{Flag}";
|
||||
int level = type.CollectionLevel;
|
||||
string __e = $"__e{level}";
|
||||
string __v = $"__v{level}";
|
||||
string __json = $"__json{level}";
|
||||
return $"{{ var {__json} = {json}; {x} = new {type.CsUnderingDefineType()}({__json}.GetArrayLength()); foreach(JsonElement {__e} in {__json}.EnumerateArray()) {{ {type.ElementType.CsUnderingDefineType()} {__v}; {type.ElementType.Apply(this, $"{__e}", $"{__v}")} {x}.Add({__v}); }} }}";
|
||||
}
|
||||
|
||||
public string Accept(TSet type, string json, string x)
|
||||
{
|
||||
Flag++;
|
||||
string _n = $"_n{Flag}";
|
||||
string __e = $"__e{Flag}";
|
||||
string __v = $"__v{Flag}";
|
||||
string __json = $"__json{Flag}";
|
||||
int level = type.CollectionLevel;
|
||||
string __e = $"__e{level}";
|
||||
string __v = $"__v{level}";
|
||||
string __json = $"__json{level}";
|
||||
return $"{{ var {__json} = {json}; {x} = new {type.CsUnderingDefineType()}({__json}.GetArrayLength()); foreach(JsonElement {__e} in {__json}.EnumerateArray()) {{ {type.ElementType.CsUnderingDefineType()} {__v}; {type.ElementType.Apply(this, $"{__e}", $"{__v}")} {x}.Add({__v}); }} }}";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ namespace Luban.Job.Cfg.TypeVisitors
|
|||
class CsUnityJsonDeserialize : ITypeFuncVisitor<string, string, string>
|
||||
{
|
||||
public static CsUnityJsonDeserialize Ins { get; } = new();
|
||||
public int Flag { get; set; }
|
||||
|
||||
public string Accept(TBool type, string json, string x)
|
||||
{
|
||||
|
|
@ -87,12 +86,12 @@ namespace Luban.Job.Cfg.TypeVisitors
|
|||
|
||||
public string Accept(TArray type, string json, string x)
|
||||
{
|
||||
Flag++;
|
||||
string _n = $"_n{Flag}";
|
||||
string __e = $"__e{Flag}";
|
||||
string __v = $"__v{Flag}";
|
||||
string __json = $"__json{Flag}";
|
||||
string __index = $"__index{Flag}";
|
||||
int level = type.CollectionLevel;
|
||||
string _n = $"_n{level}";
|
||||
string __e = $"__e{level}";
|
||||
string __v = $"__v{level}";
|
||||
string __json = $"__json{level}";
|
||||
string __index = $"__index{level}";
|
||||
string tempJsonName = __json;
|
||||
string typeStr = $"{type.ElementType.Apply(CsDefineTypeName.Ins)}[{_n}]";
|
||||
if (type.Dimension > 1)
|
||||
|
|
@ -112,20 +111,20 @@ namespace Luban.Job.Cfg.TypeVisitors
|
|||
|
||||
public string Accept(TList type, string json, string x)
|
||||
{
|
||||
Flag++;
|
||||
string __e = $"__e{Flag}";
|
||||
string __v = $"__v{Flag}";
|
||||
string __json = $"__json{Flag}";
|
||||
int level = type.CollectionLevel;
|
||||
string __e = $"__e{level}";
|
||||
string __v = $"__v{level}";
|
||||
string __json = $"__json{level}";
|
||||
string tempJsonName = __json;
|
||||
return $"{{ var {tempJsonName} = {json}; if(!{tempJsonName}.IsArray) {{ throw new SerializationException(); }} {x} = new {type.CsUnderingDefineType()}({tempJsonName}.Count); foreach(JSONNode {__e} in {tempJsonName}.Children) {{ {type.ElementType.CsUnderingDefineType()} {__v}; {type.ElementType.Apply(this, __e, __v)} {x}.Add({__v}); }} }}";
|
||||
}
|
||||
|
||||
public string Accept(TSet type, string json, string x)
|
||||
{
|
||||
Flag++;
|
||||
string __e = $"__e{Flag}";
|
||||
string __v = $"__v{Flag}";
|
||||
string __json = $"__json{Flag}";
|
||||
int level = type.CollectionLevel;
|
||||
string __e = $"__e{level}";
|
||||
string __v = $"__v{level}";
|
||||
string __json = $"__json{level}";
|
||||
string tempJsonName = __json;
|
||||
return $"{{ var {tempJsonName} = {json}; if(!{tempJsonName}.IsArray) {{ throw new SerializationException(); }} {x} = new {type.CsUnderingDefineType()}(/*{tempJsonName}.Count*/); foreach(JSONNode {__e} in {tempJsonName}.Children) {{ {type.ElementType.CsUnderingDefineType()} {__v}; {type.ElementType.Apply(this, __e, __v)} {x}.Add({__v}); }} }}";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ namespace Luban.Job.Common.TypeVisitors
|
|||
class CsUnderingDeserializeVisitor : ITypeFuncVisitor<string, string, string>
|
||||
{
|
||||
public static CsUnderingDeserializeVisitor Ins { get; } = new CsUnderingDeserializeVisitor();
|
||||
public int Flag { get; set; }
|
||||
|
||||
public string Accept(TBool type, string bufName, string fieldName)
|
||||
{
|
||||
|
|
@ -87,10 +86,10 @@ namespace Luban.Job.Common.TypeVisitors
|
|||
|
||||
public string Accept(TArray type, string bufName, string fieldName)
|
||||
{
|
||||
Flag++;
|
||||
string __n = $"__n{Flag}";
|
||||
string __e = $"__e{Flag}";
|
||||
string __index = $"__index{Flag}";
|
||||
int level = type.CollectionLevel;
|
||||
string __n = $"__n{level}";
|
||||
string __e = $"__e{level}";
|
||||
string __index = $"__index{level}";
|
||||
string typeStr = $"{type.ElementType.Apply(CsDefineTypeName.Ins)}[{__n}]";
|
||||
if (type.Dimension > 1)
|
||||
{
|
||||
|
|
@ -109,19 +108,19 @@ namespace Luban.Job.Common.TypeVisitors
|
|||
|
||||
public string Accept(TList type, string bufName, string fieldName)
|
||||
{
|
||||
Flag++;
|
||||
string n = $"n{Flag}";
|
||||
string _e = $"_e{Flag}";
|
||||
string i = $"i{Flag}";
|
||||
int level = type.CollectionLevel;
|
||||
string n = $"n{level}";
|
||||
string _e = $"_e{level}";
|
||||
string i = $"i{level}";
|
||||
return $"{{int {n} = System.Math.Min({bufName}.ReadSize(), {bufName}.Size);{fieldName} = new {type.Apply(CsDefineTypeName.Ins)}({n});for(var {i} = 0 ; {i} < {n} ; {i}++) {{ {type.ElementType.Apply(CsDefineTypeName.Ins)} {_e}; {type.ElementType.Apply(this, bufName, $"{_e}")} {fieldName}.Add({_e});}}}}";
|
||||
}
|
||||
|
||||
public string Accept(TSet type, string bufName, string fieldName)
|
||||
{
|
||||
Flag++;
|
||||
string n = $"n{Flag}";
|
||||
string _e = $"_e{Flag}";
|
||||
string i = $"i{Flag}";
|
||||
int level = type.CollectionLevel;
|
||||
string n = $"n{level}";
|
||||
string _e = $"_e{level}";
|
||||
string i = $"i{level}";
|
||||
return $"{{int {n} = System.Math.Min({bufName}.ReadSize(), {bufName}.Size);{fieldName} = new {type.Apply(CsDefineTypeName.Ins)}(/*{n} * 3 / 2*/);for(var {i} = 0 ; {i} < {n} ; {i}++) {{ {type.ElementType.Apply(CsDefineTypeName.Ins)} {_e}; {type.ElementType.Apply(this, bufName, $"{_e}")} {fieldName}.Add({_e});}}}}";
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ namespace Luban.Job.Common.Types
|
|||
|
||||
public override string TypeName => "array";
|
||||
public int Dimension { get; } = 1;
|
||||
public TType FinalElementType { get; }
|
||||
|
||||
private TArray(bool isNullable, Dictionary<string, string> tags, TType elementType) : base(isNullable, tags)
|
||||
{
|
||||
|
|
@ -24,11 +23,16 @@ namespace Luban.Job.Common.Types
|
|||
if (!elementType.IsCollection)
|
||||
{
|
||||
FinalElementType = ElementType;
|
||||
CollectionLevel = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
CollectionLevel = ElementType.CollectionLevel + 1;
|
||||
FinalElementType = ElementType.FinalElementType;
|
||||
}
|
||||
if (ElementType.TypeName == "array")
|
||||
{
|
||||
Dimension = (ElementType as TArray).Dimension + 1;
|
||||
FinalElementType = (ElementType as TArray).FinalElementType;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,16 @@ namespace Luban.Job.Common.Types
|
|||
{
|
||||
ElementType = elementType;
|
||||
IsArrayList = isArrayList;
|
||||
if (!elementType.IsCollection)
|
||||
{
|
||||
FinalElementType = ElementType;
|
||||
CollectionLevel = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
CollectionLevel = ElementType.CollectionLevel + 1;
|
||||
FinalElementType = ElementType.FinalElementType;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool TryParseFrom(string s)
|
||||
|
|
|
|||
|
|
@ -22,6 +22,16 @@ namespace Luban.Job.Common.Types
|
|||
{
|
||||
ElementType = elementType;
|
||||
IsOrderSet = isOrderSet;
|
||||
if (!elementType.IsCollection)
|
||||
{
|
||||
FinalElementType = ElementType;
|
||||
CollectionLevel = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
CollectionLevel = ElementType.CollectionLevel + 1;
|
||||
FinalElementType = ElementType.FinalElementType;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool TryParseFrom(string s)
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ namespace Luban.Job.Common.Types
|
|||
}
|
||||
|
||||
public abstract string TypeName { get; }
|
||||
public TType FinalElementType { get; protected set; }
|
||||
public int CollectionLevel { get; protected set; }
|
||||
|
||||
public bool HasTag(string attrName)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue