示例#1
0
        private object _constructUnionCell(string content, bool isFloat = false)
        {
            const string FIX_EVERY_SPLIT = ",";
            const string FIX_GROW_SPLIT  = ";";

            if (string.IsNullOrEmpty(content) || content.Equals("-"))
            {
                content = 0.ToString ();
            }

            ProtoTable.UnionCell unionCell = new ProtoTable.UnionCell();

            if (content.Contains(FIX_EVERY_SPLIT))
            {
                unionCell.valueType = ProtoTable.UnionCellType.union_everyvalue;
                ProtoTable.EveryValue values = new ProtoTable.EveryValue();

                var stringValues = content.Split(FIX_EVERY_SPLIT[0]);
                foreach (var sv in stringValues)
                {
                    values.everyValues.Add(_convertToInt(sv, isFloat));
                }

                unionCell.eValues = values;
            }
            else if (content.Contains(FIX_GROW_SPLIT))
            {
                unionCell.valueType = ProtoTable.UnionCellType.union_fixGrow;

                var stringValues = content.Split(FIX_GROW_SPLIT[0]);
                if (stringValues.Length != 2)
                {
                    Debug.LogErrorFormat("[GenerateText] union format error {0}", content);
                    return(null);
                }

                unionCell.fixInitValue = _convertToInt(stringValues[0], isFloat);
                unionCell.fixLevelGrow = _convertToInt(stringValues[1], isFloat);
            }
            else
            {
                unionCell.valueType = ProtoTable.UnionCellType.union_fix;
                unionCell.fixValue  = _convertToInt(content, isFloat);
            }

            return((object)(unionCell));
        }
示例#2
0
        public void Parse(ProtoBuf.ProtoReader source)
        {
            int fieldNumber = 0;

            while ((fieldNumber = source.ReadFieldHeader()) > 0)
            {
                switch (fieldNumber)
                {
                default:
                    source.SkipField();
                    break;


                case 1: //valueType LABEL_REQUIRED TYPE_ENUM .ProtoTable.UnionCellType TwosComplement
                    valueType = (ProtoTable.UnionCellType)source.ReadInt32();
                    break;

                case 2: //eValues LABEL_OPTIONAL TYPE_MESSAGE .ProtoTable.EveryValue TwosComplement
                    eValues = new ProtoTable.EveryValue();
                    ProtoBuf.SubItemToken eValuestoken = ProtoBuf.ProtoReader.StartSubItem(source);
                    eValues.Parse(source);
                    ProtoBuf.ProtoReader.EndSubItem(eValuestoken, source);
                    break;

                case 3: //fixValue LABEL_OPTIONAL TYPE_INT32  TwosComplement
                    fixValue = source.ReadInt32();
                    break;

                case 4: //fixInitValue LABEL_OPTIONAL TYPE_INT32  TwosComplement
                    fixInitValue = source.ReadInt32();
                    break;

                case 5: //fixLevelGrow LABEL_OPTIONAL TYPE_INT32  TwosComplement
                    fixLevelGrow = source.ReadInt32();
                    break;
                }
            }
        }