Example #1
0
static long setAndReturnMarkBit(GcMarkContext *ctx, const void *obj)
{
    return dvmHeapBitmapSetAndReturnObjectBit(ctx->bitmap, obj);
}
Example #2
0
File: main.c Project: handgod/soma
void
test_modify()
{
    HeapBitmap hb;
    bool ok;
    unsigned long bit;

    ok = dvmHeapBitmapInit(&hb, HEAP_BASE, HEAP_SIZE, "test");
    assert(ok);
    assert_empty(&hb);

    /* Set the lowest address.
     */
    bit = dvmHeapBitmapSetAndReturnObjectBit(&hb, HEAP_BASE);
    assert(bit == 0);
    assert(dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE));
    assert(!dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HB_OBJECT_ALIGNMENT));
    assert(!dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT));
    assert(!dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HEAP_SIZE));

    assert(dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE));
    assert(!dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE + HB_OBJECT_ALIGNMENT));
    assert(!dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT));

    /* Set the lowest address again.
     */
    bit = dvmHeapBitmapSetAndReturnObjectBit(&hb, HEAP_BASE);
    assert(bit != 0);
    assert(dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE));
    assert(!dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HB_OBJECT_ALIGNMENT));
    assert(!dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT));
    assert(!dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HEAP_SIZE));

    assert(dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE));
    assert(!dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE + HB_OBJECT_ALIGNMENT));
    assert(!dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT));

    /* Set the highest address.
     */
    bit = dvmHeapBitmapSetAndReturnObjectBit(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT);
    assert(bit == 0);
    assert(dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE));
    assert(dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HB_OBJECT_ALIGNMENT));
    assert(dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT));
    assert(!dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HEAP_SIZE));

    assert(dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE));
    assert(!dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE + HB_OBJECT_ALIGNMENT));
    assert(dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT));

    /* Set the highest address again.
     */
    bit = dvmHeapBitmapSetAndReturnObjectBit(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT);
    assert(bit != 0);
    assert(dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE));
    assert(dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HB_OBJECT_ALIGNMENT));
    assert(dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT));
    assert(!dvmHeapBitmapMayContainObject(&hb,
            HEAP_BASE + HEAP_SIZE));

    assert(dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE));
    assert(!dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE + HB_OBJECT_ALIGNMENT));
    assert(dvmHeapBitmapIsObjectBitSet(&hb,
            HEAP_BASE + HEAP_SIZE - HB_OBJECT_ALIGNMENT));

    /* Clean up.
     */
    dvmHeapBitmapDelete(&hb);
}