private void ProcessActivities(ActivityEvent @event)
        {
            EnsureInitialized(@event);

            while (FirstQueuedEventStartsBefore(@event))
            {
                ProcessActivities(_queue.Dequeue());
            }

            while (_currentWindow.EndsBeforeStartOf(@event))
            {
                ProceedToNextWindow(@event);
            }

            if (_currentWindow.EndsBeforeEndOf(@event))
            {
                var headAndTail = @event.SplitAt(_currentWindow.End);
                _currentWindow.Add(headAndTail.Item1);
                _queue.Enqueue(headAndTail.Item2);
            }
            else
            {
                _currentWindow.Add(@event);
            }
        }