diff --git a/ShoulderCase/@Timer/Timer.m b/ShoulderCase/@Timer/Timer.m new file mode 100644 index 0000000..d968930 --- /dev/null +++ b/ShoulderCase/@Timer/Timer.m @@ -0,0 +1,61 @@ +classdef Timer < handle + + properties (Constant, Hidden = true) + data = TimerData; + end + + + + methods (Static) + + function output = start + Timer.data.addStartTime(datetime('now')); + output = Timer.data.getLastTimerID; + end + + function output = stop(varargin) + if (nargin == 0) + output = Timer.stopLastTimer; + elseif Timer.exists(varargin{1}) + output = Timer.stopSpecificTimer(varargin{1}); + end + end + + function clearAll + Timer.data.clearAll; + end + + end + + + methods (Static, Hidden = true) + + function output = stopLastTimer + timerID = Timer.data.getLastTimerID; + output = Timer.stopSpecificTimer(timerID); + end + + function output = stopSpecificTimer(timerID) + if not(Timer.exists(timerID)) + output = false; + return + end + startTime = Timer.data.getStartTime(timerID); + Timer.data.removeStartTime(timerID); + output = Timer.getElapsedTime(datetime('now')-startTime); + end + + function output = exists(timerID) + output = Timer.data.timerExists(timerID); + end + + function output = getElapsedTime(duration) + elapsedTime = char(duration); + output = [elapsedTime(1:2) ' hours ' elapsedTime(4:5) ' minutes ' elapsedTime(7:8) ' seconds']; + end + + end + + + +end diff --git a/ShoulderCase/@TimerData/TimerData.m b/ShoulderCase/@TimerData/TimerData.m new file mode 100644 index 0000000..b319a25 --- /dev/null +++ b/ShoulderCase/@TimerData/TimerData.m @@ -0,0 +1,48 @@ +classdef TimerData < handle + + properties (Access = ?Timer) + startTimes + end + + methods (Access = ?Timer) + + function obj = TimerData + obj.startTimes = containers.Map; + end + + function addStartTime(obj,time) + timerID = num2str(obj.startTimes.Count+1); + obj.startTimes(timerID) = time; + end + + function removeStartTime(obj,timerID) + obj.startTimes.remove(timerID); + end + + function output = getLastTimerID(obj) + output = []; + timerIDs = obj.startTimes.keys; + if not(isempty(timerIDs)) + output = timerIDs{end}; + end + end + + function output = getStartTime(obj,timerID) + output = obj.startTimes(timerID); + end + + function clearAll(obj) + timers = obj.startTimes.keys; + for i = 1:length(timers) + obj.startTimes.remove(timers{i}); + end + end + + function output = timerExists(obj,timerID) + output = obj.startTimes.isKey(timerID); + end + + end + + +end