コード例 #1
0
ファイル: DataFileInfo.cs プロジェクト: cdy816/mars
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="datafile"></param>
        /// <param name="offset"></param>
        /// <param name="tid"></param>
        /// <param name="dataTimes"></param>
        /// <param name="type"></param>
        /// <param name="res"></param>
        public static void Read <T>(this DataFileSeriserbase datafile, long offset, int tid, List <DateTime> dataTimes, QueryValueMatchType type, HisQueryResult <T> res)
        {
            int timetick = 0;
            var data     = datafile.ReadTagDataBlock2(tid, offset, dataTimes, out timetick);

            foreach (var vv in data)
            {
                var index = vv.Value.Item2;
                DeCompressDataBlockValue <T>(vv.Key, vv.Value.Item1, timetick, type, res, new Func <byte, object>((tp) => {
                    object oval = null;
                    int ttick   = 0;
                    int dindex  = index;
                    if (tp == 0)
                    {
                        //往前读最后一个有效值
                        do
                        {
                            dindex--;
                            if (dindex < 0)
                            {
                                return(TagHisValue <T> .Empty);
                            }
                            var datas = datafile.ReadTagDataBlock(tid, offset, dindex, out ttick);
                            if (datas == null)
                            {
                                return(null);
                            }
                            oval = DeCompressDataBlockRawValue <T>(datas, 0);
                        }while (oval == null);
                    }
                    else
                    {
                        //往后读第一个有效值
                        do
                        {
                            dindex++;

                            if (dindex > 47)
                            {
                                return(TagHisValue <T> .Empty);
                            }

                            var datas = datafile.ReadTagDataBlock(tid, offset, dindex, out ttick);
                            if (datas == null)
                            {
                                return(null);
                            }
                            oval = DeCompressDataBlockRawValue <T>(datas, 1);
                        }while (oval == null);
                    }
                    return(oval);
                }));
            }
            foreach (var vv in data)
            {
                vv.Key.Dispose();
            }
            data.Clear();
        }
コード例 #2
0
ファイル: DataFileInfo.cs プロジェクト: cdy816/mars
 /// <summary>
 ///
 /// </summary>
 /// <param name="datafile"></param>
 /// <param name="offset"></param>
 /// <param name="tid"></param>
 /// <param name="startTime"></param>
 /// <param name="endTime"></param>
 /// <param name="result"></param>
 public static void ReadAllValue <T>(this DataFileSeriserbase datafile, long offset, int tid, DateTime startTime, DateTime endTime, HisQueryResult <T> result)
 {
     //Stopwatch sw = new Stopwatch();
     //sw.Start();
     foreach (var vv in datafile.ReadTagDataBlock2(tid, offset, startTime, endTime))
     {
         DeCompressDataBlockAllValue(vv.Item1, vv.Item2, vv.Item3, vv.Item4, result);
         vv.Item1.Dispose();
     }
     //sw.Stop();
     //Debug.WriteLine("Read all value:" + sw.ElapsedMilliseconds + " file:" + datafile.FileName);
 }