qemacs-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemacs-commit] qemacs qe.h qe.c


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs qe.h qe.c
Date: Tue, 18 Apr 2017 10:26:39 -0400 (EDT)

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        17/04/18 10:26:39

Modified files:
        .              : qe.h qe.c 

Log message:
        display: improve crc formula to avoid trivial collisions
        - use 64 bit checksum values
        - use simple formula with fewer collisions.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.254&r2=1.255
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.272&r2=1.273

Patches:
Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.254
retrieving revision 1.255
diff -u -b -r1.254 -r1.255
--- qe.h        18 Apr 2017 09:14:55 -0000      1.254
+++ qe.h        18 Apr 2017 14:26:39 -0000      1.255
@@ -1313,7 +1313,7 @@
 /* contains all the information necessary to uniquely identify a line,
    to avoid displaying it */
 typedef struct QELineShadow {
-    unsigned int crc;
+    uint64_t crc;
     int x;
     short y;
     short height;

Index: qe.c
===================================================================
RCS file: /sources/qemacs/qemacs/qe.c,v
retrieving revision 1.272
retrieving revision 1.273
diff -u -b -r1.272 -r1.273
--- qe.c        18 Apr 2017 09:14:55 -0000      1.272
+++ qe.c        18 Apr 2017 14:26:39 -0000      1.273
@@ -3100,7 +3100,7 @@
 
 /* CRC to optimize redraw. */
 /* XXX: is it safe enough ? */
-static unsigned int compute_crc(const void *p, int size, unsigned int sum)
+static uint64_t compute_crc(const void *p, int size, uint64_t sum)
 {
     const u8 *data = (const u8 *)p;
 
@@ -3111,17 +3111,20 @@
      * B123456789012345678901234567890 A123456789012345678901234567890
      */
     while (((uintptr_t)data & 3) && size > 0) {
-        sum += ((sum >> 31) & 1) + sum + *data;
+        //sum += ((sum >> 31) & 1) + sum + *data;
+        sum += sum + *data + (sum >> 32);
         data++;
         size--;
     }
     while (size >= 4) {
-        sum += ((sum >> 31) & 1) + sum + *(const uint32_t *)(const void *)data;
+        //sum += ((sum >> 31) & 1) + sum + *(const uint32_t *)(const void 
*)data;
+        sum += sum + *(const uint32_t *)(const void *)data + (sum >> 32);
         data += 4;
         size -= 4;
     }
     while (size > 0) {
-        sum += ((sum >> 31) & 1) + sum + *data;
+        //sum += ((sum >> 31) & 1) + sum + *data;
+        sum += sum + *data + (sum >> 32);
         data++;
         size--;
     }
@@ -3181,7 +3184,7 @@
     &&  ds->y < e->ytop + e->height) {
         QEStyleDef styledef, default_style;
         QELineShadow *ls;
-        unsigned int crc;
+        uint64_t crc;
 
         /* test if display needed */
         crc = compute_crc(fragments, sizeof(*fragments) * nb_fragments, 0);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]