Пример #1
0
        /**
         * 1行分のフィールドからログデータを取得する
         * @input fields:
         * @output  取得したログデータ
         *  Sample
         *  log,type: Single,id: 1,lane: 1,time: 0.0026799596,text: "test1"
         */
        private static LogData GetMemLogText(Dictionary <string, string> fields)
        {
            LogData log = new LogData();

            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);
        }
Пример #2
0
        public LogData(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);
        }
Пример #3
0
        //
        // 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);
        }
Пример #4
0
        /**
         * バイナリログデータを読み込む
         */
        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);
        }