From a4860c3173ba2e118630e80a5d0f92ef11003724 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 29 Nov 2008 00:37:36 -0600 Subject: [PATCH] add toggle-bit word to math.bitwise --- basis/math/bitwise/bitwise-docs.factor | 19 ++++++++++++++++++- basis/math/bitwise/bitwise-tests.factor | 3 +++ basis/math/bitwise/bitwise.factor | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/basis/math/bitwise/bitwise-docs.factor b/basis/math/bitwise/bitwise-docs.factor index 9ed164330b..18ae8e1497 100644 --- a/basis/math/bitwise/bitwise-docs.factor +++ b/basis/math/bitwise/bitwise-docs.factor @@ -204,8 +204,25 @@ HELP: on-bits "64 on-bits .h" "ffffffffffffffff" } +} ; + +HELP: toggle-bit +{ $values + { "m" integer } + { "n" integer } + { "m'" integer } } -; +{ $description "Toggles the nth bit of an integer." } +{ $examples + { $example "USING: math.bitwise kernel prettyprint ;" + "0 3 toggle-bit .b" + "1000" + } + { $example "USING: math.bitwise kernel prettyprint ;" + "BIN: 1000 3 toggle-bit .b" + "0" + } +} ; HELP: set-bit { $values diff --git a/basis/math/bitwise/bitwise-tests.factor b/basis/math/bitwise/bitwise-tests.factor index 4422992956..979c62dcfb 100644 --- a/basis/math/bitwise/bitwise-tests.factor +++ b/basis/math/bitwise/bitwise-tests.factor @@ -29,3 +29,6 @@ IN: math.bitwise.tests \ foo must-infer [ 1 ] [ { 1 } flags ] unit-test + +[ 8 ] [ 0 3 toggle-bit ] unit-test +[ 0 ] [ 8 3 toggle-bit ] unit-test diff --git a/basis/math/bitwise/bitwise.factor b/basis/math/bitwise/bitwise.factor index 71ada945cd..89a21b65ab 100644 --- a/basis/math/bitwise/bitwise.factor +++ b/basis/math/bitwise/bitwise.factor @@ -17,6 +17,7 @@ IN: math.bitwise : bits ( m n -- m' ) 2^ wrap ; inline : mask-bit ( m n -- m' ) 2^ mask ; inline : on-bits ( n -- m ) 2^ 1- ; inline +: toggle-bit ( m n -- m' ) 2^ bitxor ; inline : shift-mod ( n s w -- n ) [ shift ] dip 2^ wrap ; inline