multiMap() function - integer linear interpolation

I know this is an old thread, but I made it work with decremented IN values:

int multiMap(int val, int* _in, int* _out, uint8_t size)
{
uint8_t pos = 1;
if(_in[0] < _in[1]) {
if (val <= _in[0]) return _out[0];
if (val >= _in[size-1]) return _out[size-1];
if (val == _in[pos]) return _out[pos];
while(val > _in[pos]) pos++;
} else {
if (val >= _in[0]) return _out[0];
if (val <= _in[size-1]) return _out[size-1];
if (val == _in[pos]) return _out[pos];
while(val < _in[pos]) pos++;
}
// interpolate in the right segment for the rest
return map(val, _in[pos-1], _in[pos], _out[pos-1], _out[pos]);
}