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)); }
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; } } }