// ========== // 07.12.2011 /// <summary> /// Выборка точек из буфера в заданном интервале времени /// </summary> /// <param name="start">Время начала интервала</param> /// <param name="finish">Время конца интервала</param> /// <returns>Массив отобранных точек</returns> private GraphicValue[] GetValues(DateTime start, DateTime finish) { if (slim.TryEnterReadLock(300)) { try { if (values != null && values.Count > 0) { // Поиск начала и конца массива if (values[0].Time > finish) { return(null); } int jCount = values.Count; if (values[jCount - 1].Time < start) { return(null); } int j1 = -1; for (int j = 0; j < jCount; j++) { if (values[j].Time <= start) { continue; } j1 = j; break; } if (j1 == -1) { return(null); } int j2 = j1; for (int j = j1 + 1; j < jCount; j++) { if (values[j].Time > finish) { break; } j2 = j; } // копирование выделенного участка данных GraphicValue[] tmp = new GraphicValue[j2 - j1 + 1]; int jPos = 0; for (int j = j1; j <= j2; j++) { tmp[jPos] = values[j]; jPos++; } return(tmp); } } finally { slim.ExitReadLock(); } } return(null); }
// ========== // 07.12.2011 /// <summary> /// Выборка точек из буфера в заданном интервале времени /// </summary> /// <param name="start">Время начала интервала</param> /// <param name="finish">Время конца интервала</param> /// <returns>Массив отобранных точек</returns> private GraphicValue[] GetValues(DateTime start, DateTime finish) { if (slim.TryEnterReadLock(300)) { try { if (values != null && values.Count > 0) { // Поиск начала и конца массива if (values[0].Time > finish) return null; int jCount = values.Count; if (values[jCount - 1].Time < start) return null; int j1 = -1; for (int j = 0; j < jCount; j++) { if (values[j].Time <= start) continue; j1 = j; break; } if (j1 == -1) return null; int j2 = j1; for (int j = j1 + 1; j < jCount; j++) { if (values[j].Time > finish) break; j2 = j; } // копирование выделенного участка данных GraphicValue[] tmp = new GraphicValue[j2 - j1 + 1]; int jPos = 0; for (int j = j1; j <= j2; j++) { tmp[jPos] = values[j]; jPos++; } return tmp; } } finally { slim.ExitReadLock(); } } return null; }