]> www.ginac.de Git - cln.git/blob - src/integer/bitwise/cl_I_ldbtest.cc
* */*: Convert encoding from ISO 8859-1 to UTF-8.
[cln.git] / src / integer / bitwise / cl_I_ldbtest.cc
1 // ldb_test().
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 // Specification.
7 #include "cln/integer.h"
8
9
10 // Implementation.
11
12 #include "cln/integer.h"
13 #include "cl_I.h"
14 #include "cl_I_byte.h"
15
16 namespace cln {
17
18 bool ldb_test (const cl_I& n, const cl_byte& b)
19 {
20       // Methode:
21       // (ldb-test (byte s p) n)
22       // Falls s=0: =0.
23       // Falls s>0:
24       //   l:=(integer-length n)
25       //   Falls l <= p : Falls n>=0, =0, denn Bits p+s-1..p sind =0.
26       //                  Falls n<0, /=0, denn Bits p+s-1..p sind =1.
27       //   Falls p < l :
28       //     Falls p+s>l, /=0, denn bei n>=0 ist Bit l-1 =1,
29       //                       und bei n<0 sind Bits p+s-1..l =1.
30       //     Falls p+s<=l,
31       //       extrahiere die Bits p,...,p+s-1 von n und teste sie.
32       var uintC s = b.size;
33       var uintC p = b.position;
34       if (s==0) return false;
35       var uintC l = integer_length(n); // l = (integer-length n)
36       if (l<=p)
37         // l<=p
38         if (!minusp(n))
39           return false; // n>=0
40           else
41           return true; // n<0
42         else
43         // l>p
44         { var uintC ps = p+s;
45           if (ps>l) // p+s>l ?
46             return true;
47           // Bits p,...,q-1 mit q = min(p+s,l) = p+s extrahieren und testen:
48           return ldb_extract_test(n,p,ps);
49         }
50 }
51
52 }  // namespace cln