예제 #1
0
        /**
         * ログデータを追加
         */
        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;
            }
        }
예제 #2
0
        /**
         * ログの本体部分を取得
         * <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);
        }
예제 #3
0
        /**
         * 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);
        }
예제 #4
0
 /**
  * ログを追加
  */
 public void AddLogData(MemLogData logData)
 {
     lastAddArea.AddLogData(logData);
 }
예제 #5
0
        /**
         * バイナリログデータを読み込む
         */
        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);
        }