//==============================================================
// Copyright (C) 2019 Inc. All rights reserved.
//
//==============================================================
// Create by 种道洋 at 2019/12/27 18:45:02.
// Version 1.0
// 种道洋
//==============================================================
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace Cdy.Tag
{
///
///
///
public class NoneCompressUnit2 : CompressUnitbase2
{
///
///
///
public override int TypeCode => 0;
///
///
///
public override string Desc => "无压缩";
///
///
///
///
public override CompressUnitbase2 Clone()
{
return new NoneCompressUnit2();
}
///
///
///
///
///
///
///
///
///
public override long Compress(IMemoryBlock source, long sourceAddr, MarshalMemoryBlock target, long targetAddr, long size)
{
// LoggerService.Service.Erro("NoneCompressUnit", "目标地址:"+targetAddr +" 数值地址: " + (targetAddr+10) +" 变量个数: "+ (size - this.QulityOffset));
target.WriteDatetime(targetAddr,this.StartTime);
target.Write((int)(size - this.QulityOffset));//写入值的个数
target.Write(TimeTick);
if (size > 0)
source.CopyTo(target, sourceAddr, targetAddr + 16, size);
return size + 16;
}
///
/// 读取时间戳
///
///
///
///
///
///
private Dictionary> ReadTimeQulity(MarshalMemoryBlock source, int sourceAddr,out int valueCount, out DateTime startTime)
{
source.Position = sourceAddr;
startTime = source.ReadDateTime();
//读取值的个数
int qoffset = source.ReadInt();
valueCount = qoffset;
//读取时间单位
int timeTick = source.ReadInt();
var times = source.ReadUShorts(source.Position, qoffset);
Dictionary> timeQulities = new Dictionary>(qoffset);
for(int i=0;i0)
{
timeQulities.Add(i, new Tuple(startTime, false));
}
else
{
timeQulities.Add(i, new Tuple(startTime.AddMilliseconds(times[i]*timeTick), true));
}
}
//for(int i=0;i 0 && vtmp == 0)
// {
// timeQulities.Add(i, new Tuple(startTime.AddMilliseconds(vtmp), false));
// }
// else
// {
// timeQulities.Add(i, new Tuple(startTime.AddMilliseconds(vtmp), true));
// }
//}
return timeQulities;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 3 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadBytes(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 3 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadBytes(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
//DateTime time;
//int valuecount = 0;
//var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time);
////读取质量戳,时间戳2个字节,值1个字节,质量戳1个字节
//var qq = source.ReadBytes(valuecount * 3+10, qs.Count);
//var valaddr = valuecount * 2 + 10;
//int i = 0;
//int rcount = 0;
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// var bval = source.ReadByte(valaddr + i);
// result.Add(bval, vv.Value.Item1, qq[vv.Key]);
// rcount++;
// }
// i++;
//}
//return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 4 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadShorts(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
//DateTime time;
//int valuecount = 0;
//var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time);
////读取质量戳,时间戳2个字节,值2个字节,质量戳1个字节
//var qq = source.ReadBytes(valuecount * 4+10, qs.Count);
//var valaddr = valuecount * 2+10;
//int i = 0;
//int rcount = 0;
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// var bval = source.ReadShort(valaddr + i * 2);
// result.Add(bval, vv.Value.Item1, qq[vv.Key]);
// rcount++;
// }
// i++;
//}
//return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 4 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadUShorts(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
//DateTime time;
//int valuecount = 0;
//var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time);
////读取质量戳,时间戳2个字节,值2个字节,质量戳1个字节
//var qq = source.ReadBytes(valuecount * 4+10, qs.Count);
//var valaddr = valuecount * 2+10;
//int i = 0;
//int rcount = 0;
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// var bval = source.ReadUShort(valaddr + i * 2);
// result.Add(bval, vv.Value.Item1, qq[vv.Key]);
// rcount++;
// }
// i++;
//}
//return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 6 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadInts(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
//DateTime time;
//int valuecount = 0;
//var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time);
////读取质量戳,时间戳2个字节,值4个字节,质量戳1个字节
//var qq = source.ReadBytes(valuecount * 6+10, qs.Count);
//var valaddr = valuecount * 2+10;
//int i = 0;
//int rcount = 0;
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// var bval = source.ReadInt(valaddr + i * 2);
// result.Add(bval, vv.Value.Item1, qq[vv.Key]);
// rcount++;
// }
// i++;
//}
//return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 6 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadUInts(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
//DateTime time;
//int valuecount = 0;
//var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time);
////读取质量戳,时间戳2个字节,值4个字节,质量戳1个字节
//var qq = source.ReadBytes(valuecount * 6+10, qs.Count);
//var valaddr = valuecount * 2+10;
//int i = 0;
//int rcount = 0;
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// var bval = source.ReadUInt(valaddr + i * 2);
// result.Add(bval, vv.Value.Item1, qq[vv.Key]);
// rcount++;
// }
// i++;
//}
//return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 10 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadLongs(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
//DateTime time;
//int valuecount = 0;
//var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time);
////读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
//var qq = source.ReadBytes(valuecount * 10+10, qs.Count);
//var valaddr = valuecount * 2+10;
//int i = 0;
//int rcount = 0;
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// var bval = source.ReadLong(valaddr + i * 2);
// result.Add(bval, vv.Value.Item1, qq[vv.Key]);
// rcount++;
// }
// i++;
//}
//return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 10 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadULongs(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
//DateTime time;
//int valuecount = 0;
//var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time);
////读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
//var qq = source.ReadBytes(valuecount * 10+10, qs.Count);
//var valaddr = valuecount * 2+10;
//int i = 0;
//int rcount = 0;
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// var bval = source.ReadULong(valaddr + i * 2);
// result.Add(bval, vv.Value.Item1, qq[vv.Key]);
// rcount++;
// }
// i++;
//}
//return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 6 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadFloats(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
//DateTime time;
//int valuecount = 0;
//var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time);
////读取质量戳,时间戳2个字节,值4个字节,质量戳1个字节
//var qq = source.ReadBytes(valuecount * 6+10, qs.Count);
//var valaddr = valuecount * 2+10;
//int i = 0;
//int rcount = 0;
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// var bval = source.ReadFloat(valaddr + i * 2);
// result.Add(bval, vv.Value.Item1, qq[vv.Key]);
// rcount++;
// }
// i++;
//}
//return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 10 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadDoubleByMemory(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals.Span[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr,out valuecount, out time);
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 10 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadDateTimes(valaddr, valuecount);
int i = 0;
int rcount = 0;
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
return rcount;
//DateTime time;
//int valuecount = 0;
//var qs = ReadTimeQulity(source, sourceAddr, timeTick, out valuecount, out time);
////读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
//var qq = source.ReadBytes(valuecount * 10+10, qs.Count);
//var valaddr = valuecount * 2+10;
//int i = 0;
//int rcount = 0;
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// var bval = source.ReadDateTime(valaddr + i * 2);
// result.Add(bval, vv.Value.Item1, qq[vv.Key]);
// rcount++;
// }
// i++;
//}
//return rcount;
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr,out valuecount, out time);
var valaddr = qs.Count * 2+ 16 + sourceAddr;
int i = 0;
int rcount = 0;
List vals = new List();
source.Position = valaddr;
for (int ic=0;ic< valuecount; ic++)
{
vals.Add(source.ReadString());
}
var qq = source.ReadBytes(valuecount);
for (i = 0; i < valuecount; i++)
{
if (qs[i].Item2 && qq[i] < 100 && qs[i].Item1 >= startTime && qs[i].Item1 < endTime)
{
result.Add(vals[i], qs[i].Item1, qq[i]);
rcount++;
}
}
//foreach (var vv in qs)
//{
// if (qq[vv.Key] < 100)
// {
// if (vv.Value.Item1 < startTime || vv.Value.Item1 > endTime || !vv.Value.Item2)
// {
// continue;
// }
// result.Add(ls[i],vv.Value.Item1,qq[vv.Key]);
// //var bval = source.ReadUShort(valaddr + i * 8);
// //result.Add(bval, vv.Key, qq[vv.Value]);
// rcount++;
// }
// i++;
//}
return rcount;
}
///
///
///
///
///
///
///
///
///
public bool? DeCompressBoolValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressBoolValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressBoolValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
var qq = source.ReadBytes(valuecount * 3+16+sourceAddr, valuecount);
var vv = qs.ToArray();
var valaddr = qs.Count * 2+ 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadByte(valaddr + icount) > 0;
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadByte(valaddr + icount) > 0;
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadByte(valaddr + icount1) > 0;
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadByte(valaddr + icount) > 0;
result.Add(val, time1, qq[skey.Key]);
break;
}
else
{
val = source.ReadByte(valaddr + icount1) > 0;
result.Add(val, time1, qq[snext.Key]);
break;
}
}
count++;
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadByte(valaddr + icount1) > 0;
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
}
}
return count;
}
///
///
///
///
///
///
///
///
///
public byte? DeCompressByteValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressByteValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressByteValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr,out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 3+ 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2+ 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
//for (int i = 0; i < vv.Length - 1; i++)
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadByte(valaddr + icount);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadByte(valaddr + icount);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadByte(valaddr + icount1);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadByte(valaddr + icount);
result.Add(val, time1, qq[skey.Key]);
break;
}
else
{
val = source.ReadByte(valaddr + icount1);
result.Add(val, time1, qq[snext.Key]);
break;
}
}
count++;
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadByte(valaddr + icount1);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
}
}
return count;
}
///
///
///
///
///
///
///
///
///
public DateTime? DeCompressDateTimeValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressDateTimeValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressDateTimeValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr,out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 10+ 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2+ 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
// for (int i = 0; i < vv.Length - 1; i++)
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadDateTime(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadDateTime(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadDateTime(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadDateTime(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
break;
}
else
{
val = source.ReadDateTime(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
break;
}
}
count++;
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadDateTime(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
}
}
return count;
}
///
///
///
///
///
///
///
///
///
public double? DeCompressDoubleValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressDoubleValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressDoubleValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 10+ 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2+ 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
//for (int i = 0; i < vv.Length - 1; i++)
while(icount (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 <= skey.Value.Item1)
{
var val = source.ReadDouble(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadDouble(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadDouble(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadDouble(valaddr + icount * 8);
var sval2 = source.ReadDouble(valaddr + icount1 * 8);
var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
result.Add(val1, time1, 0);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadDouble(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadDouble(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadDouble(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
}
else
{
val = source.ReadDouble(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadDouble(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
icount = icount1;
}
}
return count;
}
public float? DeCompressFloatValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressFloatValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if(count>0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressFloatValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr,out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 6 + 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2 + 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 <= skey.Value.Item1)
{
var val = source.ReadFloat(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadFloat(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadFloat(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadFloat(valaddr + icount * 4);
var sval2 = source.ReadFloat(valaddr + icount1 * 4);
var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
result.Add((float)val1, time1, 0);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadFloat(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadFloat(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadFloat(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
}
else
{
val = source.ReadFloat(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadFloat(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
icount = icount1;
}
}
//foreach (var time1 in time)
//{
// for (int i = 0; i < vv.Length - 1; i++)
// {
// var skey = vv[i];
// var snext = vv[i + 1];
// if (time1 == skey.Value.Item1)
// {
// var val = source.ReadFloat(valaddr + i*4);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// }
// else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
// {
// switch (type)
// {
// case QueryValueMatchType.Previous:
// var val = source.ReadFloat(valaddr + i * 4);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// case QueryValueMatchType.After:
// val = source.ReadFloat(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// case QueryValueMatchType.Linear:
// if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
// {
// var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
// var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
// var sval1 = source.ReadFloat(valaddr + i * 4);
// var sval2 = source.ReadFloat(valaddr + (i + 1) * 4);
// var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
// result.Add((float)val1, time1, 0);
// }
// else if (qq[skey.Key] < 20)
// {
// val = source.ReadFloat(valaddr + i * 4);
// result.Add(val, time1, qq[skey.Key]);
// }
// else if (qq[snext.Key] < 20)
// {
// val = source.ReadFloat(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// }
// else
// {
// result.Add(0, time1, (byte)QualityConst.Null);
// }
// count++;
// break;
// case QueryValueMatchType.Closed:
// var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
// var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
// if (pval < fval)
// {
// val = source.ReadFloat(valaddr + i * 4);
// result.Add(val, time1, qq[skey.Key]);
// }
// else
// {
// val = source.ReadFloat(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// }
// count++;
// break;
// }
// break;
// }
// else if (time1 == snext.Value.Item1)
// {
// var val = source.ReadFloat(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// }
// }
//}
return count;
}
///
///
///
///
///
///
///
///
///
public int? DeCompressIntValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressIntValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressIntValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 6 + 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2 + 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 <= skey.Value.Item1)
{
var val = source.ReadInt(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadInt(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadInt(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadInt(valaddr + icount * 4);
var sval2 = source.ReadInt(valaddr + icount1 * 4);
var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
result.Add((int)val1, time1, 0);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadInt(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadInt(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadInt(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
}
else
{
val = source.ReadInt(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadInt(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
icount = icount1;
}
}
//int count = 0;
//foreach (var time1 in time)
//{
// for (int i = 0; i < vv.Length - 1; i++)
// {
// var skey = vv[i];
// var snext = vv[i + 1];
// if (time1 == skey.Value.Item1)
// {
// var val = source.ReadInt(valaddr + i*4);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// }
// else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
// {
// switch (type)
// {
// case QueryValueMatchType.Previous:
// var val = source.ReadInt(valaddr + i * 4);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// case QueryValueMatchType.After:
// val = source.ReadInt(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// case QueryValueMatchType.Linear:
// if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
// {
// var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
// var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
// var sval1 = source.ReadInt(valaddr + i * 4);
// var sval2 = source.ReadInt(valaddr + (i + 1) * 4);
// var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
// result.Add((int)val1, time1, 0);
// }
// else if (qq[skey.Key] < 20)
// {
// val = source.ReadInt(valaddr + i * 4);
// result.Add(val, time1, qq[skey.Key]);
// }
// else if (qq[snext.Key] < 20)
// {
// val = source.ReadInt(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// }
// else
// {
// result.Add(0, time1, (byte)QualityConst.Null);
// }
// count++;
// break;
// case QueryValueMatchType.Closed:
// var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
// var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
// if (pval < fval)
// {
// val = source.ReadInt(valaddr + i * 4);
// result.Add(val, time1, qq[skey.Key]);
// }
// else
// {
// val = source.ReadInt(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// }
// count++;
// break;
// }
// break;
// }
// else if (time1 == snext.Value.Item1)
// {
// var val = source.ReadInt(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// }
// }
//}
return count;
}
///
///
///
///
///
///
///
///
///
public long? DeCompressLongValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressLongValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressLongValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 10 + 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2 + 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
//for (int i = 0; i < vv.Length - 1; i++)
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 <= skey.Value.Item1)
{
var val = source.ReadLong(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadLong(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadLong(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadLong(valaddr + icount * 8);
var sval2 = source.ReadLong(valaddr + icount1 * 8);
var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
result.Add(val1, time1, 0);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadLong(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadLong(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadLong(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
}
else
{
val = source.ReadLong(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadLong(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
icount = icount1;
}
}
return count;
//int count = 0;
//foreach (var time1 in time)
//{
// for (int i = 0; i < vv.Length - 1; i++)
// {
// var skey = vv[i];
// var snext = vv[i + 1];
// if (time1 == skey.Value.Item1)
// {
// var val = source.ReadLong(valaddr + i*8);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// }
// else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
// {
// switch (type)
// {
// case QueryValueMatchType.Previous:
// var val = source.ReadLong(valaddr + i * 8);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// case QueryValueMatchType.After:
// val = source.ReadLong(valaddr + (i + 1) * 8);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// case QueryValueMatchType.Linear:
// if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
// {
// var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
// var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
// var sval1 = source.ReadLong(valaddr + i * 8);
// var sval2 = source.ReadLong(valaddr + (i + 1) * 8);
// var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
// result.Add((long)val1, time1, 0);
// }
// else if (qq[skey.Key] < 20)
// {
// val = source.ReadLong(valaddr + i * 8);
// result.Add(val, time1, qq[skey.Key]);
// }
// else if (qq[snext.Key] < 20)
// {
// val = source.ReadLong(valaddr + (i + 1) * 8);
// result.Add(val, time1, qq[snext.Key]);
// }
// else
// {
// result.Add(0, time1, (byte)QualityConst.Null);
// }
// count++;
// break;
// case QueryValueMatchType.Closed:
// var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
// var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
// if (pval < fval)
// {
// val = source.ReadLong(valaddr + i * 8);
// result.Add(val, time1, qq[skey.Key]);
// }
// else
// {
// val = source.ReadLong(valaddr + (i + 1) * 8);
// result.Add(val, time1, qq[snext.Key]);
// }
// count++;
// break;
// }
// break;
// }
// else if (time1 == snext.Value.Item1)
// {
// var val = source.ReadLong(valaddr + (i + 1) * 8);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// }
// }
//}
//return count;
}
///
///
///
///
///
///
///
///
///
public short? DeCompressShortValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressShortValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressShortValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 4 + 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2 + 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
//for (int i = 0; i < vv.Length - 1; i++)
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 <= skey.Value.Item1)
{
var val = source.ReadShort(valaddr + icount * 2);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadShort(valaddr + icount * 2);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadShort(valaddr + icount1 * 2);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadShort(valaddr + icount * 2);
var sval2 = source.ReadShort(valaddr + icount1 * 2);
var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
result.Add(val1, time1, 0);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadShort(valaddr + icount * 2);
result.Add(val, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadShort(valaddr + icount1 * 2);
result.Add(val, time1, qq[snext.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadShort(valaddr + icount * 2);
result.Add(val, time1, qq[skey.Key]);
}
else
{
val = source.ReadShort(valaddr + icount1 * 2);
result.Add(val, time1, qq[snext.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadShort(valaddr + icount1 * 2);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
icount = icount1;
}
}
return count;
//int count = 0;
//foreach (var time1 in time)
//{
// for (int i = 0; i < vv.Length - 1; i++)
// {
// var skey = vv[i];
// var snext = vv[i + 1];
// if (time1 == skey.Value.Item1)
// {
// var val = source.ReadShort(valaddr + i*2);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// }
// else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
// {
// switch (type)
// {
// case QueryValueMatchType.Previous:
// var val = source.ReadShort(valaddr + i * 2);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// case QueryValueMatchType.After:
// val = source.ReadShort(valaddr + (i + 1) * 2);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// case QueryValueMatchType.Linear:
// if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
// {
// var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
// var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
// var sval1 = source.ReadShort(valaddr + i * 2);
// var sval2 = source.ReadShort(valaddr + (i + 1) * 2);
// var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
// result.Add((short)val1, time1, 0);
// }
// else if (qq[skey.Key] < 20)
// {
// val = source.ReadShort(valaddr + i * 2);
// result.Add(val, time1, qq[skey.Key]);
// }
// else if (qq[snext.Key] < 20)
// {
// val = source.ReadShort(valaddr + (i + 1) * 2);
// result.Add(val, time1, qq[snext.Key]);
// }
// else
// {
// result.Add(0, time1, (byte)QualityConst.Null);
// }
// count++;
// break;
// case QueryValueMatchType.Closed:
// var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
// var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
// if (pval < fval)
// {
// val = source.ReadShort(valaddr + i * 2);
// result.Add(val, time1, qq[skey.Key]);
// }
// else
// {
// val = source.ReadShort(valaddr + (i + 1) * 2);
// result.Add(val, time1, qq[snext.Key]);
// }
// count++;
// break;
// }
// break;
// }
// else if (time1 == snext.Value.Item1)
// {
// var val = source.ReadShort(valaddr + (i + 1) * 2);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// }
// }
//}
//return count;
}
///
///
///
///
///
///
///
///
///
public string DeCompressStringValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressStringValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressStringValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
//var dtmp = source.ToStringList(sourceAddr + 12, Encoding.Unicode);
var valaddr = qs.Count * 2 + sourceAddr;
Dictionary dtmp = new Dictionary();
source.Position = valaddr;
for (int i = 0; i < qs.Count; i++)
{
dtmp.Add(i, source.ReadString());
}
var qq = source.ReadBytes(qs.Count);
var vv = qs.ToArray();
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
//for (int i = 0; i < vv.Length - 1; i++)
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 <= skey.Value.Item1)
{
var val = dtmp[icount];
// var val = source.ReadShort(valaddr + icount * 2);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = dtmp[icount];
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = dtmp[icount1];
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = dtmp[icount];
result.Add(val, time1, qq[skey.Key]);
}
else
{
val = dtmp[icount1];
result.Add(val, time1, qq[snext.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = dtmp[icount1];
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
icount = icount1;
}
}
return count;
//int count = 0;
//foreach (var time1 in time)
//{
// for (int i = 0; i < vv.Length - 1; i++)
// {
// var skey = vv[i];
// var snext = vv[i + 1];
// if (time1 == skey.Value.Item1)
// {
// var val = dtmp[i];
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// }
// else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
// {
// switch (type)
// {
// case QueryValueMatchType.Previous:
// var val = dtmp[i];
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// case QueryValueMatchType.After:
// val = dtmp[i + 1];
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// case QueryValueMatchType.Linear:
// case QueryValueMatchType.Closed:
// var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
// var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
// if (pval < fval)
// {
// val = dtmp[i];
// result.Add(val, time1, qq[skey.Key]);
// break;
// }
// else
// {
// val = dtmp[i + 1];
// result.Add(val, time1, qq[snext.Key]);
// break;
// }
// }
// count++;
// break;
// }
// else if (time1 == snext.Value.Item1)
// {
// var val = dtmp[i];
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// }
// }
//}
//return count;
}
///
///
///
///
///
///
///
///
///
public uint? DeCompressUIntValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressUIntValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressUIntValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 6 + 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2 + 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 <= skey.Value.Item1)
{
var val = source.ReadUInt(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadUInt(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadUInt(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadUInt(valaddr + icount * 4);
var sval2 = source.ReadUInt(valaddr + icount1 * 4);
var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
result.Add((uint)val1, time1, 0);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadUInt(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadUInt(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadUInt(valaddr + icount * 4);
result.Add(val, time1, qq[skey.Key]);
}
else
{
val = source.ReadUInt(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadUInt(valaddr + icount1 * 4);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
icount = icount1;
}
}
return count;
//int count = 0;
//foreach (var time1 in time)
//{
// for (int i = 0; i < vv.Length - 1; i++)
// {
// var skey = vv[i];
// var snext = vv[i + 1];
// if (time1 == skey.Value.Item1)
// {
// var val = source.ReadUInt(valaddr + i*4);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// }
// else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
// {
// switch (type)
// {
// case QueryValueMatchType.Previous:
// var val = source.ReadUInt(valaddr + i * 4);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// case QueryValueMatchType.After:
// val = source.ReadUInt(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// case QueryValueMatchType.Linear:
// if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
// {
// var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
// var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
// var sval1 = source.ReadUInt(valaddr + i * 4);
// var sval2 = source.ReadUInt(valaddr + (i + 1) * 4);
// var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
// result.Add((uint)val1, time1, 0);
// }
// else if (qq[skey.Key] < 20)
// {
// val = source.ReadUInt(valaddr + i * 4);
// result.Add(val, time1, qq[skey.Key]);
// }
// else if (qq[snext.Key] < 20)
// {
// val = source.ReadUInt(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// }
// else
// {
// result.Add(0, time1, (byte)QualityConst.Null);
// }
// count++;
// break;
// case QueryValueMatchType.Closed:
// var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
// var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
// if (pval < fval)
// {
// val = source.ReadUInt(valaddr + i * 4);
// result.Add(val, time1, qq[skey.Key]);
// }
// else
// {
// val = source.ReadUInt(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// }
// count++;
// break;
// }
// break;
// }
// else if (time1 == snext.Value.Item1)
// {
// var val = source.ReadUInt(valaddr + (i + 1) * 4);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// }
// }
//}
//return count;
}
///
///
///
///
///
///
///
///
///
public ulong? DeCompressULongValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressULongValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressULongValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 10 + 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2 + 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
//for (int i = 0; i < vv.Length - 1; i++)
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 <= skey.Value.Item1)
{
var val = source.ReadULong(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadULong(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadULong(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadULong(valaddr + icount * 8);
var sval2 = source.ReadULong(valaddr + icount1 * 8);
var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
result.Add(val1, time1, 0);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadULong(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadULong(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadULong(valaddr + icount * 8);
result.Add(val, time1, qq[skey.Key]);
}
else
{
val = source.ReadULong(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadULong(valaddr + icount1 * 8);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
icount = icount1;
}
}
return count;
//int count = 0;
//foreach (var time1 in time)
//{
// for (int i = 0; i < vv.Length - 1; i++)
// {
// var skey = vv[i];
// var snext = vv[i + 1];
// if (time1 == skey.Value.Item1)
// {
// var val = source.ReadULong(valaddr + i * 8);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// }
// else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
// {
// switch (type)
// {
// case QueryValueMatchType.Previous:
// var val = source.ReadULong(valaddr + i * 8);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// case QueryValueMatchType.After:
// val = source.ReadULong(valaddr + (i + 1) * 8);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// case QueryValueMatchType.Linear:
// if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
// {
// var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
// var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
// var sval1 = source.ReadULong(valaddr + i * 8);
// var sval2 = source.ReadULong(valaddr + (i + 1) * 8);
// var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
// result.Add((ulong)val1, time1, 0);
// }
// else if (qq[skey.Key] < 20)
// {
// val = source.ReadULong(valaddr + i * 8);
// result.Add(val, time1, qq[skey.Key]);
// }
// else if (qq[snext.Key] < 20)
// {
// val = source.ReadULong(valaddr + (i + 1) * 8);
// result.Add(val, time1, qq[snext.Key]);
// }
// else
// {
// result.Add(0, time1, (byte)QualityConst.Null);
// }
// count++;
// break;
// case QueryValueMatchType.Closed:
// var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
// var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
// if (pval < fval)
// {
// val = source.ReadULong(valaddr + i * 8);
// result.Add(val, time1, qq[skey.Key]);
// }
// else
// {
// val = source.ReadULong(valaddr + (i + 1) * 8);
// result.Add(val, time1, qq[snext.Key]);
// }
// count++;
// break;
// }
// break;
// }
// else if (time1 == snext.Value.Item1)
// {
// var val = source.ReadULong(valaddr + (i + 1) * 8);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// }
// }
//}
//return count;
}
///
///
///
///
///
///
///
///
///
public ushort? DeCompressUShortValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
HisQueryResult re = new HisQueryResult(1);
var count = DeCompressUShortValue(source, sourceAddr, new List() { time }, timeTick, type, re);
if (count > 0)
{
return re.GetValue(0);
}
else
{
return null;
}
}
///
///
///
///
///
///
///
///
///
///
public int DeCompressUShortValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
var qq = source.ReadBytes(qs.Count * 4 + 16 + sourceAddr, qs.Count);
var vv = qs.ToArray();
var valaddr = qs.Count * 2 + 16 + sourceAddr;
int count = 0;
int icount = 0;
int icount1 = 0;
foreach (var time1 in time)
{
while (icount < vv.Length - 1)
{
while (!vv[icount].Value.Item2)
{
icount++;
if (icount > (vv.Length - 1))
return count;
}
var skey = vv[icount];
icount1 = icount + 1;
while (!vv[icount1].Value.Item2)
{
icount1++;
if (icount1 > (vv.Length))
return count;
}
var snext = vv[icount1];
if (time1 <= skey.Value.Item1)
{
var val = source.ReadUShort(valaddr + icount * 2);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadUShort(valaddr + icount * 2);
result.Add(val, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadUShort(valaddr + icount1 * 2);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadUShort(valaddr + icount * 2);
var sval2 = source.ReadUShort(valaddr + icount1 * 2);
var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
result.Add(val1, time1, 0);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadUShort(valaddr + icount * 2);
result.Add(val, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadUShort(valaddr + icount1 * 2);
result.Add(val, time1, qq[snext.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadUShort(valaddr + icount * 2);
result.Add(val, time1, qq[skey.Key]);
}
else
{
val = source.ReadUShort(valaddr + icount1 * 2);
result.Add(val, time1, qq[snext.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadUShort(valaddr + icount1 * 2);
result.Add(val, time1, qq[snext.Key]);
count++;
break;
}
icount = icount1;
}
}
return count;
//int count = 0;
//foreach (var time1 in time)
//{
// for (int i = 0; i < vv.Length - 1; i++)
// {
// var skey = vv[i];
// var snext = vv[i + 1];
// if (time1 == skey.Value.Item1)
// {
// var val = source.ReadUShort(valaddr + i * 2);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// }
// else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
// {
// switch (type)
// {
// case QueryValueMatchType.Previous:
// var val = source.ReadUShort(valaddr + i * 2);
// result.Add(val, time1, qq[skey.Key]);
// count++;
// break;
// case QueryValueMatchType.After:
// val = source.ReadUShort(valaddr + (i + 1) * 2);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// case QueryValueMatchType.Linear:
// if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
// {
// var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
// var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
// var sval1 = source.ReadUShort(valaddr + i * 2);
// var sval2 = source.ReadUShort(valaddr + (i + 1) * 2);
// var val1 = pval1 / tval1 * (sval2 - sval1) + sval1;
// result.Add((ushort)val1, time1, 0);
// }
// else if (qq[skey.Key] < 20)
// {
// val = source.ReadUShort(valaddr + i * 2);
// result.Add(val, time1, qq[skey.Key]);
// }
// else if (qq[snext.Key] < 20)
// {
// val = source.ReadUShort(valaddr + (i + 1) * 2);
// result.Add(val, time1, qq[snext.Key]);
// }
// else
// {
// result.Add(0, time1, (byte)QualityConst.Null);
// }
// count++;
// break;
// case QueryValueMatchType.Closed:
// var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
// var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
// if (pval < fval)
// {
// val = source.ReadUShort(valaddr + i * 2);
// result.Add(val, time1, qq[skey.Key]);
// }
// else
// {
// val = source.ReadUShort(valaddr + (i + 1) * 2);
// result.Add(val, time1, qq[snext.Key]);
// }
// count++;
// break;
// }
// break;
// }
// else if (time1 == snext.Value.Item1)
// {
// var val = source.ReadUShort(valaddr + (i + 1) * 2);
// result.Add(val, time1, qq[snext.Key]);
// count++;
// break;
// }
// }
//}
//return count;
}
///
///
///
///
///
///
///
///
///
///
///
public override int DeCompressAllValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
if (typeof(T) == typeof(bool))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(short))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(ushort))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(int))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(uint))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(long))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(ulong))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(double))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(float))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(byte))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(string))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else if (typeof(T) == typeof(DateTime))
{
return DeCompressAllValue(source, sourceAddr, startTime, endTime, timeTick, result as HisQueryResult);
}
else
{
return DeCompressAllPointValue(source, sourceAddr, startTime, endTime, timeTick, result);
}
}
///
///
///
///
///
///
///
///
///
///
public override object DeCompressValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
if (typeof(T) == typeof(bool))
{
return ((object)DeCompressBoolValue(source, sourceAddr, time, timeTick, type));
}
else if (typeof(T) == typeof(byte))
{
return ((object)DeCompressByteValue(source, sourceAddr, time, timeTick, type));
}
else if (typeof(T) == typeof(short))
{
return ((object)DeCompressShortValue(source, sourceAddr, time, timeTick, type));
}
else if (typeof(T) == typeof(ushort))
{
return ((object)DeCompressUShortValue(source, sourceAddr, time, timeTick, type));
}
else if (typeof(T) == typeof(int))
{
return ((object)DeCompressIntValue(source, sourceAddr, time, timeTick, type));
}
else if (typeof(T) == typeof(uint))
{
return ((object)DeCompressUIntValue(source, sourceAddr, time, timeTick, type));
}
else if (typeof(T) == typeof(long))
{
return ((object)DeCompressLongValue(source, sourceAddr, time, timeTick, type));
}
else if (typeof(T) == typeof(ulong))
{
return ((object)DeCompressULongValue(source, sourceAddr, time, timeTick, type));
}
else if (typeof(T) == typeof(DateTime))
{
return ((object)DeCompressDateTimeValue(source, sourceAddr, time, timeTick, type));
}
else if (typeof(T) == typeof(string))
{
return ((object)DeCompressStringValue(source, sourceAddr, time, timeTick, type));
}
else
{
return DeCompressPointValue(source, sourceAddr, time, timeTick, type);
}
}
///
///
///
///
///
///
///
///
///
///
///
public override int DeCompressValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
if (typeof(T) == typeof(bool))
{
return DeCompressBoolValue(source, sourceAddr, time, timeTick,type, result as HisQueryResult);
}
else if (typeof(T) == typeof(byte))
{
return DeCompressByteValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(short))
{
return DeCompressShortValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(ushort))
{
return DeCompressUShortValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(int))
{
return DeCompressIntValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(uint))
{
return DeCompressUIntValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(long))
{
return DeCompressLongValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(ulong))
{
return DeCompressULongValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(DateTime))
{
return DeCompressDateTimeValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(string))
{
return DeCompressStringValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(double))
{
return DeCompressDoubleValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else if (typeof(T) == typeof(float))
{
return DeCompressFloatValue(source, sourceAddr, time, timeTick, type, result as HisQueryResult);
}
else
{
return DeCompressPointValue(source, sourceAddr, time,timeTick,type, result);
}
}
///
///
///
///
///
///
///
///
///
///
///
public int DeCompressAllPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime startTime, DateTime endTime, int timeTick, HisQueryResult result)
{
DateTime time;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time);
int i = 0;
int rcount = 0;
if (typeof(T) == typeof(IntPointData))
{
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 10 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadInts(valaddr, valuecount * 2);
for (i = 0; i < vals.Count; i=i+2)
{
int j = i / 2;
if (qs[j].Item2 && qq[j] < 100 && qs[j].Item1 >= startTime && qs[j].Item1 < endTime)
{
result.AddPoint(vals[i], vals[i + 1] , qs[j].Item1, qq[j]);
rcount++;
}
}
}
else if (typeof(T) == typeof(UIntPointData))
{
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 10 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadUInts(valaddr, valuecount * 2);
for (i = 0; i < vals.Count; i = i + 2)
{
int j = i / 2;
if (qs[j].Item2 && qq[j] < 100 && qs[j].Item1 >= startTime && qs[j].Item1 < endTime)
{
result.AddPoint(vals[i], vals[i + 1], qs[j].Item1, qq[j]);
rcount++;
}
}
}
else if (typeof(T) == typeof(IntPoint3Data))
{
//读取质量戳,时间戳2个字节,值12个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 14 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadInts(valaddr, valuecount * 3);
for (i = 0; i < vals.Count; i = i + 3)
{
int j = i / 3;
if (qs[j].Item2 && qq[j] < 100 && qs[j].Item1 >= startTime && qs[j].Item1 < endTime)
{
result.AddPoint(vals[i], vals[i + 1],vals[i + 2], qs[j].Item1, qq[j]);
rcount++;
}
}
}
else if (typeof(T) == typeof(UIntPoint3Data))
{
//读取质量戳,时间戳2个字节,值12个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 14 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadUInts(valaddr, valuecount * 3);
for (i = 0; i < vals.Count; i = i + 3)
{
int j = i / 3;
if (qs[j].Item2 && qq[j] < 100 && qs[j].Item1 >= startTime && qs[j].Item1 < endTime)
{
result.AddPoint(vals[i], vals[i + 1], vals[i + 2], qs[j].Item1, qq[j]);
rcount++;
}
}
}
else if (typeof(T) == typeof(LongPointData))
{
//读取质量戳,时间戳2个字节,值16个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 18 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadLongs(valaddr, valuecount * 2);
for (i = 0; i < vals.Count; i = i + 2)
{
int j = i / 2;
if (qs[j].Item2 && qq[j] < 100 && qs[j].Item1 >= startTime && qs[j].Item1 < endTime)
{
result.AddPoint(vals[i], vals[i + 1], qs[j].Item1, qq[j]);
rcount++;
}
}
}
else if (typeof(T) == typeof(ULongPointData))
{
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 18 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadULongs(valaddr, valuecount * 2);
for (i = 0; i < vals.Count; i = i + 2)
{
int j = i / 2;
if (qs[j].Item2 && qq[j] < 100 && qs[j].Item1 >= startTime && qs[j].Item1 < endTime)
{
result.AddPoint(vals[i], vals[i + 1], qs[j].Item1, qq[j]);
rcount++;
}
}
}
else if (typeof(T) == typeof(LongPoint3Data))
{
//读取质量戳,时间戳2个字节,值24个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 26 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadLongs(valaddr, valuecount * 3);
for (i = 0; i < vals.Count; i = i + 3)
{
int j = i / 3;
if (qs[j].Item2 && qq[j] < 100 && qs[j].Item1 >= startTime && qs[j].Item1 < endTime)
{
result.AddPoint(vals[i], vals[i + 1], vals[i + 2], qs[j].Item1, qq[j]);
rcount++;
}
}
}
else if (typeof(T) == typeof(ULongPoint3Data))
{
//读取质量戳,时间戳2个字节,值8个字节,质量戳1个字节
var qq = source.ReadBytes(valuecount * 26 + 16 + sourceAddr, valuecount);
var valaddr = valuecount * 2 + 16 + sourceAddr;
var vals = source.ReadULongs(valaddr, valuecount * 3);
for (i = 0; i < vals.Count; i = i + 3)
{
int j = i / 3;
if (qs[j].Item2 && qq[j] < 100 && qs[j].Item1 >= startTime && qs[j].Item1 < endTime)
{
result.AddPoint(vals[i], vals[i + 1], vals[i + 2], qs[j].Item1, qq[j]);
rcount++;
}
}
}
return rcount;
}
///
///
///
///
///
///
///
///
///
///
public T DeCompressPointValue(MarshalMemoryBlock source, int sourceAddr, DateTime time, int timeTick, QueryValueMatchType type)
{
DateTime time1;
int valuecount = 0;
object reval = null;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out time1);
var vv = qs.ToArray();
if (typeof(T) == typeof(IntPointData))
{
var qq = source.ReadBytes(qs.Count * 10 + 16 + sourceAddr, qs.Count);
var valaddr = qs.Count * 2 + 16 + sourceAddr;
for (int i = 0; i < vv.Length - 1; i = i + 2)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time == skey.Value.Item1)
{
reval = new IntPointData(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4));
break;
}
else if (time > skey.Value.Item1 && time < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
reval = new IntPointData(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4));
break;
case QueryValueMatchType.After:
reval = new IntPointData(source.ReadInt(valaddr + (i + 2) * 4), source.ReadInt(valaddr + (i + 3) * 4));
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadInt(valaddr + i * 4);
var sval12 = source.ReadInt(valaddr + (i + 1) * 4);
var sval2 = source.ReadInt(valaddr + (i + 2) * 4);
var sval22 = source.ReadInt(valaddr + (i + 3) * 4);
var x1 = (int)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (int)(pval1 / tval1 * (sval22 - sval12) + sval12);
reval = new IntPointData(x1, x2);
}
else if (qq[skey.Key] < 20)
{
reval = new IntPointData(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4));
}
else if (qq[snext.Key] < 20)
{
reval = new IntPointData(source.ReadInt(valaddr + (i + 2) * 4), source.ReadInt(valaddr + (i + 3) * 4));
}
break;
case QueryValueMatchType.Closed:
var pval = (time - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time).TotalMilliseconds;
if (pval < fval)
{
reval = new IntPointData(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4));
}
else
{
reval = new IntPointData(source.ReadInt(valaddr + (i + 2) * 4), source.ReadInt(valaddr + (i + 3) * 4));
}
break;
}
}
else if (time == snext.Value.Item1)
{
reval = new IntPointData(source.ReadInt(valaddr + (i + 2) * 4), source.ReadInt(valaddr + (i + 3) * 4));
}
}
}
else if (typeof(T) == typeof(UIntPointData))
{
var qq = source.ReadBytes(qs.Count * 10 + 16 + sourceAddr, qs.Count);
var valaddr = qs.Count * 2 + 16 + sourceAddr;
for (int i = 0; i < vv.Length - 1; i = i + 2)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time == skey.Value.Item1)
{
reval = new UIntPointData(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4));
break;
}
else if (time > skey.Value.Item1 && time < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
reval = new UIntPointData(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4));
break;
case QueryValueMatchType.After:
reval = new UIntPointData(source.ReadUInt(valaddr + (i + 2) * 4), source.ReadUInt(valaddr + (i + 3) * 4));
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadUInt(valaddr + i * 4);
var sval12 = source.ReadUInt(valaddr + (i + 1) * 4);
var sval2 = source.ReadUInt(valaddr + (i + 2) * 4);
var sval22 = source.ReadUInt(valaddr + (i + 3) * 4);
var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12);
reval = new UIntPointData(x1, x2);
}
else if (qq[skey.Key] < 20)
{
reval = new UIntPointData(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4));
}
else if (qq[snext.Key] < 20)
{
reval = new UIntPointData(source.ReadUInt(valaddr + (i + 2) * 4), source.ReadUInt(valaddr + (i + 3) * 4));
}
break;
case QueryValueMatchType.Closed:
var pval = (time - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time).TotalMilliseconds;
if (pval < fval)
{
reval = new UIntPointData(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4));
}
else
{
reval = new UIntPointData(source.ReadUInt(valaddr + (i + 2) * 4), source.ReadUInt(valaddr + (i + 3) * 4));
}
break;
}
}
else if (time == snext.Value.Item1)
{
reval = new UIntPointData(source.ReadUInt(valaddr + (i + 2) * 4), source.ReadUInt(valaddr + (i + 3) * 4));
}
}
}
else if (typeof(T) == typeof(LongPointData))
{
var qq = source.ReadBytes(qs.Count * 18 + 16 + sourceAddr, qs.Count);
var valaddr = qs.Count * 2 + 16 + sourceAddr;
for (int i = 0; i < vv.Length - 1; i = i + 2)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time == skey.Value.Item1)
{
reval = new LongPointData(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8));
break;
}
else if (time > skey.Value.Item1 && time < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
reval = new LongPointData(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8));
break;
case QueryValueMatchType.After:
reval = new LongPointData(source.ReadLong(valaddr + (i + 2) * 8), source.ReadLong(valaddr + (i + 3) * 8));
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadLong(valaddr + i * 8);
var sval12 = source.ReadLong(valaddr + (i + 1) * 8);
var sval2 = source.ReadLong(valaddr + (i + 2) * 8);
var sval22 = source.ReadLong(valaddr + (i + 3) * 8);
var x1 = (long)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (long)(pval1 / tval1 * (sval22 - sval12) + sval12);
reval = new LongPointData(x1, x2);
}
else if (qq[skey.Key] < 20)
{
reval = new LongPointData(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8));
}
else if (qq[snext.Key] < 20)
{
reval = new LongPointData(source.ReadLong(valaddr + (i + 2) * 8), source.ReadLong(valaddr + (i + 3) * 8));
}
break;
case QueryValueMatchType.Closed:
var pval = (time - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time).TotalMilliseconds;
if (pval < fval)
{
reval = new LongPointData(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8));
}
else
{
reval = new LongPointData(source.ReadLong(valaddr + (i + 2) * 8), source.ReadLong(valaddr + (i + 3) * 8));
}
break;
}
}
else if (time == snext.Value.Item1)
{
reval = new LongPointData(source.ReadLong(valaddr + (i + 2) * 8), source.ReadLong(valaddr + (i + 3) * 8));
}
}
}
else if (typeof(T) == typeof(ULongPointData))
{
var qq = source.ReadBytes(qs.Count * 18 + 16 + sourceAddr, qs.Count);
var valaddr = qs.Count * 2 + 16 + sourceAddr;
for (int i = 0; i < vv.Length - 1; i = i + 2)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time == skey.Value.Item1)
{
reval = new ULongPointData(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8));
break;
}
else if (time > skey.Value.Item1 && time < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
reval = new ULongPointData(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8));
break;
case QueryValueMatchType.After:
reval = new ULongPointData(source.ReadULong(valaddr + (i + 2) * 8), source.ReadULong(valaddr + (i + 3) * 8));
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadLong(valaddr + i * 8);
var sval12 = source.ReadLong(valaddr + (i + 1) * 8);
var sval2 = source.ReadLong(valaddr + (i + 2) * 8);
var sval22 = source.ReadLong(valaddr + (i + 3) * 8);
var x1 = (ulong)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (ulong)(pval1 / tval1 * (sval22 - sval12) + sval12);
reval = new ULongPointData(x1, x2);
}
else if (qq[skey.Key] < 20)
{
reval = new ULongPointData(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8));
}
else if (qq[snext.Key] < 20)
{
reval = new ULongPointData(source.ReadULong(valaddr + (i + 2) * 8), source.ReadULong(valaddr + (i + 3) * 8));
}
break;
case QueryValueMatchType.Closed:
var pval = (time - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time).TotalMilliseconds;
if (pval < fval)
{
reval = new ULongPointData(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8));
}
else
{
reval = new ULongPointData(source.ReadULong(valaddr + (i + 2) * 8), source.ReadULong(valaddr + (i + 3) * 8));
}
break;
}
}
else if (time == snext.Value.Item1)
{
reval = new ULongPointData(source.ReadULong(valaddr + (i + 2) * 8), source.ReadULong(valaddr + (i + 3) * 8));
}
}
}
else if (typeof(T) == typeof(IntPoint3Data))
{
var qq = source.ReadBytes(qs.Count * 14 + 16 + sourceAddr, qs.Count);
var valaddr = qs.Count * 2 + 16 + sourceAddr;
for (int i = 0; i < vv.Length - 1; i = i + 3)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time == skey.Value.Item1)
{
reval = new IntPoint3Data(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4), source.ReadInt(valaddr + (i + 2) * 4));
break;
}
else if (time > skey.Value.Item1 && time < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
reval = new IntPoint3Data(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4), source.ReadInt(valaddr + (i + 2) * 4));
break;
case QueryValueMatchType.After:
reval = new IntPoint3Data(source.ReadInt(valaddr + (i + 3) * 4), source.ReadInt(valaddr + (i + 4) * 4), source.ReadInt(valaddr + (i + 5) * 4));
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadInt(valaddr + i * 4);
var sval12 = source.ReadInt(valaddr + (i + 1) * 4);
var sval13 = source.ReadInt(valaddr + (i + 2) * 4);
var sval2 = source.ReadInt(valaddr + (i + 3) * 4);
var sval22 = source.ReadInt(valaddr + (i + 4) * 4);
var sval23 = source.ReadInt(valaddr + (i + 5) * 4);
var x1 = (int)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (int)(pval1 / tval1 * (sval22 - sval12) + sval12);
var x3 = (int)(pval1 / tval1 * (sval23 - sval13) + sval13);
reval = new IntPoint3Data(x1, x2, x3);
}
else if (qq[skey.Key] < 20)
{
reval = new IntPoint3Data(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4), source.ReadInt(valaddr + (i + 2) * 4));
}
else if (qq[snext.Key] < 20)
{
reval = new IntPoint3Data(source.ReadInt(valaddr + (i + 3) * 4), source.ReadInt(valaddr + (i + 4) * 4), source.ReadInt(valaddr + (i + 5) * 4));
}
break;
case QueryValueMatchType.Closed:
var pval = (time - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time).TotalMilliseconds;
if (pval < fval)
{
reval = new IntPoint3Data(source.ReadInt(valaddr + i * 4), source.ReadInt(valaddr + (i + 1) * 4), source.ReadInt(valaddr + (i + 2) * 4));
}
else
{
reval = new IntPoint3Data(source.ReadInt(valaddr + (i + 3) * 4), source.ReadInt(valaddr + (i + 4) * 4), source.ReadInt(valaddr + (i + 5) * 4));
}
break;
}
}
else if (time == snext.Value.Item1)
{
reval = new IntPoint3Data(source.ReadInt(valaddr + (i + 3) * 4), source.ReadInt(valaddr + (i + 4) * 4), source.ReadInt(valaddr + (i + 5) * 4));
}
}
}
else if (typeof(T) == typeof(LongPoint3Data))
{
var qq = source.ReadBytes(qs.Count * 26 + 16 + sourceAddr, qs.Count);
var valaddr = qs.Count * 2 + 16 + sourceAddr;
for (int i = 0; i < vv.Length - 1; i = i + 3)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time == skey.Value.Item1)
{
reval = new LongPoint3Data(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8), source.ReadLong(valaddr + (i + 2) * 8));
break;
}
else if (time > skey.Value.Item1 && time < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
reval = new LongPoint3Data(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8), source.ReadLong(valaddr + (i + 2) * 8));
break;
case QueryValueMatchType.After:
reval = new LongPoint3Data(source.ReadLong(valaddr + (i + 3) * 8), source.ReadLong(valaddr + (i + 4) * 8), source.ReadLong(valaddr + (i + 5) * 8));
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadLong(valaddr + i * 8);
var sval12 = source.ReadLong(valaddr + (i + 1) * 8);
var sval13 = source.ReadLong(valaddr + (i + 2) * 8);
var sval2 = source.ReadLong(valaddr + (i + 3) * 8);
var sval22 = source.ReadLong(valaddr + (i + 4) * 8);
var sval23 = source.ReadLong(valaddr + (i + 5) * 8);
var x1 = (long)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (long)(pval1 / tval1 * (sval22 - sval12) + sval12);
var x3 = (long)(pval1 / tval1 * (sval23 - sval13) + sval13);
reval = new LongPoint3Data(x1, x2, x3);
}
else if (qq[skey.Key] < 20)
{
reval = new LongPoint3Data(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8), source.ReadLong(valaddr + (i + 2) * 8));
}
else if (qq[snext.Key] < 20)
{
reval = new LongPoint3Data(source.ReadLong(valaddr + (i + 3) * 8), source.ReadLong(valaddr + (i + 4) * 8), source.ReadLong(valaddr + (i + 5) * 8));
}
break;
case QueryValueMatchType.Closed:
var pval = (time - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time).TotalMilliseconds;
if (pval < fval)
{
reval = new LongPoint3Data(source.ReadLong(valaddr + i * 8), source.ReadLong(valaddr + (i + 1) * 8), source.ReadLong(valaddr + (i + 2) * 8));
}
else
{
reval = new LongPoint3Data(source.ReadLong(valaddr + (i + 3) * 8), source.ReadLong(valaddr + (i + 4) * 8), source.ReadLong(valaddr + (i + 5) * 8));
}
break;
}
}
else if (time == snext.Value.Item1)
{
reval = new LongPoint3Data(source.ReadLong(valaddr + (i + 3) * 8), source.ReadLong(valaddr + (i + 4) * 8), source.ReadLong(valaddr + (i + 5) * 8));
}
}
}
else if (typeof(T) == typeof(UIntPoint3Data))
{
var qq = source.ReadBytes(qs.Count * 14 + 16 + sourceAddr, qs.Count);
var valaddr = qs.Count * 2 + 16 + sourceAddr;
for (int i = 0; i < vv.Length - 1; i = i + 3)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time == skey.Value.Item1)
{
reval = new UIntPoint3Data(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4), source.ReadUInt(valaddr + (i + 2) * 4));
break;
}
else if (time > skey.Value.Item1 && time < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
reval = new UIntPoint3Data(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4), source.ReadUInt(valaddr + (i + 2) * 4));
break;
case QueryValueMatchType.After:
reval = new UIntPoint3Data(source.ReadUInt(valaddr + (i + 3) * 4), source.ReadUInt(valaddr + (i + 4) * 4), source.ReadUInt(valaddr + (i + 5) * 4));
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadUInt(valaddr + i * 4);
var sval12 = source.ReadUInt(valaddr + (i + 1) * 4);
var sval13 = source.ReadUInt(valaddr + (i + 2) * 4);
var sval2 = source.ReadUInt(valaddr + (i + 3) * 4);
var sval22 = source.ReadUInt(valaddr + (i + 4) * 4);
var sval23 = source.ReadUInt(valaddr + (i + 5) * 4);
var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12);
var x3 = (uint)(pval1 / tval1 * (sval23 - sval13) + sval13);
reval = new UIntPoint3Data(x1, x2, x3);
}
else if (qq[skey.Key] < 20)
{
reval = new UIntPoint3Data(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4), source.ReadUInt(valaddr + (i + 2) * 4));
}
else if (qq[snext.Key] < 20)
{
reval = new UIntPoint3Data(source.ReadUInt(valaddr + (i + 3) * 4), source.ReadUInt(valaddr + (i + 4) * 4), source.ReadUInt(valaddr + (i + 5) * 4));
}
break;
case QueryValueMatchType.Closed:
var pval = (time - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time).TotalMilliseconds;
if (pval < fval)
{
reval = new UIntPoint3Data(source.ReadUInt(valaddr + i * 4), source.ReadUInt(valaddr + (i + 1) * 4), source.ReadUInt(valaddr + (i + 2) * 4));
}
else
{
reval = new UIntPoint3Data(source.ReadUInt(valaddr + (i + 3) * 4), source.ReadUInt(valaddr + (i + 4) * 4), source.ReadUInt(valaddr + (i + 5) * 4));
}
break;
}
}
else if (time == snext.Value.Item1)
{
reval = new UIntPoint3Data(source.ReadUInt(valaddr + (i + 3) * 4), source.ReadUInt(valaddr + (i + 4) * 4), source.ReadUInt(valaddr + (i + 5) * 4));
}
}
}
else if (typeof(T) == typeof(ULongPoint3Data))
{
var qq = source.ReadBytes(qs.Count * 26 + 16 + sourceAddr, qs.Count);
var valaddr = qs.Count * 2 + 16 + sourceAddr;
for (int i = 0; i < vv.Length - 1; i = i + 3)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time == skey.Value.Item1)
{
reval = new ULongPoint3Data(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8), source.ReadULong(valaddr + (i + 2) * 8));
break;
}
else if (time > skey.Value.Item1 && time < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
reval = new ULongPoint3Data(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8), source.ReadULong(valaddr + (i + 2) * 8));
break;
case QueryValueMatchType.After:
reval = new ULongPoint3Data(source.ReadULong(valaddr + (i + 3) * 8), source.ReadULong(valaddr + (i + 4) * 8), source.ReadULong(valaddr + (i + 5) * 8));
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadULong(valaddr + i * 8);
var sval12 = source.ReadULong(valaddr + (i + 1) * 8);
var sval13 = source.ReadULong(valaddr + (i + 2) * 8);
var sval2 = source.ReadULong(valaddr + (i + 3) * 8);
var sval22 = source.ReadULong(valaddr + (i + 4) * 8);
var sval23 = source.ReadULong(valaddr + (i + 5) * 8);
var x1 = (ulong)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (ulong)(pval1 / tval1 * (sval22 - sval12) + sval12);
var x3 = (ulong)(pval1 / tval1 * (sval23 - sval13) + sval13);
reval = new ULongPoint3Data(x1, x2, x3);
}
else if (qq[skey.Key] < 20)
{
reval = new ULongPoint3Data(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8), source.ReadULong(valaddr + (i + 2) * 8));
}
else if (qq[snext.Key] < 20)
{
reval = new ULongPoint3Data(source.ReadULong(valaddr + (i + 3) * 8), source.ReadULong(valaddr + (i + 4) * 8), source.ReadULong(valaddr + (i + 5) * 8));
}
break;
case QueryValueMatchType.Closed:
var pval = (time - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time).TotalMilliseconds;
if (pval < fval)
{
reval = new ULongPoint3Data(source.ReadULong(valaddr + i * 8), source.ReadULong(valaddr + (i + 1) * 8), source.ReadULong(valaddr + (i + 2) * 8));
}
else
{
reval = new ULongPoint3Data(source.ReadULong(valaddr + (i + 3) * 8), source.ReadULong(valaddr + (i + 4) * 8), source.ReadULong(valaddr + (i + 5) * 8));
}
break;
}
}
else if (time == snext.Value.Item1)
{
reval = new ULongPoint3Data(source.ReadULong(valaddr + (i + 3) * 8), source.ReadULong(valaddr + (i + 4) * 8), source.ReadULong(valaddr + (i + 5) * 8));
}
}
}
return (T)reval;
}
///
///
///
///
///
///
///
///
///
///
///
public int DeCompressPointValue(MarshalMemoryBlock source, int sourceAddr, List time, int timeTick, QueryValueMatchType type, HisQueryResult result)
{
DateTime stime;
int valuecount = 0;
var qs = ReadTimeQulity(source, sourceAddr, out valuecount, out stime);
var vv = qs.ToArray();
var valaddr = qs.Count * 2 + 16 + sourceAddr;
int count = 0;
if (typeof(T) == typeof(IntPointData))
{
var qq = source.ReadBytes(qs.Count * 10 + 16 + sourceAddr, qs.Count);
foreach (var time1 in time)
{
for (int i = 0; i < vv.Length - 1; i++)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadInt(valaddr + i * 4);
var val2 = source.ReadInt(valaddr + (i+1) * 4);
result.AddPoint(val,val2, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadInt(valaddr + i * 4);
var val2 = source.ReadInt(valaddr + (i + 1) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadInt(valaddr + (i+2) * 4);
val2 = source.ReadInt(valaddr + (i + 3) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadInt(valaddr + i * 4);
var sval12 = source.ReadInt(valaddr + (i + 1) * 4);
var sval2 = source.ReadInt(valaddr + (i + 2) * 4);
var sval22 = source.ReadInt(valaddr + (i + 3) * 4);
var x1 = (int)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (int)(pval1 / tval1 * (sval22 - sval12) + sval12);
result.AddPoint(x1, x2, time1, qq[skey.Key]);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadInt(valaddr + i * 4);
val2 = source.ReadInt(valaddr + (i + 1) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadInt(valaddr + (i + 2) * 4);
val2 = source.ReadInt(valaddr + (i + 3) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadInt(valaddr + i * 4);
val2 = source.ReadInt(valaddr + (i + 1) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else
{
val = source.ReadInt(valaddr + (i + 2) * 4);
val2 = source.ReadInt(valaddr + (i + 3) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadInt(valaddr + (i + 2) * 4);
var val2 = source.ReadInt(valaddr + (i + 3) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
}
}
}
}
else if (typeof(T) == typeof(IntPoint3Data))
{
var qq = source.ReadBytes(qs.Count * 14 + 16 + sourceAddr, qs.Count);
foreach (var time1 in time)
{
for (int i = 0; i < vv.Length - 1; i++)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadInt(valaddr + i * 4);
var val2 = source.ReadInt(valaddr + (i + 1) * 4);
var val3 = source.ReadInt(valaddr + (i + 2) * 4);
result.AddPoint(val, val2,val3, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadInt(valaddr + i * 4);
var val2 = source.ReadInt(valaddr + (i + 1) * 4);
var val3 = source.ReadInt(valaddr + (i + 2) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadInt(valaddr + (i+3) * 4);
val2 = source.ReadInt(valaddr + (i +4) * 4);
val3 = source.ReadInt(valaddr + (i + 5) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadInt(valaddr + i * 4);
var sval12 = source.ReadInt(valaddr + (i + 1) * 4);
var sval13 = source.ReadInt(valaddr + (i + 2) * 4);
var sval2 = source.ReadInt(valaddr + (i + 3) * 4);
var sval22 = source.ReadInt(valaddr + (i + 4) * 4);
var sval23 = source.ReadInt(valaddr + (i + 5) * 4);
var x1 = (int)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (int)(pval1 / tval1 * (sval22 - sval12) + sval12);
var x3 = (int)(pval1 / tval1 * (sval23 - sval13) + sval12);
result.AddPoint(x1, x2, x3, time1, qq[skey.Key]);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadInt(valaddr + i * 4);
val2 = source.ReadInt(valaddr + (i + 1) * 4);
val3 = source.ReadInt(valaddr + (i + 2) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadInt(valaddr + (i + 3) * 4);
val2 = source.ReadInt(valaddr + (i + 4) * 4);
val3 = source.ReadInt(valaddr + (i + 5) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadInt(valaddr + i * 4);
val2 = source.ReadInt(valaddr + (i + 1) * 4);
val3 = source.ReadInt(valaddr + (i + 2) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else
{
val = source.ReadInt(valaddr + (i + 3) * 4);
val2 = source.ReadInt(valaddr + (i + 4) * 4);
val3 = source.ReadInt(valaddr + (i + 5) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadInt(valaddr + (i + 3) * 4);
var val2 = source.ReadInt(valaddr + (i + 4) * 4);
var val3 = source.ReadInt(valaddr + (i + 5) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
}
}
}
}
else if (typeof(T) == typeof(UIntPoint3Data))
{
var qq = source.ReadBytes(qs.Count * 14 + 16 + sourceAddr, qs.Count);
foreach (var time1 in time)
{
for (int i = 0; i < vv.Length - 1; i++)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadUInt(valaddr + i * 4);
var val2 = source.ReadUInt(valaddr + (i + 1) * 4);
var val3 = source.ReadUInt(valaddr + (i + 2) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadUInt(valaddr + i * 4);
var val2 = source.ReadUInt(valaddr + (i + 1) * 4);
var val3 = source.ReadUInt(valaddr + (i + 2) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadUInt(valaddr + (i + 3) * 4);
val2 = source.ReadUInt(valaddr + (i + 4) * 4);
val3 = source.ReadUInt(valaddr + (i + 5) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadUInt(valaddr + i * 4);
var sval12 = source.ReadUInt(valaddr + (i + 1) * 4);
var sval13 = source.ReadUInt(valaddr + (i + 2) * 4);
var sval2 = source.ReadUInt(valaddr + (i + 3) * 4);
var sval22 = source.ReadUInt(valaddr + (i + 4) * 4);
var sval23 = source.ReadUInt(valaddr + (i + 5) * 4);
var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12);
var x3 = (uint)(pval1 / tval1 * (sval23 - sval13) + sval12);
result.AddPoint(x1, x2, x3, time1, qq[skey.Key]);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadUInt(valaddr + i * 4);
val2 = source.ReadUInt(valaddr + (i + 1) * 4);
val3 = source.ReadUInt(valaddr + (i + 2) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadUInt(valaddr + (i + 3) * 4);
val2 = source.ReadUInt(valaddr + (i + 4) * 4);
val3 = source.ReadUInt(valaddr + (i + 5) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadUInt(valaddr + i * 4);
val2 = source.ReadUInt(valaddr + (i + 1) * 4);
val3 = source.ReadUInt(valaddr + (i + 2) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else
{
val = source.ReadUInt(valaddr + (i + 3) * 4);
val2 = source.ReadUInt(valaddr + (i + 4) * 4);
val3 = source.ReadUInt(valaddr + (i + 5) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadUInt(valaddr + (i + 3) * 4);
var val2 = source.ReadUInt(valaddr + (i + 4) * 4);
var val3 = source.ReadUInt(valaddr + (i + 5) * 4);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
}
}
}
}
else if (typeof(T) == typeof(UIntPointData))
{
var qq = source.ReadBytes(qs.Count * 10 + 16 + sourceAddr, qs.Count);
foreach (var time1 in time)
{
for (int i = 0; i < vv.Length - 1; i++)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadUInt(valaddr + i * 4);
var val2 = source.ReadUInt(valaddr + (i + 1) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadUInt(valaddr + i * 4);
var val2 = source.ReadUInt(valaddr + (i + 1) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadUInt(valaddr + (i + 2) * 4);
val2 = source.ReadUInt(valaddr + (i + 3) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadUInt(valaddr + i * 4);
var sval12 = source.ReadUInt(valaddr + (i + 1) * 4);
var sval2 = source.ReadUInt(valaddr + (i + 2) * 4);
var sval22 = source.ReadUInt(valaddr + (i + 3) * 4);
var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12);
result.AddPoint(x1, x2, time1, qq[skey.Key]);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadUInt(valaddr + i * 4);
val2 = source.ReadUInt(valaddr + (i + 1) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadUInt(valaddr + (i + 2) * 4);
val2 = source.ReadUInt(valaddr + (i + 3) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadUInt(valaddr + i * 4);
val2 = source.ReadUInt(valaddr + (i + 1) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else
{
val = source.ReadUInt(valaddr + (i + 2) * 4);
val2 = source.ReadUInt(valaddr + (i + 3) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadUInt(valaddr + (i + 2) * 4);
var val2 = source.ReadUInt(valaddr + (i + 3) * 4);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
}
}
}
}
else if (typeof(T) == typeof(LongPointData))
{
var qq = source.ReadBytes(qs.Count * 18 + 16 + sourceAddr, qs.Count);
foreach (var time1 in time)
{
for (int i = 0; i < vv.Length - 1; i++)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadLong(valaddr + i * 8);
var val2 = source.ReadLong(valaddr + (i + 1) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadLong(valaddr + i * 8);
var val2 = source.ReadLong(valaddr + (i + 1) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadLong(valaddr + (i + 2) * 8);
val2 = source.ReadLong(valaddr + (i + 3) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadLong(valaddr + i * 8);
var sval12 = source.ReadLong(valaddr + (i + 1) * 8);
var sval2 = source.ReadLong(valaddr + (i + 2) * 8);
var sval22 = source.ReadLong(valaddr + (i + 3) * 8);
var x1 = (long)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (long)(pval1 / tval1 * (sval22 - sval12) + sval12);
result.AddPoint(x1, x2, time1, qq[skey.Key]);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadLong(valaddr + i * 8);
val2 = source.ReadLong(valaddr + (i + 1) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadLong(valaddr + (i + 2) * 8);
val2 = source.ReadLong(valaddr + (i + 3) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadLong(valaddr + i * 8);
val2 = source.ReadLong(valaddr + (i + 1) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else
{
val = source.ReadLong(valaddr + (i + 2) * 8);
val2 = source.ReadLong(valaddr + (i + 3) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadLong(valaddr + (i + 2) * 8);
var val2 = source.ReadLong(valaddr + (i + 3) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
}
}
}
}
else if (typeof(T) == typeof(ULongPointData))
{
var qq = source.ReadBytes(qs.Count * 18 + 16 + sourceAddr, qs.Count);
foreach (var time1 in time)
{
for (int i = 0; i < vv.Length - 1; i++)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadULong(valaddr + i * 8);
var val2 = source.ReadULong(valaddr + (i + 1) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadULong(valaddr + i * 8);
var val2 = source.ReadULong(valaddr + (i + 1) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadULong(valaddr + (i + 2) * 8);
val2 = source.ReadULong(valaddr + (i + 3) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadULong(valaddr + i * 8);
var sval12 = source.ReadULong(valaddr + (i + 1) * 8);
var sval2 = source.ReadULong(valaddr + (i + 2) * 8);
var sval22 = source.ReadULong(valaddr + (i + 3) * 8);
var x1 = (long)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (long)(pval1 / tval1 * (sval22 - sval12) + sval12);
result.AddPoint(x1, x2, time1, qq[skey.Key]);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadULong(valaddr + i * 8);
val2 = source.ReadULong(valaddr + (i + 1) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadULong(valaddr + (i + 2) * 8);
val2 = source.ReadULong(valaddr + (i + 3) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadULong(valaddr + i * 8);
val2 = source.ReadULong(valaddr + (i + 1) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
else
{
val = source.ReadULong(valaddr + (i + 2) * 8);
val2 = source.ReadULong(valaddr + (i + 3) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadULong(valaddr + (i + 2) * 8);
var val2 = source.ReadULong(valaddr + (i + 3) * 8);
result.AddPoint(val, val2, time1, qq[skey.Key]);
count++;
break;
}
}
}
}
else if (typeof(T) == typeof(LongPoint3Data))
{
var qq = source.ReadBytes(qs.Count * 26 + 16 + sourceAddr, qs.Count);
foreach (var time1 in time)
{
for (int i = 0; i < vv.Length - 1; i++)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadLong(valaddr + i * 8);
var val2 = source.ReadLong(valaddr + (i + 1) * 8);
var val3 = source.ReadLong(valaddr + (i + 2) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadLong(valaddr + i * 8);
var val2 = source.ReadLong(valaddr + (i + 1) * 8);
var val3 = source.ReadLong(valaddr + (i + 2) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadLong(valaddr + (i + 3) * 8);
val2 = source.ReadLong(valaddr + (i + 4) * 8);
val3 = source.ReadLong(valaddr + (i + 5) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadLong(valaddr + i * 8);
var sval12 = source.ReadLong(valaddr + (i + 1) * 8);
var sval13 = source.ReadLong(valaddr + (i + 2) * 8);
var sval2 = source.ReadLong(valaddr + (i + 3) * 8);
var sval22 = source.ReadLong(valaddr + (i + 4) * 8);
var sval23 = source.ReadLong(valaddr + (i + 5) * 8);
var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12);
var x3 = (uint)(pval1 / tval1 * (sval23 - sval13) + sval12);
result.AddPoint(x1, x2, x3, time1, qq[skey.Key]);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadLong(valaddr + i * 8);
val2 = source.ReadLong(valaddr + (i + 1) * 8);
val3 = source.ReadLong(valaddr + (i + 2) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadLong(valaddr + (i + 3) * 8);
val2 = source.ReadLong(valaddr + (i + 4) * 8);
val3 = source.ReadLong(valaddr + (i + 5) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadLong(valaddr + i * 8);
val2 = source.ReadLong(valaddr + (i + 1) * 8);
val3 = source.ReadLong(valaddr + (i + 2) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else
{
val = source.ReadLong(valaddr + (i + 3) * 8);
val2 = source.ReadLong(valaddr + (i + 4) * 8);
val3 = source.ReadLong(valaddr + (i + 5) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadLong(valaddr + (i + 3) * 8);
var val2 = source.ReadLong(valaddr + (i + 4) * 8);
var val3 = source.ReadLong(valaddr + (i + 5) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
}
}
}
}
else if (typeof(T) == typeof(ULongPoint3Data))
{
var qq = source.ReadBytes(qs.Count * 26 + 16 + sourceAddr, qs.Count);
foreach (var time1 in time)
{
for (int i = 0; i < vv.Length - 1; i++)
{
var skey = vv[i];
var snext = vv[i + 1];
if (time1 == skey.Value.Item1)
{
var val = source.ReadULong(valaddr + i * 8);
var val2 = source.ReadULong(valaddr + (i + 1) * 8);
var val3 = source.ReadULong(valaddr + (i + 2) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
}
else if (time1 > skey.Value.Item1 && time1 < snext.Value.Item1)
{
switch (type)
{
case QueryValueMatchType.Previous:
var val = source.ReadULong(valaddr + i * 8);
var val2 = source.ReadULong(valaddr + (i + 1) * 8);
var val3 = source.ReadULong(valaddr + (i + 2) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.After:
val = source.ReadULong(valaddr + (i + 3) * 8);
val2 = source.ReadULong(valaddr + (i + 4) * 8);
val3 = source.ReadULong(valaddr + (i + 5) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
case QueryValueMatchType.Linear:
if (qq[skey.Key] < 20 && qq[snext.Key] < 20)
{
var pval1 = (time1 - skey.Value.Item1).TotalMilliseconds;
var tval1 = (snext.Value.Item1 - skey.Value.Item1).TotalMilliseconds;
var sval1 = source.ReadULong(valaddr + i * 8);
var sval12 = source.ReadULong(valaddr + (i + 1) * 8);
var sval13 = source.ReadULong(valaddr + (i + 2) * 8);
var sval2 = source.ReadULong(valaddr + (i + 3) * 8);
var sval22 = source.ReadULong(valaddr + (i + 4) * 8);
var sval23 = source.ReadULong(valaddr + (i + 5) * 8);
var x1 = (uint)(pval1 / tval1 * (sval2 - sval1) + sval1);
var x2 = (uint)(pval1 / tval1 * (sval22 - sval12) + sval12);
var x3 = (uint)(pval1 / tval1 * (sval23 - sval13) + sval12);
result.AddPoint(x1, x2, x3, time1, qq[skey.Key]);
}
else if (qq[skey.Key] < 20)
{
val = source.ReadULong(valaddr + i * 8);
val2 = source.ReadULong(valaddr + (i + 1) * 8);
val3 = source.ReadULong(valaddr + (i + 2) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else if (qq[snext.Key] < 20)
{
val = source.ReadULong(valaddr + (i + 3) * 8);
val2 = source.ReadULong(valaddr + (i + 4) * 8);
val3 = source.ReadULong(valaddr + (i + 5) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else
{
result.Add(0, time1, (byte)QualityConst.Null);
}
count++;
break;
case QueryValueMatchType.Closed:
var pval = (time1 - skey.Value.Item1).TotalMilliseconds;
var fval = (snext.Value.Item1 - time1).TotalMilliseconds;
if (pval < fval)
{
val = source.ReadULong(valaddr + i * 8);
val2 = source.ReadULong(valaddr + (i + 1) * 8);
val3 = source.ReadULong(valaddr + (i + 2) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
else
{
val = source.ReadULong(valaddr + (i + 3) * 8);
val2 = source.ReadULong(valaddr + (i + 4) * 8);
val3 = source.ReadULong(valaddr + (i + 5) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
}
count++;
break;
}
break;
}
else if (time1 == snext.Value.Item1)
{
var val = source.ReadULong(valaddr + (i + 3) * 8);
var val2 = source.ReadULong(valaddr + (i + 4) * 8);
var val3 = source.ReadULong(valaddr + (i + 5) * 8);
result.AddPoint(val, val2, val3, time1, qq[skey.Key]);
count++;
break;
}
}
}
}
return count;
}
}
}