Ejemplo n.º 1
0
bool
EMDate	::	IsValid	() const
{	// only one needs to be valid
	return IsYearValid()
		||	IsMonthValid()
		||	IsDayValid();
}
Ejemplo n.º 2
0
void
EMDate	::	_rollDay()
{
	int16 daysInMonth = DaysInMonth();
	if (daysInMonth < 1) {
		fMonth = 1;
		daysInMonth = DaysInMonth();
	}

	//printf("\t\t_rollDay() : %i / %i\n", fDay, daysInMonth);

	if (fDay < 1) {	// going backwards!
		--fMonth;
		_rollMonth();
		fDay += DaysInMonth();
	} else if (fDay > daysInMonth) {
		++fMonth;

		fDay = daysInMonth - fDay;
		daysInMonth = DaysInMonth();

		if (fDay > daysInMonth)
			fDay = daysInMonth;

		if (fDay < 1)	// result of fDay > daysInMonth
			fDay = -fDay;

		_rollMonth();
	}

	if (!IsDayValid())
		_rollDay();
		// should never recurse more than once
}
Ejemplo n.º 3
0
EMDate&
EMDate	::	operator -= (const EMDate& other)
{
	if (!IsValid() || !other.IsValid())
		return *this;	// you can't subtract from an invalid date

	if (other.fDay > 0) {
		if (IsDayValid()) {
			fDay -= other.fDay;
			_rollDay();
			_rollMonth();
		}
	}

	if (other.IsMonthValid()) {
		if (IsMonthValid()) {
			int16 daysInPrevMonth = DaysInMonth();
			fMonth -= other.fMonth;
			_rollMonth();

			if (fDay == daysInPrevMonth)
				fDay = DaysInMonth();

			if (fDay > DaysInMonth())
				fDay = DaysInMonth();
		}
	}

	if (other.IsYearValid()) {
		if (IsYearValid())
			fYear -= other.fYear;
	}
	_enforceKeepDay();
	return *this;
}
Ejemplo n.º 4
0
EMDate&
EMDate	::	operator += (const EMDate& other)
{
		if (!other.IsValid())	// we don't care if we are valid!
		return *this;

	if (other.fDay > 0) {
		if (IsDayValid() == false) {
			fDay = other.fDay;
			_rollDay();
		}
		else {
			fDay += other.fDay;
			_rollDay();
			_rollMonth();
		}
	}

	if (other.IsMonthValid()) {
		if (IsMonthValid() == false) {
			fMonth = other.fMonth;
			_rollMonth();
		}
		else {
			int16 daysInPrevMonth = DaysInMonth();
			fMonth += other.fMonth;
			_rollMonth();

			if (fDay == daysInPrevMonth)
				fDay = DaysInMonth();

			if (fDay > DaysInMonth())
				fDay = DaysInMonth();
		}
	}

	if (other.IsYearValid()) {
		if (IsYearValid() == false)
			fYear = other.fYear;
		else
			fYear += other.fYear;
	}
	_enforceKeepDay();

	return *this;
}
Ejemplo n.º 5
0
STATIC
BOOLEAN
EFIAPI
IsTimeValid(
  IN EFI_TIME *Time
  )
{
  // Check the input parameters are within the range specified by UEFI
  if (Time->Year   < 1900               ||
      Time->Year   > 9999               ||
      Time->Month  < 1                  ||
      Time->Month  > 12                 ||
      !IsDayValid (Time)                ||
      Time->Hour   > 23                 ||
      Time->Minute > 59                 ||
      Time->Second > 59                 ||
      !IsValidTimeZone (Time->TimeZone) ||
      !IsValidDaylight (Time->Daylight)) {
    return FALSE;
  }
  return TRUE;
}
Ejemplo n.º 6
0
BOOLEAN
EFIAPI
IsTimeValid(
  IN EFI_TIME *Time
  )
{
  // Check the input parameters are within the range specified by UEFI
  if ((Time->Year   < 2000) ||
     (Time->Year   > 2099) ||
     (Time->Month  < 1   ) ||
     (Time->Month  > 12  ) ||
     (!IsDayValid (Time)    ) ||
     (Time->Hour   > 23  ) ||
     (Time->Minute > 59  ) ||
     (Time->Second > 59  ) ||
     (Time->Nanosecond > 999999999) ||
     (!((Time->TimeZone == EFI_UNSPECIFIED_TIMEZONE) || ((Time->TimeZone >= -1440) && (Time->TimeZone <= 1440)))) ||
     (Time->Daylight & (~(EFI_TIME_ADJUST_DAYLIGHT | EFI_TIME_IN_DAYLIGHT)))
  ) {
    return FALSE;
  }

  return TRUE;
}