@ -1616,7 +1616,7 @@ namespace Exiv2 {
std : : string ValueType < T > : : toString ( long n ) const
std : : string ValueType < T > : : toString ( long n ) const
{
{
ok_ = true ;
ok_ = true ;
return Exiv2 : : toString < T > ( value_ [n ] ) ;
return Exiv2 : : toString < T > ( value_ .at ( n ) ) ;
}
}
// Default implementation
// Default implementation
@ -1624,69 +1624,69 @@ namespace Exiv2 {
long ValueType < T > : : toLong ( long n ) const
long ValueType < T > : : toLong ( long n ) const
{
{
ok_ = true ;
ok_ = true ;
return static_cast < long > ( value_ [n ] ) ;
return static_cast < long > ( value_ .at ( n ) ) ;
}
}
// #55 crash when value_ [n] .first == LONG_MIN
// #55 crash when value_ .at(n) .first == LONG_MIN
# define LARGE_INT 1000000
# define LARGE_INT 1000000
// Specialization for rational
// Specialization for rational
template < >
template < >
inline long ValueType < Rational > : : toLong ( long n ) const
inline long ValueType < Rational > : : toLong ( long n ) const
{
{
ok_ = ( value_ [n ] . second ! = 0 & & INT_MIN < value_ [n ] . first & & value_ [ n ] . first < INT_MAX ) ;
ok_ = ( value_ .at ( n ) . second ! = 0 & & INT_MIN < value_ .at ( n ) . first & & value_ . at ( n ) . first < INT_MAX ) ;
if ( ! ok_ ) return 0 ;
if ( ! ok_ ) return 0 ;
return value_ [n ] . first / value_ [ n ] . second ;
return value_ .at ( n ) . first / value_ . at ( n ) . second ;
}
}
// Specialization for unsigned rational
// Specialization for unsigned rational
template < >
template < >
inline long ValueType < URational > : : toLong ( long n ) const
inline long ValueType < URational > : : toLong ( long n ) const
{
{
ok_ = ( value_ [n ] . second ! = 0 & & value_ [n ] . first < LARGE_INT ) ;
ok_ = ( value_ .at ( n ) . second ! = 0 & & value_ .at ( n ) . first < LARGE_INT ) ;
if ( ! ok_ ) return 0 ;
if ( ! ok_ ) return 0 ;
return value_ [n ] . first / value_ [ n ] . second ;
return value_ .at ( n ) . first / value_ . at ( n ) . second ;
}
}
// Default implementation
// Default implementation
template < typename T >
template < typename T >
float ValueType < T > : : toFloat ( long n ) const
float ValueType < T > : : toFloat ( long n ) const
{
{
ok_ = true ;
ok_ = true ;
return static_cast < float > ( value_ [n ] ) ;
return static_cast < float > ( value_ .at ( n ) ) ;
}
}
// Specialization for rational
// Specialization for rational
template < >
template < >
inline float ValueType < Rational > : : toFloat ( long n ) const
inline float ValueType < Rational > : : toFloat ( long n ) const
{
{
ok_ = ( value_ [n ] . second ! = 0 ) ;
ok_ = ( value_ .at ( n ) . second ! = 0 ) ;
if ( ! ok_ ) return 0.0f ;
if ( ! ok_ ) return 0.0f ;
return static_cast < float > ( value_ [n ] . first ) / value_ [ n ] . second ;
return static_cast < float > ( value_ .at ( n ) . first ) / value_ . at ( n ) . second ;
}
}
// Specialization for unsigned rational
// Specialization for unsigned rational
template < >
template < >
inline float ValueType < URational > : : toFloat ( long n ) const
inline float ValueType < URational > : : toFloat ( long n ) const
{
{
ok_ = ( value_ [n ] . second ! = 0 ) ;
ok_ = ( value_ .at ( n ) . second ! = 0 ) ;
if ( ! ok_ ) return 0.0f ;
if ( ! ok_ ) return 0.0f ;
return static_cast < float > ( value_ [n ] . first ) / value_ [ n ] . second ;
return static_cast < float > ( value_ .at ( n ) . first ) / value_ . at ( n ) . second ;
}
}
// Default implementation
// Default implementation
template < typename T >
template < typename T >
Rational ValueType < T > : : toRational ( long n ) const
Rational ValueType < T > : : toRational ( long n ) const
{
{
ok_ = true ;
ok_ = true ;
return Rational ( value_ [n ] , 1 ) ;
return Rational ( value_ .at ( n ) , 1 ) ;
}
}
// Specialization for rational
// Specialization for rational
template < >
template < >
inline Rational ValueType < Rational > : : toRational ( long n ) const
inline Rational ValueType < Rational > : : toRational ( long n ) const
{
{
ok_ = true ;
ok_ = true ;
return Rational ( value_ [n ] . first , value_ [ n ] . second ) ;
return Rational ( value_ .at ( n ) . first , value_ . at ( n ) . second ) ;
}
}
// Specialization for unsigned rational
// Specialization for unsigned rational
template < >
template < >
inline Rational ValueType < URational > : : toRational ( long n ) const
inline Rational ValueType < URational > : : toRational ( long n ) const
{
{
ok_ = true ;
ok_ = true ;
return Rational ( value_ [n ] . first , value_ [ n ] . second ) ;
return Rational ( value_ .at ( n ) . first , value_ . at ( n ) . second ) ;
}
}
// Specialization for float.
// Specialization for float.
template < >
template < >
@ -1694,7 +1694,7 @@ namespace Exiv2 {
{
{
ok_ = true ;
ok_ = true ;
// Warning: This is a very simple conversion, see floatToRationalCast()
// Warning: This is a very simple conversion, see floatToRationalCast()
return floatToRationalCast ( value_ [n ] ) ;
return floatToRationalCast ( value_ .at ( n ) ) ;
}
}
// Specialization for double.
// Specialization for double.
template < >
template < >
@ -1702,7 +1702,7 @@ namespace Exiv2 {
{
{
ok_ = true ;
ok_ = true ;
// Warning: This is a very simple conversion, see floatToRationalCast()
// Warning: This is a very simple conversion, see floatToRationalCast()
return floatToRationalCast ( static_cast < float > ( value_ [n ] ) ) ;
return floatToRationalCast ( static_cast < float > ( value_ .at ( n ) ) ) ;
}
}
template < typename T >
template < typename T >