mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-06-01 18:43:33 +02:00
aa7b63fa5f
VVV_min/max are functions that only operate on ints, and SDL_min/max are macros that operate on any type but double-evaluate everything. I know I more-or-less said earlier that SDL_min/max were dumb but I've changed my mind and think it's better to use them, taking care to make sure you don't double-evaluate, rather than trying to generate your own litany of functions with either your own hand-rolled generation macros, C++ templates, C11 generics, or GCC extensions (that last one you'd technically use in a macro but it doesn't really matter), all of which have more downsides than just not double-evaluating. And the upside of not double-evaluating is that you're disencouraged from having really complicated single-line min/max expressions and encouraged to precompute the values beforehand anyway so the final min/max is more readable. And furthermore you'll notice when you yourself end up doing double-evaluations anyway. I removed a couple instances of Graphics::len() being double-evaluated in this commit (as well as cleaned up some other min/max-using code). Although the only downside to those double-evaluations was unnecessary computation, rather than checking the wrong result or having multiple side effects, thankfully, it's still good to minimize double-evaluations where possible.
28 lines
395 B
C
28 lines
395 B
C
#ifndef MATHGAME_H
|
|
#define MATHGAME_H
|
|
|
|
#include <stdlib.h>
|
|
|
|
//// This header holds Maths functions that emulate the functionality of flash's
|
|
|
|
|
|
//random
|
|
//Returns 0..1
|
|
float inline fRandom(void)
|
|
{
|
|
return ( float(rand()) / float(RAND_MAX)) ;
|
|
}
|
|
|
|
inline int clamp(int x, int a, int b)
|
|
{
|
|
return x < a ? a : (x > b ? b : x);
|
|
}
|
|
|
|
struct point
|
|
{
|
|
int x;
|
|
int y;
|
|
};
|
|
|
|
#endif /* MATHGAME_H */
|