コード例 #1
0
ファイル: CSharpFormat.cs プロジェクト: jeckbjy/proto
 public static string GetFieldType(Field field)
 {
     if (field.container == Container.NONE)
         return GetDataType(field.value);
     else if (field.container == Container.MAP || field.container == Container.HASH_MAP)
         return String.Format("{0}<{1}, {2}>", GetContainerType(field.container), GetDataType(field.key), GetDataType(field.value));
     else
         return String.Format("{0}<{1}>", GetContainerType(field.container), GetDataType(field.value));
 }
コード例 #2
0
ファイル: LuaProtoWriter.cs プロジェクト: jeckbjy/proto
 private string GetContainer(Field field)
 {
     switch(field.container)
     {
         case Container.NONE:
             return "PROTO_NIL";
         case Container.VEC:
         case Container.LIST:
             return "PROTO_VEC";
         case Container.SET:
         case Container.HASH_SET:
             return "PROTO_SET";
         case Container.MAP:
         case Container.HASH_MAP:
             return "PROTO_MAP";
         default:
             return "nil";
     }
 }
コード例 #3
0
ファイル: Proto.cs プロジェクト: jeckbjy/proto
        private Field ParseStructField(string data, int line)
        {
            Field field = new Field();
            string[] tokens;
            // (deprecated) (container)type name (= index)
            string type_name;
            if (data.IndexOf('=') != -1)
            {
                tokens = data.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                field.index = UInt32.Parse(tokens[1]);
                type_name = tokens[0].Trim();
            }
            else
            {
                type_name = data;
            }
            // check deprecated
            if(type_name.StartsWith("deprecated "))
            {
                field.deprecated = true;
                type_name = type_name.Substring("deprecated ".Length);
            }
            // parse type name
            int index = type_name.LastIndexOf('*');
            if (index != -1)
                field.pointer = true;
            // 解析类型和name,最后一个必然是name
            tokens = type_name.Split(new char[] { ' ', '<', ',', '>', '*', ':' }, StringSplitOptions.RemoveEmptyEntries);
            if (tokens.Length < 2)
                throw new Exception("bad field");
            field.container = Field.ParseContainer(tokens[0]);
            if(tokens.Length != field.tokenSize)
                throw new Exception("bad field");
            field.name = tokens[tokens.Length - 1];
            field.value.SetName(tokens[tokens.Length - 2]);
            if(field.container == Container.MAP || field.container == Container.HASH_MAP)
            {
                field.key.SetName(tokens[1]);
            }

            return field;
        }
コード例 #4
0
ファイル: Proto.cs プロジェクト: jeckbjy/proto
        private Field ParseEnumField(string data, int line)
        {
            Field field = new Field();
            string[] tokens = data.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
            if (tokens.Length == 0 || tokens.Length > 2)
                throw new Exception("bad enum field" + line + data);

            field.name = tokens[0].Trim();
            if(tokens.Length == 2)
                field.index = UInt32.Parse(tokens[1]);

            return field;
        }