SwingWatch WatchKit Extension/RunningBuffer.swift
| /* | 
| Copyright (C) 2016 Apple Inc. All Rights Reserved. | 
| See LICENSE.txt for this sample’s licensing information | 
| Abstract: | 
| This class manages a running buffer of Double values. | 
| */ | 
| import Foundation | 
| class RunningBuffer { | 
| // MARK: Properties | 
| var buffer = [Double]() | 
| var size = 0 | 
| // MARK: Initialization | 
|     init(size: Int) { | 
| self.size = size | 
| self.buffer = [Double](repeating: 0.0, count: self.size) | 
| } | 
| // MARK: Running Buffer | 
|     func addSample(_ sample: Double) { | 
| buffer.insert(sample, at:0) | 
|         if buffer.count > size  { | 
| buffer.removeLast() | 
| } | 
| } | 
|     func reset() { | 
| buffer.removeAll(keepingCapacity: true) | 
| } | 
|     func isFull() -> Bool { | 
| return size == buffer.count | 
| } | 
|     func sum() -> Double { | 
| return buffer.reduce(0.0, +) | 
| } | 
|     func min() -> Double { | 
| var min = 0.0 | 
|         if let bufMin = buffer.min() { | 
| min = bufMin | 
| } | 
| return min | 
| } | 
|     func max() -> Double { | 
| var max = 0.0 | 
|         if let bufMax = buffer.max() { | 
| max = bufMax | 
| } | 
| return max | 
| } | 
|     func recentMean() -> Double { | 
| // Calculate the mean over the beginning half of the buffer. | 
| let recentCount = self.size / 2 | 
| var mean = 0.0 | 
|         if (buffer.count >= recentCount) { | 
| let recentBuffer = buffer[0..<recentCount] | 
| mean = recentBuffer.reduce(0.0, +) / Double(recentBuffer.count) | 
| } | 
| return mean | 
| } | 
| } | 
Copyright © 2016 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2016-09-13