Intrebute
6/23/2017 - 3:57 PM

A small class that given a sampling of a binary state reports whether that state rose, fell, remained high, or remained low.

A small class that given a sampling of a binary state reports whether that state rose, fell, remained high, or remained low.

class edgeGizmo
{
public:
	enum class edgeState { RISE, HIGH, FALL, LOW };
	edgeGizmo() : prev(edgeState::LOW) {};
	edgeState update(bool pressed)
	{
		using is = edgeState;
		switch(prev)
		{
			case is::RISE:
			{
				prev = pressed ? is::FALL : is::HIGH;
			} break;
			case is::FALL:
			{
				prev = pressed ? is::LOW : is::RISE;
			} break;
			case is::HIGH:
			{
				prev = pressed ? is::FALL : is::HIGH;
			} break;
			case is::LOW:
			{
				prev = pressed ? is::LOW : is::RISE;
			} break;
		}
		return prev;
	}
	edgeState peek()
	{
		return prev;
	}
private:
	edgeState prev;
};