indexing
description: "Bit sequences of length `count%', with binary operations"
class interface
BIT_REF
feature -- Access
conforms_to (other: BIT_REF): BOOLEAN
-- Is dynamic type of current object a descendant of
-- dynamic type of other?
require -- from GENERAL
other_not_void: other /= void
generator: STRING
-- Name of the current object's generating class.
item (i: INTEGER): BOOLEAN
-- i-th bit
-- Was declared in BIT_REF as synonym of item and @.
require
index_large_enough: i >= 1;
index_small_enough: i <= count
infix "@" (i: INTEGER): BOOLEAN
-- i-th bit
-- Was declared in BIT_REF as synonym of item and @.
require
index_large_enough: i >= 1;
index_small_enough: i <= count
feature -- Measurement
count: INTEGER
-- Size of the current bit object
feature -- Element change
put (value: BOOLEAN; i: INTEGER)
-- Set the i-th bit to 1 if value is True, 0 if False
require
index_large_enough: i >= 1;
index_small_enough: i <= count
ensure
value_inserted: item (i) = value
feature -- Basic operations
infix "#" (s: INTEGER): like Current
-- Result of rotating bit sequence by s positions
-- (Positive s rotates right, negative s rotates left.)
infix "^" (s: INTEGER): like Current
-- Result of shifting bit sequence by s positions
-- (Positive s shifts right, negative s shifts left;
-- bits falling off the sequence's bounds are lost.)
infix "and" (other: BIT_REF): BIT_REF
-- Bit-by-bit boolean conjunction with other
require
other_exists: other /= void;
conformance: other.count <= count
infix "implies" (other: BIT_REF): BIT_REF
-- Bit-by-bit boolean implication of other
require
other_exists: other /= void;
conformance: other.count <= count
prefix "not ": like Current
-- Bit-by-bit negation
infix "or" (other: BIT_REF): BIT_REF
-- Bit-by-bi boolean disjunction with other
require
other_exists: other /= void;
conformance: other.count <= count
infix "xor" (other: BIT_REF): BIT_REF
-- Bit-by-bit exclusive or with other
require
other_exists: other /= void;
conformance: other.count <= count
feature -- Output
out: STRING
-- Tagged printable representation.
invariant
-- from GENERAL
reflexive_equality: standard_is_equal (Current);
reflexive_conformance: conforms_to (Current);
end -- class BIT_REF