/** * ログデータを追加 */ public void AddLogData(MemLogData logData) { if (logs == null) { logs = new List <MemLogData>(); } logs.Add(logData); // 開始、終了の時間を更新 // Start if (timeStart > logData.Time1) { timeStart = logData.Time1; } // End if (timeEnd < logData.Time2) { timeEnd = logData.Time2; } else if (timeEnd < logData.Time1) { timeEnd = logData.Time1; } }
/** * ログの本体部分を取得 * <body>~</body> の中の行をすべて取得する * */ private MemLogAreaManager GetLogDataText(StreamReader sr) { MemLogAreaManager manager = new MemLogAreaManager(); while (!sr.EndOfStream) { string line = sr.ReadLine().Trim(); Dictionary <string, string> fields = SplitLineStr(line); if (fields.Count == 0) { continue; } // 終了判定 if (line.Equals("</body>")) { return(manager); } else if (fields.ContainsKey("area")) { MemLogArea area = GetMemAreaText(fields, manager); manager.AddArea(area); } else if (fields.ContainsKey("log")) { MemLogData log = GetMemLogText(fields); manager.AddLogData(log); } } return(null); }
/** * 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 void AddLogData(MemLogData logData) { lastAddArea.AddLogData(logData); }
/** * バイナリログデータを読み込む */ 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); }