mirror of
https://github.com/chronotope/chrono.git
synced 2025-10-02 15:26:12 +00:00
Remove Of::succ
This commit is contained in:
parent
2e00a1ca0b
commit
1835cfcde2
@ -1098,9 +1098,10 @@ impl NaiveDate {
|
||||
#[inline]
|
||||
#[must_use]
|
||||
pub const fn succ_opt(&self) -> Option<NaiveDate> {
|
||||
match self.of().succ() {
|
||||
Some(of) => Some(self.with_of(of)),
|
||||
None => NaiveDate::from_ymd_opt(self.year() + 1, 1, 1),
|
||||
let new_ol = (self.yof & OL_MASK) + (1 << 4);
|
||||
match new_ol <= MAX_OL {
|
||||
true => Some(NaiveDate { yof: self.yof & !OL_MASK | new_ol }),
|
||||
false => NaiveDate::from_yo_opt(self.year() + 1, 1),
|
||||
}
|
||||
}
|
||||
|
||||
@ -2309,6 +2310,17 @@ pub(super) const MAX_YEAR: i32 = (i32::MAX >> 13) - 1;
|
||||
/// `NaiveDate::MIN` pushes it beyond the valid, representable range.
|
||||
pub(super) const MIN_YEAR: i32 = (i32::MIN >> 13) + 1;
|
||||
|
||||
const ORDINAL_MASK: i32 = 0b1_1111_1111_0000;
|
||||
|
||||
const LEAP_YEAR_MASK: i32 = 0b1000;
|
||||
|
||||
// OL: ordinal and leap year flag.
|
||||
// With only these parts of the date an ordinal 366 in a common year would be encoded as
|
||||
// `((366 << 1) | 1) << 3`, and in a leap year as `((366 << 1) | 0) << 3`, which is less.
|
||||
// This allows for efficiently checking the ordinal exists depending on whether this is a leap year.
|
||||
const OL_MASK: i32 = ORDINAL_MASK | LEAP_YEAR_MASK;
|
||||
const MAX_OL: i32 = 366 << 4;
|
||||
|
||||
#[cfg(all(test, any(feature = "rustc-serialize", feature = "serde")))]
|
||||
fn test_encodable_json<F, E>(to_string: F)
|
||||
where
|
||||
|
@ -346,13 +346,6 @@ impl Of {
|
||||
Mdf::from_of(*self)
|
||||
}
|
||||
|
||||
/// Returns an `Of` with the next day, or `None` if this is the last day of the year.
|
||||
#[inline]
|
||||
pub(super) const fn succ(&self) -> Option<Of> {
|
||||
let of = Of(self.0 + (1 << 4));
|
||||
of.validate()
|
||||
}
|
||||
|
||||
/// Returns an `Of` with the previous day, or `None` if this is the first day of the year.
|
||||
#[inline]
|
||||
pub(super) const fn pred(&self) -> Option<Of> {
|
||||
@ -867,10 +860,6 @@ mod tests {
|
||||
assert!(Of::from_mdf(Mdf::new(2, 29, leap_year).unwrap()).is_some());
|
||||
assert!(Of::from_mdf(Mdf::new(2, 28, regular_year).unwrap()).is_some());
|
||||
|
||||
assert!(Of::new(365, regular_year).unwrap().succ().is_none());
|
||||
assert!(Of::new(365, leap_year).unwrap().succ().is_some());
|
||||
assert!(Of::new(366, leap_year).unwrap().succ().is_none());
|
||||
|
||||
assert!(Of::new(1, regular_year).unwrap().pred().is_none());
|
||||
assert!(Of::new(1, leap_year).unwrap().pred().is_none());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user