]> git.llucax.com Git - software/dgc/cdgc.git/blobdiff - rt/gc/cdgc/bits.d
Don't leak weak pointers
[software/dgc/cdgc.git] / rt / gc / cdgc / bits.d
index 17b71f31d5849d5eb6bb9a46c0a270c97ca018d7..7c06c83f4834751bcc39d28845a02367406299ec 100644 (file)
@@ -162,13 +162,24 @@ struct GCBits
 
     void zero()
     {
-        version(MEMCPY_NON_SIG_SAFE) {
-            uint * d1=data+1,dEnd=d1+nwords;
-            for (;d1!=dEnd;++d1)
-                *d1=0u;
-        } else {
-            cstring.memset(data + 1, 0, nwords * uint.sizeof);
-        }
+        cstring.memset(data + 1, 0, nwords * uint.sizeof);
+    }
+
+    void set_all()
+    {
+        cstring.memset(data + 1, 0xff, nwords * uint.sizeof);
+    }
+
+    void set_group(size_t base, size_t nbits)
+    in
+    {
+    }
+    body
+    {
+        assert ((base % 8) == 0);
+        assert ((nbits % 8) == 0);
+        size_t nbytes = nbits / 8;
+        cstring.memset(data + 1 + (base >> BITS_SHIFT), 0xff, nbytes);
     }
 
     void copy(GCBits *f)
@@ -178,13 +189,7 @@ struct GCBits
     }
     body
     {
-        version(MEMCPY_NON_SIG_SAFE) {
-            uint * d1=data+1,d2=f.data+1,dEnd=d1+nwords;
-            for (;d1!=dEnd;++d1,++d2)
-                *d1=*d2;
-        } else {
-            cstring.memcpy(data + 1, f.data + 1, nwords * uint.sizeof);
-        }
+        cstring.memcpy(data + 1, f.data + 1, nwords * uint.sizeof);
     }
 
     uint* base()