+
Point of view
All features
deferred class INTEGRAL
Summary
General integer abstraction for both integers and naturals.
Direct parents
Inherit list: COMPARABLE
Insert list: NUMERIC, PLATFORM
Known children
Inherit list: INTEGER_GENERAL
Overview
Features
{ANY}
Conversions:
{ANY}
Bitwise Logical Operators:
{ANY}
  • bit_test (idx: INTEGER_8): BOOLEAN
    The value of the idx-ith bit (the right-most bit is at index 0).
  • bit_set (idx: INTEGER_8): INTEGRAL
    The value of the idx-ith bit (the right-most bit is at index 0).
  • bit_reset (idx: INTEGER_8): INTEGRAL
    The value of the idx-ith bit (the right-most bit is at index 0).
  • infix "|>>" (s: INTEGER_8): INTEGRAL
    Shift by s positions right (sign bit copied) bits falling off the end are lost.
  • bit_shift_right (s: INTEGER_8): INTEGRAL
    Shift by s positions right (sign bit copied) bits falling off the end are lost.
  • infix "|>>>" (s: INTEGER_8): INTEGRAL
    Shift by s positions right (sign bit not copied) bits falling off the end are lost.
  • bit_shift_right_unsigned (s: INTEGER_8): INTEGRAL
    Shift by s positions right (sign bit not copied) bits falling off the end are lost.
  • infix "|<<" (s: INTEGER_8): INTEGRAL
    Shift by s positions left bits falling off the end are lost.
  • bit_shift_left (s: INTEGER_8): INTEGRAL
    Shift by s positions left bits falling off the end are lost.
  • infix "#>>" (s: INTEGER_8): INTEGRAL
    Rotate by s positions right.
  • bit_rotate_right (s: INTEGER_8): INTEGRAL
    Rotate by s positions right.
  • infix "#<<" (s: INTEGER_8): INTEGRAL
    Rotate by s positions left.
  • bit_rotate_left (s: INTEGER_8): INTEGRAL
    Rotate by s positions left.
  • bit_rotate (s: INTEGER_8): INTEGRAL
    Rotate by s positions (positive s shifts right, negative left
  • prefix "~": INTEGRAL
    One's complement of Current.
  • bit_not: INTEGRAL
    One's complement of Current.
  • infix "&" (other: INTEGRAL): INTEGRAL
    Bitwise logical and of Current with other.
  • bit_and (other: INTEGRAL): INTEGRAL
    Bitwise logical and of Current with other.
  • infix "|" (other: INTEGRAL): INTEGRAL
    Bitwise logical inclusive or of Current with other.
  • bit_or (other: INTEGRAL): INTEGRAL
    Bitwise logical inclusive or of Current with other.
  • bit_xor (other: INTEGRAL): INTEGRAL
    Bitwise logical exclusive or of Current with other.
  • bit_shift (s: INTEGER_8): INTEGRAL
    Shift by s positions (positive s shifts right (sign bit copied), negative shifts left bits falling off the end are lost).
  • bit_shift_unsigned (s: INTEGER_8): INTEGRAL
    Shift by s positions (positive s shifts right (sign bit not copied), negative left bits falling off the end are lost).
Miscellaneous:
{ANY}
Modular arithmetic (these wrap around on overflow)
{ANY}
  • infix "#+" (other: INTEGRAL): INTEGRAL
  • prefix "#-": INTEGRAL
  • infix "#-" (other: INTEGRAL): INTEGRAL
  • infix "#*" (other: INTEGRAL): INTEGRAL
  • infix "#//" (other: INTEGRAL): INTEGRAL
    Integer division of Current by other.
  • infix "#\\" (other: INTEGRAL): INTEGRAL
    Remainder of the integer division of Current by other.
{}
{ANY}
  • is_equal (other: INTEGRAL): BOOLEAN
    Is other attached to an object considered equal to current object?
  • in_range (lower: INTEGRAL, upper: INTEGRAL): BOOLEAN
    Return True if Current is in range [lower..upper]
    See also min, max, compare.
  • compare (other: INTEGRAL): INTEGER_32
    If current object equal to other, 0 if smaller, -1; if greater, 1.
  • three_way_comparison (other: INTEGRAL): INTEGER_32
    If current object equal to other, 0 if smaller, -1; if greater, 1.
  • min (other: INTEGRAL): INTEGRAL
    Minimum of Current and other.
  • max (other: INTEGRAL): INTEGRAL
    Maximum of Current and other.
  • bounded_by (a_min: INTEGRAL, a_max: INTEGRAL): INTEGRAL
    A value that is equal to Current if it is between the limits set by a_min and a_max.
{ANY}
  • one: INTEGRAL
    Neutral element for "*" and "/".
  • zero: INTEGRAL
    Neutral element for "+" and "-".
{ANY}
Maximum:
{}
Minimum:
{}
Bits:
{}
infix "+" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Sum with other (commutative).
require
  • no_overflow: Current > zero = other > zero implies Current #+ other > zero = Current > zero
    this means: if operand are of same sign, it will be sign of the Result.

ensure
  • Result #- other = Current
infix "-" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Result of subtracting other.
require
  • no_overflow: Current > zero /= other > zero implies Current #- other > zero = Current > zero
    this means: if operand are of different sign, sign of the Result will be the same sign as Current.

ensure
  • Result #+ other = Current
infix "*" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Product by other.
require
  • no_overflow: other /= zero implies Current #* other #// other = Current
ensure
  • Current /= zero and other /= zero implies Result /= zero
  • Result /= zero implies Result #// other = Current
  • Result /= zero implies Result #\\ other = zero
infix "/" (other: INTEGRAL): REAL_64
deferred function
{ANY}
Division by other.
require
  • other /= Void
  • other /= zero
  • divisible(other)
infix "//" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Quotient of the Euclidian division of Current by other.
The corresponding remainder is given by infix "\\".
See also infix "#//".
require ensure
  • euclidian_divide_case1: Current >= zero implies Result * other + Current \\ other = Current
  • euclidian_divide_case2: Current < zero implies Result #* other #+ Current \\ other = Current
infix "\\" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Remainder of the Euclidian division of Current by other.
By definition, zero <= Result < other.abs.
See also infix "#\\", infix "//".
require ensure
infix "^" (exp: INTEGRAL): INTEGER_64
deferred function
{ANY}
Integer power of Current by other
require
abs: INTEGRAL
deferred function
{ANY}
Absolute value of Current.
require
  • not_minimum_value: Current < zero implies zero < #- Current
ensure
infix "<" (other: INTEGRAL): BOOLEAN
deferred function
{ANY}
Is Current strictly less than other?
See also >, <=, >=, min, max.
require
  • other_exists: other /= Void
ensure
  • asymmetric: Result implies not other < Current
infix "<=" (other: INTEGRAL): BOOLEAN
deferred function
{ANY}
require
  • other_exists: other /= Void
ensure
  • definition: Result = Current < other or is_equal(other)
infix ">" (other: INTEGRAL): BOOLEAN
deferred function
{ANY}
require
  • other_exists: other /= Void
ensure
  • definition: Result = other < Current
infix ">=" (other: INTEGRAL): BOOLEAN
deferred function
{ANY}
require
  • other_exists: other /= Void
ensure
  • definition: Result = other <= Current
prefix "+": INTEGRAL
deferred function
{ANY}
Unary plus of Current.
prefix "-": INTEGRAL
deferred function
{ANY}
Unary minus of Current.
require
  • not_minimum_value: Current < zero implies zero < #- Current
is_odd: BOOLEAN
deferred function
{ANY}
Is odd?
is_even: BOOLEAN
deferred function
{ANY}
Is even?
sqrt: REAL_64
deferred function
{ANY}
Square root of Current.
require
log: REAL_64
deferred function
{ANY}
Natural Logarithm of Current.
require
log10: REAL_64
deferred function
{ANY}
Base-10 Logarithm of Current.
require
gcd (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Greatest Common Divisor of Current and other.
ensure
lcm (other: INTEGRAL): INTEGRAL
effective function
{ANY}
Least Common Multiple of Current and other.
ensure
to_string: STRING
deferred function
{ANY}
The decimal view of Current into a new allocated STRING.
For example, if Current is -1 the Result is "-1".
See also append_in, to_string_format, to_unicode_string, to_hexadecimal, to_octal.
to_unicode_string: UNICODE_STRING
deferred function
{ANY}
The decimal view of Current into a new allocated UNICODE_STRING.
For example, if Current is -1 the Result is U"-1".
See also append_in_unicode, to_unicode_string_format, to_string, to_hexadecimal, to_octal.
to_boolean: BOOLEAN
deferred function
{ANY}
Return False for 0, otherwise True.
ensure
  • Result = Current /= zero
to_number: NUMBER
deferred function
{ANY}
Convert Current into a new allocated NUMBER.
ensure
append_in (buffer: STRING)
deferred procedure
{ANY}
Append in the buffer the equivalent of to_string.
If you look for performances, you should always prefer append_in which allow you to recycle a unique common buffer (each call of to_string allocate a new object!).
See also append_in_format, append_in_unicode, append_in_unicode_format, to_hexadecimal_in.
require
  • buffer /= Void
append_in_unicode (buffer: UNICODE_STRING)
deferred procedure
{ANY}
Append in the buffer the equivalent of to_unicode_string.
If you look for performances, you should always prefer append_in_unicode which allow you to recycle a unique common buffer (each call of to_unicode_string allocate a new object!).
See also append_in_unicode_format, append_in, append_in_format, to_hexadecimal_in.
require
  • buffer /= Void
to_string_format (s: INTEGER_32): STRING
deferred function
{ANY}
Same as to_string but the result is on s character and the number is right aligned.
require ensure
  • Result.count = s
to_unicode_string_format (s: INTEGER_32): UNICODE_STRING
deferred function
{ANY}
Same as to_unicode_string but the result is on s character and the number is right aligned.
require ensure
  • Result.count = s
append_in_format (buffer: STRING, s: INTEGER_32)
deferred procedure
{ANY}
Append in the buffer the equivalent of to_string_format.
If you look for performances, you should always prefer append_in_format which allow you to recycle a unique common buffer (each call of to_string_format allocate a new object!).
See also append_in, append_in_unicode, append_in_unicode_format, to_hexadecimal_in.
require ensure
  • buffer.count >= old buffer.count + s
append_in_unicode_format (buffer: UNICODE_STRING, s: INTEGER_32)
deferred procedure
{ANY}
Append in the buffer the equivalent of to_unicode_string_format.
If you look for performances, you should always prefer append_in_unicode_format which allow you to recycle a unique common buffer (each call of to_unicode_string_format allocate a new object!).
See also append_in_format, append_in, append_in_format, to_hexadecimal_in.
require ensure
  • buffer.count >= old buffer.count + s
digit: CHARACTER
deferred function
{ANY}
Legacy synonym for decimal_digit.
Note: already prefer decimal_digit because digit may become obsolete (feb 4th 2006).
ensure
is_decimal_digit: BOOLEAN
deferred function
{ANY}
decimal_digit: CHARACTER
deferred function
{ANY}
Gives the corresponding CHARACTER for range 0..9.
require ensure
  • "0123456789".has(Result)
    Current.is_equal(Result.value)

is_hexadecimal_digit: BOOLEAN
deferred function
{ANY}
hexadecimal_digit: CHARACTER
deferred function
{ANY}
Gives the corresponding CHARACTER for range 0..15.
require ensure
  • "0123456789ABCDEF".has(Result)
to_character: CHARACTER
deferred function
{ANY}
Return the corresponding ASCII character.
require
  • Current >= zero
    Current <= Maximum_character_code

to_octal_in (buffer: STRING)
deferred procedure
{ANY}
Append in the buffer the equivalent of to_octal.
If you look for performances, you should always prefer to_octal_in which allow you to recycle a unique common buffer (each call of to_octal allocate a new object!).
See also to_hexadecimal_in, append_in, append_in_format, append_in_unicode.
ensure
  • buffer.count = old buffer.count + bit_count #// 3 + 1
to_octal: STRING
deferred function
{ANY}
The octal view of Current into a new allocated STRING.
For example, if Current is -1 and if Current is a 16 bits integer the Result is "177777".
See also to_octal_in, to_hexadecimal, to_number, to_string.
ensure
to_hexadecimal: STRING
deferred function
{ANY}
The hexadecimal view of Current into a new allocated STRING.
For example, if Current is -1 and if Current is a 32 bits integer the Result is "FFFFFFFF".
See also to_hexadecimal_in, to_octal, to_number, to_string.
ensure
to_hexadecimal_in (buffer: STRING)
deferred procedure
{ANY}
Append in the buffer the equivalent of to_hexadecimal.
If you look for performances, you should always prefer to_hexadecimal_in which allow you to recycle a unique common buffer (each call of to_hexadecimal allocate a new object!).
See also to_octal_in, append_in, append_in_format, append_in_unicode.
ensure
bit_test (idx: INTEGER_8): BOOLEAN
deferred function
{ANY}
The value of the idx-ith bit (the right-most bit is at index 0).
require
bit_set (idx: INTEGER_8): INTEGRAL
deferred function
{ANY}
The value of the idx-ith bit (the right-most bit is at index 0).
require ensure
bit_reset (idx: INTEGER_8): INTEGRAL
deferred function
{ANY}
The value of the idx-ith bit (the right-most bit is at index 0).
require ensure
  • not Result.bit_test(idx)
  • Result = Current or Result.bit_set(idx) = Current
infix "|>>" (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Shift by s positions right (sign bit copied) bits falling off the end are lost.
require
bit_shift_right (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Shift by s positions right (sign bit copied) bits falling off the end are lost.
require
infix "|>>>" (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Shift by s positions right (sign bit not copied) bits falling off the end are lost.
require
bit_shift_right_unsigned (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Shift by s positions right (sign bit not copied) bits falling off the end are lost.
require
infix "|<<" (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Shift by s positions left bits falling off the end are lost.
require
bit_shift_left (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Shift by s positions left bits falling off the end are lost.
require
infix "#>>" (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Rotate by s positions right.
See also bit_rotate_left and bit_rotate.
require
bit_rotate_right (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Rotate by s positions right.
See also bit_rotate_left and bit_rotate.
require
infix "#<<" (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Rotate by s positions left.
require
bit_rotate_left (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Rotate by s positions left.
require
bit_rotate (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Rotate by s positions (positive s shifts right, negative left
See also bit_rotate_right and bit_rotate_left.
require
prefix "~": INTEGRAL
deferred function
{ANY}
One's complement of Current.
bit_not: INTEGRAL
deferred function
{ANY}
One's complement of Current.
infix "&" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Bitwise logical and of Current with other.
bit_and (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Bitwise logical and of Current with other.
infix "|" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Bitwise logical inclusive or of Current with other.
bit_or (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Bitwise logical inclusive or of Current with other.
bit_xor (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Bitwise logical exclusive or of Current with other.
bit_shift (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Shift by s positions (positive s shifts right (sign bit copied), negative shifts left bits falling off the end are lost).
See also infix "|>>" and infix "|<<".
require
  • s /= 0
bit_shift_unsigned (s: INTEGER_8): INTEGRAL
deferred function
{ANY}
Shift by s positions (positive s shifts right (sign bit not copied), negative left bits falling off the end are lost).
See also infix "|>>>" and infix "|<<".
require
  • s /= 0
sign: INTEGER_8
deferred function
{ANY}
Sign of Current (0 or -1 or 1).
ensure
  • Result.in_range(-1, 1)
divisible (other: INTEGRAL): BOOLEAN
deferred function
{ANY}
May Current be divided by other ?
require
  • other /= Void
ensure
  • definition: Result = other /= zero
is_a_power_of_2: BOOLEAN
deferred function
{ANY}
Is Current a power of 2?
require
infix "#+" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
prefix "#-": INTEGRAL
deferred function
{ANY}
infix "#-" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
infix "#*" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
infix "#//" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Integer division of Current by other.
According to the ANSI C99: if Current and other are both non-negative, the Result is the quotient of the Euclidian division; but this is not the general case, the Result value is the algebraic quotient Current/other with any fractional part discarded. (This is often called "truncated toward zero"). So, the corresponding remainder value only verifies the expression remainder.abs < other.abs.
See also infix "//", infix "#\\".
require ensure
  • Result * other + Current #\\ other = Current
  • ansi_c_remainder: other |<< 1 /= zero implies Current - Result * other.abs < other.abs
  • ansi_c_good_case: Current >= zero and other > zero implies Current - Result * other >= zero
infix "#\\" (other: INTEGRAL): INTEGRAL
deferred function
{ANY}
Remainder of the integer division of Current by other.
According to the ANSI C99:
  * if Current and other are both non-negative,
    the Result is the remainder of the Euclidian division.
  * but this is not the general case,
    Result as the same sign as Current and only verify
    the expression Result.abs < other.abs.
See also infix "\\", infix "#//".
require ensure
bit_count: INTEGER_8
deferred function
{}
Well, it is 8 for INTEGER_8, 16 for INTEGER_16 and so on.
Note that this feature is not exported because this information is part of the type. This is actually used only for assertion here, in INTEGER_GENERAL.
ensure
is_equal (other: INTEGRAL): BOOLEAN
effective function
{ANY}
Is other attached to an object considered equal to current object?
require
  • other /= Void
ensure
  • trichotomy: Result = not Current < other and not other < Current
  • commutative: generating_type = other.generating_type implies Result = other.is_equal(Current)
in_range (lower: INTEGRAL, upper: INTEGRAL): BOOLEAN
effective function
{ANY}
Return True if Current is in range [lower..upper]
See also min, max, compare.
ensure
  • Result = Current >= lower and Current <= upper
compare (other: INTEGRAL): INTEGER_32
effective function
{ANY}
If current object equal to other, 0 if smaller, -1; if greater, 1.
See also min, max, in_range.
require
  • other_exists: other /= Void
ensure
  • equal_zero: Result = 0 = is_equal(other)
  • smaller_negative: Result = -1 = Current < other
  • greater_positive: Result = 1 = Current > other
three_way_comparison (other: INTEGRAL): INTEGER_32
effective function
{ANY}
If current object equal to other, 0 if smaller, -1; if greater, 1.
See also min, max, in_range.
require
  • other_exists: other /= Void
ensure
  • equal_zero: Result = 0 = is_equal(other)
  • smaller_negative: Result = -1 = Current < other
  • greater_positive: Result = 1 = Current > other
min (other: INTEGRAL): INTEGRAL
effective function
{ANY}
Minimum of Current and other.
See also max, in_range.
require
  • other /= Void
ensure
  • Result <= Current and then Result <= other
  • compare(Result) = 0 or else other.compare(Result) = 0
max (other: INTEGRAL): INTEGRAL
effective function
{ANY}
Maximum of Current and other.
See also min, in_range.
require
  • other /= Void
ensure
  • Result >= Current and then Result >= other
  • compare(Result) = 0 or else other.compare(Result) = 0
bounded_by (a_min: INTEGRAL, a_max: INTEGRAL): INTEGRAL
effective function
{ANY}
A value that is equal to Current if it is between the limits set by a_min and a_max.
Otherwise it's a_min if Current is smaller or a_max if Current is greater It's a shortcut for Current.min(a_max).max(a_min) also known as "clamp" in the widespread C library Glib
ensure
  • correctness: Result.in_range(a_min, a_max)
one: INTEGRAL
deferred function
{ANY}
Neutral element for "*" and "/".
zero: INTEGRAL
deferred function
{ANY}
Neutral element for "+" and "-".
hash_code: INTEGER_32
deferred function
{ANY}
The hash-code value of Current.
ensure
  • good_hash_value: Result >= 0
Maximum_character_code: INTEGER_16
{}
Largest supported code for CHARACTER values.
ensure
  • meaningful: Result >= 127
Maximum_integer_8: INTEGER_8
is 127
constant attribute
{}
Largest supported value of type INTEGER_8.
Maximum_integer_16: INTEGER_16
is 32767
constant attribute
{}
Largest supported value of type INTEGER_16.
Maximum_integer: INTEGER_32
is 2147483647
constant attribute
{}
Largest supported value of type INTEGER/INTEGER_32.
Maximum_integer_32: INTEGER_32
is 2147483647
constant attribute
{}
Largest supported value of type INTEGER/INTEGER_32.
Maximum_integer_64: INTEGER_64
is 9223372036854775807
constant attribute
{}
Largest supported value of type INTEGER_64.
Maximum_real_32: REAL_32
is {REAL_32 3.4028234663852885981170418348451692544e+38}
constant attribute
{}
Largest non-special (no NaNs nor infinity) supported value of type REAL_32.
Maximum_real: REAL_64
{}
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: 1.79769313486231570....e+308
Maximum_real_64: REAL_64
{}
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: 1.79769313486231570....e+308
Maximum_real_80: REAL_EXTENDED
{}
Largest supported value of type REAL_80.
ensure
Minimum_character_code: INTEGER_16
{}
Smallest supported code for CHARACTER values.
ensure
  • meaningful: Result <= 0
Minimum_integer_8: INTEGER_8
is -128
constant attribute
{}
Smallest supported value of type INTEGER_8.
Minimum_integer_16: INTEGER_16
is -32768
constant attribute
{}
Smallest supported value of type INTEGER_16.
Minimum_integer: INTEGER_32
is -2147483648
constant attribute
{}
Smallest supported value of type INTEGER/INTEGER_32.
Minimum_integer_32: INTEGER_32
is -2147483648
constant attribute
{}
Smallest supported value of type INTEGER/INTEGER_32.
Minimum_integer_64: INTEGER_64
is -9223372036854775808
constant attribute
{}
Smallest supported value of type INTEGER_64.
Minimum_real_32: REAL_32
is {REAL_32 -3.40282346638528859811704183484516925440e+38}
constant attribute
{}
Smallest non-special (no NaNs nor infinity) supported value of type REAL_32.
Minimum_real: REAL_64
{}
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: -1.79769313486231570....e+308
Minimum_real_64: REAL_64
{}
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: -1.79769313486231570....e+308
Minimum_real_80: REAL_64
{}
Smallest supported value of type REAL_80.
ensure
  • meaningful: Result <= 0.0
Boolean_bits: INTEGER_32
{}
Number of bits in a value of type BOOLEAN.
ensure
  • meaningful: Result >= 1
Character_bits: INTEGER_32
{}
Number of bits in a value of type CHARACTER.
ensure
Integer_bits: INTEGER_32
{}
Number of bits in a value of type INTEGER.
ensure
  • integer_definition: Result = 32
Real_bits: INTEGER_32
is 64
constant attribute
{}
Number of bits in a value of type REAL.
Pointer_bits: INTEGER_32
{}
Number of bits in a value of type POINTER.