protected Waypoint(boolean driveOnRightSideBefore,                       
                       Position position,
                       Turn turn,
                       int exitCount,
                       int distanceMetersToEnd,
                       int timeSecondsToEnd,
                       String roadNameAfter,
                       int speedLimitKmhAfter
                       ) {
        if (position == null
            || turn == null
            || exitCount < 0
            || distanceMetersToEnd < 0
            || timeSecondsToEnd < 0
            || roadNameAfter == null
            || speedLimitKmhAfter <= 0
            ) {
            throw new IllegalArgumentException();
        }

        m_position = position;
        m_turn = turn;
        m_distanceMetersToEnd = distanceMetersToEnd;
        m_speedLimitKmhAfter = speedLimitKmhAfter;
        m_timeSecondsToEnd = timeSecondsToEnd;
        m_roadNameAfter = roadNameAfter;
        m_exitCount = exitCount;
        m_driveOnRightSideBefore = driveOnRightSideBefore;
    }