internal void Add(long timestamp, bool accelerating) { Purge(timestamp - maxWindowSize); var added = pool.Acquire(); added.Timestamp = timestamp; added.IsAccelerating = accelerating; added.Next = null; if (newest != null) { newest.Next = added; } newest = added; if (oldest == null) { oldest = added; } sampleCount++; if (accelerating) { acceleratingCount++; } }
internal void Clear() { while (oldest != null) { var removed = oldest; oldest = removed.Next; pool.Release(removed); } newest = null; sampleCount = 0; acceleratingCount = 0; }
internal AccelerometerSample Acquire() { var aquired = head; if (aquired == null) { aquired = new AccelerometerSample(); } else { head = aquired.Next; } return(aquired); }
void Purge(long cutoff) { while (sampleCount >= minQueueSize && oldest != null && cutoff - oldest.Timestamp > 0) { var removed = oldest; if (removed.IsAccelerating) { acceleratingCount--; } sampleCount--; oldest = removed.Next; if (oldest == null) { newest = null; } pool.Release(removed); } }
public static void Main() { AccelerometerSample.Run(); //ServoTest(); }
internal void Release(AccelerometerSample sample) { sample.Next = head; head = sample; }