int32: Add IO operators for long on 32bit OS

On 32bit OSs long is not unambiguously int32_t (or int64_t) causing
problems for IO operator resolution.  This problem is avoided by
explicitly defining the following operators:
This commit is contained in:
Henry
2015-05-16 15:29:34 +01:00
parent 1976c0f298
commit 372dc26c8d
3 changed files with 25 additions and 1 deletions

View File

@ -69,6 +69,15 @@ bool read(const char*, int32_t&);
Istream& operator>>(Istream&, int32_t&);
Ostream& operator<<(Ostream&, const int32_t);
// On 32bit OSs long is not unambiguously int32_t (or int64_t) causing problems
// for IO operator resolution.
// This problem is avoided by explicitly defining the following operators:
#if WM_ARCH_OPTION == 32
Istream& operator>>(Istream&, long&);
Ostream& operator<<(Ostream&, const long);
#endif
//- Template specialization for pTraits<int32_t>
template<>
class pTraits<int32_t>

View File

@ -104,4 +104,18 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const int32_t i)
}
#if WM_ARCH_OPTION == 32
Foam::Istream& Foam::operator>>(Istream& is, long& i)
{
return operator>>(is, reinterpret_cast<int32_t&>(i));
}
Foam::Ostream& Foam::operator<<(Ostream& os, const long i)
{
os << int32_t(i);
return os;
}
#endif
// ************************************************************************* //

View File

@ -6,7 +6,8 @@ RANLIB = ranlib
CPP = cpp
LD = ld
GFLAGS = -D$(WM_ARCH) -DWM_$(WM_PRECISION_OPTION) -DWM_LABEL_SIZE=$(WM_LABEL_SIZE)
GFLAGS = -D$(WM_ARCH) -DWM_ARCH_OPTION=$(WM_ARCH_OPTION) \
-DWM_$(WM_PRECISION_OPTION) -DWM_LABEL_SIZE=$(WM_LABEL_SIZE)
GINC =
GLIBS = -lm
GLIB_LIBS =