/// <summary> /// Gets a set of compressed values /// </summary> /// <param name="inclusiveStartTimestamp">The start of the values to get</param> /// <param name="exclusiveEndTimestamp">The exclusive end of the values to get</param> /// <returns>A compressed data block of values</returns> public DataBlock[] GetCompressedValues(DateTime inclusiveStartTimestamp, DateTime exclusiveEndTimestamp) { var dataBlocks = new List<DataBlock>(); if (Values != null) { var orderedKeyValuePairs = Values.Where(x => x.Key >= inclusiveStartTimestamp && x.Key < exclusiveEndTimestamp).OrderBy(x => x.Key).ToArray(); var i = 0; while (i < orderedKeyValuePairs.Length) { var dataBlock = new DataBlock { DataInterval = _owner.Owner.DataInterval, StartTime = orderedKeyValuePairs[i].Key }; var values = new List<float> { orderedKeyValuePairs[i].Value }; var j = 0; while (i + j + 1 < orderedKeyValuePairs.Length && orderedKeyValuePairs[i + j + 1].Key - orderedKeyValuePairs[i + j].Key == new TimeSpan(0, dataBlock.DataInterval, 0)) { values.Add(orderedKeyValuePairs[i + j + 1].Value); j++; } dataBlock.Values = values.ToArray(); dataBlocks.Add(dataBlock); i += j + 1; } } return dataBlocks.ToArray(); }
/// <summary> /// Adds a block of compressed values to the list of values /// </summary> /// <param name="values">The data block to add</param> public void AddCompressedValues(DataBlock[] values) { if(values == null) return; foreach (var block in values) { for (var i = 0; i < block.Values.Length; i++) { Values[block.StartTime.AddMinutes(i * block.DataInterval)] = block.Values[i]; } } }