ACC SHELL
/**
* File: modules/Integer.ycp
* Package: yast2
* Summary: Integer routines
* Authors: Arvin Schnell <aschnell@suse.de>
*
* $Id: Integer.ycp 45945 2008-04-01 19:41:01Z aschnell $
*/
{
module "Integer";
textdomain "base";
/**
* Generate a list<integer> with the integers from 0 to stop - 1.
*/
global list<integer> Range(integer stop)
{
list<integer> ret = [];
integer i = 0;
while (i < stop)
{
ret = add(ret, i);
i = i + 1;
}
return ret;
}
/**
* Generate a list<integer> with the integers from start to stop - 1.
*/
global list<integer> RangeFrom(integer start, integer stop)
{
list<integer> ret = [];
integer i = start;
while (i < stop)
{
ret = add(ret, i);
i = i + 1;
}
return ret;
}
/**
* Checks whether i is a power of two. That is 1, 2, 4, 8, ... .
*/
global boolean IsPowerOfTwo(integer i)
{
return i > 0 && (i & (i - 1)) == 0;
}
/**
* Calculates the sum of values.
*/
global integer Sum(list<integer> values)
{
return list::reduce(integer x, integer y, 0, values, { return x + y; });
}
/**
* Returns the smallest integer in values.
*
* Behaviour is undefined for empty values.
*/
global integer Min(list<integer> values)
{
return list::reduce(integer x, integer y, values, { return x < y ? x : y; });
}
/**
* Returns the highest integer in values.
*
* Behaviour is undefined for empty values.
*/
global integer Max(list<integer> values)
{
return list::reduce(integer x, integer y, values, { return x > y ? x : y; });
}
/**
* Clamps the integer i.
*/
global integer Clamp(integer i, integer min, integer max)
{
if (i < min) return min;
if (i > max) return max;
return i;
}
}
ACC SHELL 2018