note description: "References to objects containing a boolean value" legal: "See notice at end of class." status: "See notice at end of class." date: "$Date$" revision: "$Revision$" class BOOLEAN_REF inherit HASHABLE redefine is_hashable, out end feature -- Access item: BOOLEAN -- Boolean value hash_code: INTEGER -- Hash code value do Result := 1 end feature -- Status report is_hashable: BOOLEAN -- May current object be hashed? -- (True if it is not its type's default.) do Result := item end feature {NONE} -- Initialization make_from_reference (v: BOOLEAN_REF) -- Initialize `Current' with `v.item'. require v_not_void: v /= Void do item := v.item ensure item_set: item = v.item end feature -- Conversion to_reference: BOOLEAN_REF -- Associated reference of Current do create Result Result.set_item (item) ensure to_reference_not_void: Result /= Void end to_integer: INTEGER -- 1 if `True' -- 0 if `False' do if item then Result := 1 end ensure zero_or_one: Result = 0 or Result = 1 item_implies_one: item implies Result = 1 end feature -- Element change set_item (b: BOOLEAN) -- Make `b' the `item' value. do item := b end feature -- Basic operations infix "and" (other: like Current): BOOLEAN -- Boolean conjunction with `other' require other_exists: other /= Void do Result := item and other.item ensure de_morgan: Result = not (not Current or not other) commutative: Result = (other and Current) consistent_with_semi_strict: Result implies (Current and then other) end infix "and then" (other: like Current): BOOLEAN -- Boolean semi-strict conjunction with `other' require other_exists: other /= Void do Result := item and then other.item ensure de_morgan: Result = not (not Current or else not other) end infix "implies" (other: like Current): BOOLEAN -- Boolean implication of `other' -- (semi-strict) require other_exists: other /= Void do Result := item implies other.item ensure definition: Result = (not Current or else other) end prefix "not": like Current -- Negation do create Result Result.set_item (not item) end infix "or" (other: like Current): BOOLEAN -- Boolean disjunction with `other' require other_exists: other /= Void do Result := item or other.item ensure de_morgan: Result = not (not Current and not other) commutative: Result = (other or Current) consistent_with_semi_strict: Result implies (Current or else other) end infix "or else" (other: like Current): BOOLEAN -- Boolean semi-strict disjunction with `other' require other_exists: other /= Void do Result := item or else other.item ensure de_morgan: Result = not (not Current and then not other) end infix "xor" (other: like Current): BOOLEAN -- Boolean exclusive or with `other' require other_exists: other /= Void do Result := item xor other.item ensure definition: Result = ((Current or other) and not (Current and other)) end feature -- Output out: STRING -- Printable representation of boolean do if item then Result := "True" else Result := "False" end end invariant involutive_negation: is_equal (not (not Current)) non_contradiction: not (Current and (not Current)) completeness: Current or else (not Current) note library: "EiffelBase: Library of reusable components for Eiffel." copyright: "Copyright (c) 1984-2006, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" source: "[ Eiffel Software 356 Storke Road, Goleta, CA 93117 USA Telephone 805-685-1006, Fax 805-685-6869 Website http://www.eiffel.com Customer support http://support.eiffel.com ]" end -- class BOOLEAN_REF