summaryrefslogtreecommitdiff
path: root/libphobos/libdruntime/gc/bits.d
diff options
context:
space:
mode:
Diffstat (limited to 'libphobos/libdruntime/gc/bits.d')
-rw-r--r--libphobos/libdruntime/gc/bits.d129
1 files changed, 0 insertions, 129 deletions
diff --git a/libphobos/libdruntime/gc/bits.d b/libphobos/libdruntime/gc/bits.d
deleted file mode 100644
index 60ba4f4eefd..00000000000
--- a/libphobos/libdruntime/gc/bits.d
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * Contains a bitfield used by the GC.
- *
- * Copyright: Copyright Digital Mars 2005 - 2013.
- * License: $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
- * Authors: Walter Bright, David Friedman, Sean Kelly
- */
-
-/* Copyright Digital Mars 2005 - 2013.
- * Distributed under the Boost Software License, Version 1.0.
- * (See accompanying file LICENSE or copy at
- * http://www.boost.org/LICENSE_1_0.txt)
- */
-module gc.bits;
-
-
-import core.bitop;
-import core.stdc.string;
-import core.stdc.stdlib;
-import core.exception : onOutOfMemoryError;
-
-struct GCBits
-{
- alias size_t wordtype;
-
- enum BITS_PER_WORD = (wordtype.sizeof * 8);
- enum BITS_SHIFT = (wordtype.sizeof == 8 ? 6 : 5);
- enum BITS_MASK = (BITS_PER_WORD - 1);
- enum BITS_1 = cast(wordtype)1;
-
- wordtype* data;
- size_t nbits;
-
- void Dtor() nothrow
- {
- if (data)
- {
- free(data);
- data = null;
- }
- }
-
- void alloc(size_t nbits) nothrow
- {
- this.nbits = nbits;
- data = cast(typeof(data[0])*)calloc(nwords, data[0].sizeof);
- if (!data)
- onOutOfMemoryError();
- }
-
- wordtype test(size_t i) const nothrow
- in
- {
- assert(i < nbits);
- }
- body
- {
- return core.bitop.bt(data, i);
- }
-
- int set(size_t i) nothrow
- in
- {
- assert(i < nbits);
- }
- body
- {
- return core.bitop.bts(data, i);
- }
-
- int clear(size_t i) nothrow
- in
- {
- assert(i <= nbits);
- }
- body
- {
- return core.bitop.btr(data, i);
- }
-
- void zero() nothrow
- {
- memset(data, 0, nwords * wordtype.sizeof);
- }
-
- void copy(GCBits *f) nothrow
- in
- {
- assert(nwords == f.nwords);
- }
- body
- {
- memcpy(data, f.data, nwords * wordtype.sizeof);
- }
-
- @property size_t nwords() const pure nothrow
- {
- return (nbits + (BITS_PER_WORD - 1)) >> BITS_SHIFT;
- }
-}
-
-unittest
-{
- GCBits b;
-
- b.alloc(786);
- assert(!b.test(123));
- assert(!b.clear(123));
- assert(!b.set(123));
- assert(b.test(123));
- assert(b.clear(123));
- assert(!b.test(123));
-
- b.set(785);
- b.set(0);
- assert(b.test(785));
- assert(b.test(0));
- b.zero();
- assert(!b.test(785));
- assert(!b.test(0));
-
- GCBits b2;
- b2.alloc(786);
- b2.set(38);
- b.copy(&b2);
- assert(b.test(38));
- b2.Dtor();
- b.Dtor();
-}