// ldb_test().
// General includes.
#include "cl_sysdep.h"
// Specification.
#include "cln/integer.h"
// Implementation.
#include "cln/integer.h"
#include "cl_I.h"
#include "cl_I_byte.h"
namespace cln {
cl_boolean ldb_test (const cl_I& n, const cl_byte& b)
{
// Methode:
// (ldb-test (byte s p) n)
// Falls s=0: =0.
// Falls s>0:
// l:=(integer-length n)
// Falls l <= p : Falls n>=0, =0, denn Bits p+s-1..p sind =0.
// Falls n<0, /=0, denn Bits p+s-1..p sind =1.
// Falls p < l :
// Falls p+s>l, /=0, denn bei n>=0 ist Bit l-1 =1,
// und bei n<0 sind Bits p+s-1..l =1.
// Falls p+s<=l,
// extrahiere die Bits p,...,p+s-1 von n und teste sie.
var uintL s = b.size;
var uintL p = b.position;
if (s==0) return cl_false;
var uintL l = integer_length(n); // l = (integer-length n)
if (l<=p)
// l<=p
if (!minusp(n))
return cl_false; // n>=0
else
return cl_true; // n<0
else
// l>p
{ var uintL ps = p+s;
if (ps>l) // p+s>l ?
return cl_true;
// Bits p,...,q-1 mit q = min(p+s,l) = p+s extrahieren und testen:
return ldb_extract_test(n,p,ps);
}
}
} // namespace cln
syntax highlighted by Code2HTML, v. 0.9.1