/** * バイナリログの本体部分を取得 * @input fs : ファイルオブジェクト */ private void ReadLogBodyBin(UFileStream fs) { while (!fs.EndOfStream()) { // 件数取得 int logNum = fs.GetInt32(); for (int i = 0; i < logNum; i++) { // 種類を取得 LogType type = (LogType)fs.GetByte(); if (type == LogType.Data) { ReadLogDataBin(fs); } else { ReadLogAreaBin(fs); } } } }
/** * バイナリログデータを読み込む */ private void ReadLogDataBin(UFileStream fs) { LogData log = new LogData(); // ログ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); }