annotate main/general/bitset.m @ 0:6b33357c7561 octave-forge

Initial revision
author pkienzle
date Wed, 10 Oct 2001 19:54:49 +0000
parents
children 23ab5a2ed477
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
1 ## Copyright (C) 2000 Kai Habel
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
2 ##
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
3 ## This program is free software; you can redistribute it and/or modify
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
4 ## it under the terms of the GNU General Public License as published by
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
5 ## the Free Software Foundation; either version 2 of the License, or
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
6 ## (at your option) any later version.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
7 ##
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
8 ## This program is distributed in the hope that it will be useful,
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
11 ## GNU General Public License for more details.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
12 ##
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
13 ## You should have received a copy of the GNU General Public License
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
14 ## along with this program; if not, write to the Free Software
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
15 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
16
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
17 ## -*- texinfo -*-
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
18 ## @deftypefn {Function File} {@var{X} =} bitset (@var{a},@var{n})
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
19 ## @deftypefnx {Function File} {@var{X} =} bitset (@var{a},@var{n},@var{v})
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
20 ## sets or resets bit(s) @var{N} of unsigned integers in @var{A}.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
21 ## @var{v} = 0 resets and @var{v} = 1 sets the bits.
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
22 ## The lowest significant bit is: @var{n} = 1
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
23 ##
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
24 ## @example
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
25 ## dec2bin (bitset(10,1))
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
26 ## @result{} 1011
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
27 ## @seealso{bitand,bitor,bitxor,bitget,bitcmp,bitshift,bitmax}
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
28 ## @end deftypefn
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
29
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
30 ## Author: Kai Habel <kai.habel@gmx.de>
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
31
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
32 function X = bitset (A, n, value)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
33
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
34 if (nargin < 2 || nargin > 3)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
35 usage ("bitset (A, n, v)");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
36 endif
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
37
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
38 if (nargin == 2)
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
39 value = 1;
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
40 endif
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
41
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
42 if (n < 1 || n > (log2(bitmax) + 1) )
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
43 msg = sprintf ("n must be in range [1,%d]",round(log2(bitmax)+1));
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
44 error (msg);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
45 endif
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
46
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
47 if (!is_matrix (A) || is_complex (A))
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
48 error ("first argument must be a real value");
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
49 else
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
50 X = bitand (pow2 (n - 1), value);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
51 Y = bitand (A, bitmax - pow2 (n - 1));
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
52 X = bitor (X, Y);
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
53 endif
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
54
6b33357c7561 Initial revision
pkienzle
parents:
diff changeset
55 endfunction