Changeset 5963


Ignore:
Timestamp:
02/25/04 16:01:53 (17 years ago)
Author:
piso
Message:

Work in progress.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/SimpleBitVector.java

    r5957 r5963  
    33 *
    44 * Copyright (C) 2004 Peter Graves
    5  * $Id: SimpleBitVector.java,v 1.3 2004-02-25 13:50:54 piso Exp $
     5 * $Id: SimpleBitVector.java,v 1.4 2004-02-25 16:01:53 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    110110    public void set(int index, LispObject newValue) throws ConditionThrowable
    111111    {
    112         if (index >= capacity)
     112        if (index < 0 || index >= capacity)
    113113            badIndex(index, capacity);
     114        final int offset = index >> 6;
    114115        try {
    115             int n = Fixnum.getValue(newValue);
    116             if (n == 1) {
    117                 setBit(index);
    118                 return;
    119             }
    120             if (n == 0) {
    121                 clearBit(index);
    122                 return;
    123             }
    124             // None of the above...
    125         }
    126         catch (ConditionThrowable t) {}
    127         signal(new TypeError(newValue, "bit"));
     116            switch (((Fixnum)newValue).value) {
     117                case 0:
     118                    bits[offset] &= ~(1L << index);
     119                    return;
     120                case 1:
     121                    bits[offset] |= 1L << index;
     122                    return;
     123            }
     124        }
     125        catch (ClassCastException e) {
     126            // Fall through.
     127        }
     128        signal(new TypeError(newValue, Symbol.BIT));
    128129    }
    129130
     
    185186    }
    186187
    187     public AbstractVector adjustVector(int size, LispObject initialElement,
     188    public AbstractVector adjustVector(int newCapacity, LispObject initialElement,
    188189                                       LispObject initialContents)
    189190        throws ConditionThrowable
    190191    {
    191         SimpleBitVector v = new SimpleBitVector(size);
     192        SimpleBitVector v = new SimpleBitVector(newCapacity);
    192193        if (initialContents != NIL) {
    193194            if (initialContents.listp()) {
    194195                LispObject list = initialContents;
    195                 for (int i = 0; i < size; i++) {
     196                for (int i = 0; i < newCapacity; i++) {
    196197                    v.set(i, list.car());
    197198                    list = list.cdr();
    198199                }
    199200            } else if (initialContents.vectorp()) {
    200                 for (int i = 0; i < size; i++)
     201                for (int i = 0; i < newCapacity; i++)
    201202                    v.set(i, initialContents.elt(i));
    202203            } else
    203204                signal(new TypeError(initialContents, Symbol.SEQUENCE));
    204205        } else {
    205             final int limit = Math.min(capacity, size);
     206            final int limit = Math.min(capacity, newCapacity);
    206207            for (int i = limit; i-- > 0;) {
    207208                if (getBit(i) == 1)
     
    210211                    v.clearBit(i);
    211212            }
    212             if (size > capacity) {
     213            if (newCapacity > capacity) {
    213214                int n = Fixnum.getValue(initialElement);
    214215                if (n == 1)
    215                     for (int i = capacity; i < size; i++)
     216                    for (int i = capacity; i < newCapacity; i++)
    216217                        v.setBit(i);
    217218                else
    218                     for (int i = capacity; i < size; i++)
     219                    for (int i = capacity; i < newCapacity; i++)
    219220                        v.clearBit(i);
    220221            }
     
    223224    }
    224225
    225     public AbstractVector adjustVector(int size, AbstractArray displacedTo,
     226    public AbstractVector adjustVector(int newCapacity, AbstractArray displacedTo,
    226227                                       int displacement)
    227228        throws ConditionThrowable
    228229    {
    229         return new ComplexBitVector(size, displacedTo, displacement);
     230        return new ComplexBitVector(newCapacity, displacedTo, displacement);
    230231    }
    231232}
Note: See TracChangeset for help on using the changeset viewer.