X-Git-Url: https://ginac.de/CLN/cln.git//cln.git?a=blobdiff_plain;f=src%2Finteger%2Fbitwise%2Fcl_I_logandc2.cc;h=d72be12c32ec06654cd7c5e8a21d2653a9b29d12;hb=8169a19b38c42588b39b21dae5bdb964e2f6b8c6;hp=52e845759d5b2c22a67d0250c4065cf8d6797c32;hpb=dd9e0f894eec7e2a8cf85078330ddc0a6639090b;p=cln.git diff --git a/src/integer/bitwise/cl_I_logandc2.cc b/src/integer/bitwise/cl_I_logandc2.cc index 52e8457..d72be12 100644 --- a/src/integer/bitwise/cl_I_logandc2.cc +++ b/src/integer/bitwise/cl_I_logandc2.cc @@ -1,28 +1,30 @@ // logandc2(). // General includes. -#include "cl_sysdep.h" +#include "base/cl_sysdep.h" // Specification. -#include "cl_integer.h" +#include "cln/integer.h" // Implementation. -#include "cl_I.h" -#include "cl_DS.h" -#include "cl_I_log.h" +#include "integer/cl_I.h" +#include "base/digitseq/cl_DS.h" +#include "integer/bitwise/cl_I_log.h" + +namespace cln { // Logische Operationen auf Integers: -// Methode: aus den Längen der beiden Argumente eine obere Schranke für -// die Länge des Ergebnisses berechnen (das Maximum der beiden Längen und -// FN_maxlength), so daß das MSD für unendlich viele Bits steht. -// Dann beide Argumente in gleichgroße Digit sequences umwandeln, Operation -// mit einer einfachen Schleife durchführen. +// Methode: aus den Längen der beiden Argumente eine obere Schranke für +// die Länge des Ergebnisses berechnen (das Maximum der beiden Längen und +// FN_maxlength), so daß das MSD für unendlich viele Bits steht. +// Dann beide Argumente in gleichgroße Digit sequences umwandeln, Operation +// mit einer einfachen Schleife durchführen. const cl_I logandc2 (const cl_I& x, const cl_I& y) { if (fixnump(x) && fixnump(y)) // Beides Fixnums -> ganz einfach: - { // bitweise als Fixnum zurück + { // bitweise als Fixnum zurück return cl_I_from_word((x.word & ~ y.word) | cl_combine(cl_FN_tag,0)); } if (fixnump(x)) @@ -40,6 +42,8 @@ const cl_I logandc2 (const cl_I& x, const cl_I& y) {var uintD* xptr; I_to_DS_n(x,n,xptr=); // Pointer in DS zu x var uintD* yptr; I_to_DS_n(y,n,yptr=); // Pointer in DS zu y var uintD* zptr = xptr; // Pointer aufs Ergebnis - andc2_loop_msp(xptr,yptr,n); // mit AND NOT verknüpfen + andc2_loop_msp(xptr,yptr,n); // mit AND NOT verknüpfen return DS_to_I(zptr,n); // Ergebnis als Integer } }} + +} // namespace cln