/** * 1行分のフィールドからログデータを取得する * @input fields: * @output 取得したログデータ * Sample * log,type: Single,id: 1,lane: 1,time: 0.0026799596,text: "test1" */ private static MemLogData GetMemLogText(Dictionary <string, string> fields) { MemLogData log = new MemLogData(); foreach (KeyValuePair <string, string> kvp in fields) { if (kvp.Value != null) { switch (kvp.Key.ToLower()) { case "type": switch (kvp.Value.ToLower()) { case "single": // 単体ログ log.Type = MemLogType.Point; break; case "areastart": // 範囲開始 log.Type = MemLogType.Range; break; case "areaend": // 範囲終了 log.Type = MemLogType.Range; break; case "value": // 値 log.Type = MemLogType.Value; break; } break; case "id": log.ID = UInt32.Parse(kvp.Value); break; case "lane": log.LaneId = Byte.Parse(kvp.Value); break; case "time": log.Time1 = Double.Parse(kvp.Value); break; case "text": log.Text = kvp.Value; break; case "color": log.Color = Convert.ToUInt32(kvp.Value, 16); break; case "detail": log.Detail = MemDetailData.Deserialize(kvp.Value); break; } } } return(log); }
public MemLogData(UInt32 id, LogType type, byte laneId, double time1, double time2, string text, string detailText) { this.id = id; this.type = (MemLogType)type; this.laneId = laneId; this.time1 = time1; this.time2 = time2; this.text = text; this.detail = MemDetailData.Deserialize(detailText); }
// // Constructor // // // Methods // /** * JSON形式の文字列をメモリ上のツリー構造に展開する * * @input jsonStr : JSON形式の文字列 * @output : メモリ上のツリー構造のオブジェクト */ public static MemDetailData Deserialize(string jsonStr) { if (jsonStr == null || jsonStr.Length == 0) { return(null); } char[] chars = jsonStr.ToCharArray(); int offset = 0; MemDetailData jsonData = new MemDetailData(); jsonData.Obj = GetJson(chars, ref offset); return(jsonData); }
/** * バイナリログデータを読み込む */ private void ReadLogDataBin(UFileStream fs) { MemLogData log = new MemLogData(); // ログID log.ID = fs.GetUInt32(); //ログタイプ bool isRangeEnd = false; LogDataType dataType = (LogDataType)fs.GetByte(); switch (dataType) { case LogDataType.Single: log.Type = MemLogType.Point; break; case LogDataType.RangeStart: log.Type = MemLogType.Range; break; case LogDataType.RangeEnd: // 同じレーンの Range タイプのログに結合する // todo isRangeEnd = true; break; case LogDataType.Value: log.Type = MemLogType.Value; break; } //表示レーンID log.LaneId = fs.GetUInt32(); //タイトルの長さ //タイトル log.Text = fs.GetSizeString(); // 範囲ログの終了タイプの場合、結合する //時間 Double time = fs.GetDouble(); if (log.Type == MemLogType.Range && isRangeEnd == true) { // 1つ前の Rangeタイプの Time2 に時間を設定 // todo return; } else { log.Time1 = time; } //ログデータ(詳細)のサイズ //ログデータ(詳細) if (log.Detail != null) { log.Detail = MemDetailData.Deserialize(fs.GetSizeString()); } // ログを追加する areaManager.AddLogData(log); }