BUG: regIOobject: handle overflow correctly
This commit is contained in:
parent
f4e38fa67c
commit
a1f25b8746
@ -325,13 +325,41 @@ bool Foam::regIOobject::checkOut()
|
||||
|
||||
bool Foam::regIOobject::upToDate(const regIOobject& a) const
|
||||
{
|
||||
if (a.eventNo() >= eventNo_)
|
||||
label da = a.eventNo()-eventNo_;
|
||||
|
||||
// In case of overflow *this.event() might be 2G but a.event() might
|
||||
// have overflowed to 0.
|
||||
// Detect this by detecting a massive difference (labelMax/2) between
|
||||
// the two events.
|
||||
//
|
||||
// a *this return
|
||||
// - ----- ------
|
||||
// normal operation:
|
||||
// 11 10 false
|
||||
// 11 11 false
|
||||
// 10 11 true
|
||||
// overflow situation:
|
||||
// 0 big false
|
||||
// big 0 true
|
||||
|
||||
if (da > labelMax/2)
|
||||
{
|
||||
// *this.event overflowed but a.event not yet
|
||||
return true;
|
||||
}
|
||||
else if (da < -labelMax/2)
|
||||
{
|
||||
// a.event overflowed but *this not yet
|
||||
return false;
|
||||
}
|
||||
else if (da < 0)
|
||||
{
|
||||
// My event number higher than a
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -342,18 +370,7 @@ bool Foam::regIOobject::upToDate
|
||||
const regIOobject& b
|
||||
) const
|
||||
{
|
||||
if
|
||||
(
|
||||
a.eventNo() >= eventNo_
|
||||
|| b.eventNo() >= eventNo_
|
||||
)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return upToDate(a) && upToDate(b);
|
||||
}
|
||||
|
||||
|
||||
@ -364,19 +381,7 @@ bool Foam::regIOobject::upToDate
|
||||
const regIOobject& c
|
||||
) const
|
||||
{
|
||||
if
|
||||
(
|
||||
a.eventNo() >= eventNo_
|
||||
|| b.eventNo() >= eventNo_
|
||||
|| c.eventNo() >= eventNo_
|
||||
)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return upToDate(a) && upToDate(b) && upToDate(c);
|
||||
}
|
||||
|
||||
|
||||
@ -388,20 +393,7 @@ bool Foam::regIOobject::upToDate
|
||||
const regIOobject& d
|
||||
) const
|
||||
{
|
||||
if
|
||||
(
|
||||
a.eventNo() >= eventNo_
|
||||
|| b.eventNo() >= eventNo_
|
||||
|| c.eventNo() >= eventNo_
|
||||
|| d.eventNo() >= eventNo_
|
||||
)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return upToDate(a) && upToDate(b) && upToDate(c) && upToDate(d);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user