max() in phobos?
Sean Kelly
sean at f4.ca
Mon Nov 6 11:54:22 PST 2006
Bill Baxter wrote:
> Is there a generic 'max' function anywhere in phobos?
> The closest I could find was std.math.fmax().
Not that works for all input types, as far as I know. However,
something like the code below should work. This is off the top of my
head so it may have bugs, but it's a general idea of what such a
template function may need to do.
/**
* Returns the largest of the two supplied types, or the first type if
* the sizes are identical. If either type is an object then both must
* be objects of either the same type or where one is a base class of
* the other. Interfaces are not supported.
*/
template largestOrConvertible( T, U )
{
static if( is( T : Object ) || is( U : Object ) )
{
static assert( is( T : Object ) && is( U : Object ),
"Types incompatible." );
static if( T : U )
alias T largestOrConvertible;
else static if( U : T )
alias U largestOrConvertible;
else static assert( false, "Object types must be related." );
}
else static if( is( T : Interface ) || is( U : Interface ) )
static assert( false, "Interface types not yet supported." );
else static if( T.sizeof < U.sizeof )
alias U largestOf; // concrete type, U larger
else alias T largestOf; // concrete type, T larger or equal
}
template max( T, U )
{
largestOrConvertible!(T,U) max( T t, U u )
{
return t > u ? t : u;
}
}
template min( T, U )
{
largestOrConvertible!(T,U) min( T t, U u )
{
return t < u ? t : u;
}
}
More information about the Digitalmars-d-learn
mailing list