/// <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(); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="datafile"></param> /// <param name="offset"></param> /// <param name="tid"></param> /// <param name="dataTime"></param> /// <param name="type"></param> /// <returns></returns> public static object Read <T>(this DataFileSeriserbase datafile, long offset, int tid, DateTime dataTime, QueryValueMatchType type) { int timetick = 0; int index = 0; using (var data = datafile.ReadTagDataBlock(tid, offset, dataTime, out timetick, out index)) { return(DeCompressDataBlockValue <T>(data, dataTime, timetick, type, new Func <byte, object>((tp) => { TagHisValue <T> oval = TagHisValue <T> .Empty; 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.IsEmpty()); } else { //往后读第一个有效值 do { dindex++; var datas = datafile.ReadTagDataBlock(tid, offset, dindex, out ttick); if (datas == null) { return null; } oval = DeCompressDataBlockRawValue <T>(datas, 1); }while (oval.IsEmpty()); } return oval; }))); } }