You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
3.5 KiB
144 lines
3.5 KiB
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ProtoCSStruct
|
|
{
|
|
public class ProtoMessageField
|
|
{
|
|
public FieldType FieldType;
|
|
|
|
//如果是message或enum,类型的名字
|
|
public string TypeName;
|
|
|
|
//字段名字
|
|
public string Name;
|
|
public int Number;
|
|
|
|
|
|
public bool IsRepeated;
|
|
public int RepeatedCount;
|
|
public int StringLength;//字符串长度
|
|
|
|
//当类型是enum的时候有效
|
|
public ProtoEnum Enum;
|
|
|
|
//当类型是message的时候有效
|
|
public ProtoMessage Message;
|
|
|
|
//cs里生成的Repeated类型名字
|
|
public string RepeatedFiledTypeNameInCSharp;
|
|
public int RepeatedFiledBuffSize;
|
|
|
|
public bool IsPrimitiveValueTypeField()
|
|
{
|
|
if(FieldType == FieldType.Int32
|
|
|| FieldType == FieldType.UInt32
|
|
|| FieldType == FieldType.Int64
|
|
|| FieldType == FieldType.UInt64)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
public string GetFiledTypeNameInCSharp()
|
|
{
|
|
if (FieldType == FieldType.Bool)
|
|
{
|
|
return "bool";
|
|
}
|
|
|
|
if (FieldType == FieldType.Int32)
|
|
{
|
|
return "int";
|
|
}
|
|
|
|
if (FieldType == FieldType.UInt32)
|
|
{
|
|
return "uint";
|
|
}
|
|
|
|
if (FieldType == FieldType.Int64)
|
|
{
|
|
return "long";
|
|
}
|
|
|
|
if (FieldType == FieldType.UInt64)
|
|
{
|
|
return "ulong";
|
|
}
|
|
|
|
if (FieldType == FieldType.Bytes)
|
|
{
|
|
return "byte";
|
|
}
|
|
|
|
if (FieldType == FieldType.String)
|
|
{
|
|
return FieldTypeUtils.GetFixedStringClassName(StringLength);
|
|
}
|
|
|
|
if(FieldType == FieldType.Enum || FieldType == FieldType.Message)
|
|
{
|
|
return TypeName;
|
|
}
|
|
|
|
ExceptionUtils.Throw("protocsstruct filed type error type {0} filed {1}"
|
|
, TypeName, Name);
|
|
|
|
return "";
|
|
}
|
|
|
|
public string GetRepeatedFiledTypeNameInCSharp()
|
|
{
|
|
string repeatedTypeName = "";
|
|
|
|
if (FieldType == FieldType.Bool)
|
|
{
|
|
repeatedTypeName = "Bool";
|
|
}
|
|
|
|
if (FieldType == FieldType.Int32)
|
|
{
|
|
repeatedTypeName = "Int";
|
|
}
|
|
|
|
if (FieldType == FieldType.UInt32)
|
|
{
|
|
repeatedTypeName = "Uint";
|
|
}
|
|
|
|
if (FieldType == FieldType.Int64)
|
|
{
|
|
repeatedTypeName = "Long";
|
|
}
|
|
|
|
if (FieldType == FieldType.UInt64)
|
|
{
|
|
repeatedTypeName = "Ulong";
|
|
}
|
|
|
|
if (FieldType == FieldType.Bytes)
|
|
{
|
|
repeatedTypeName = "Byte";
|
|
}
|
|
|
|
if (FieldType == FieldType.Enum
|
|
|| FieldType == FieldType.Message)
|
|
{
|
|
repeatedTypeName = TypeName;
|
|
}
|
|
|
|
if (FieldType == FieldType.String)
|
|
{
|
|
repeatedTypeName = FieldTypeUtils.GetFixedStringClassName(StringLength);
|
|
}
|
|
|
|
RepeatedFiledTypeNameInCSharp = FieldTypeUtils.GetRepeatedMessageClassName(repeatedTypeName, RepeatedCount);
|
|
|
|
return RepeatedFiledTypeNameInCSharp;
|
|
}
|
|
}
|
|
}
|
|
|