Changeset 5968


Ignore:
Timestamp:
02/25/04 17:29:17 (17 years ago)
Author:
piso
Message:

Work in progress.

Location:
trunk/j/src/org/armedbear/lisp
Files:
4 edited

Legend:

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

    r5966 r5968  
    33 *
    44 * Copyright (C) 2003-2004 Peter Graves
    5  * $Id: ComplexBitVector.java,v 1.5 2004-02-25 16:58:19 piso Exp $
     5 * $Id: ComplexBitVector.java,v 1.6 2004-02-25 17:29:17 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    9393    public LispObject arrayDisplacement()
    9494    {
    95         if (array != null)
    96             return LispThread.currentThread().setValues(array, new Fixnum(displacement));
    97         return super.arrayDisplacement();
     95        LispObject value1, value2;
     96        if (array != null) {
     97            value1 = array;
     98            value2 = new Fixnum(displacement);
     99        } else {
     100            value1 = NIL;
     101            value2 = Fixnum.ZERO;
     102        }
     103        return LispThread.currentThread().setValues(value1, value2);
    98104    }
    99105
     
    105111    public LispObject elt(int index) throws ConditionThrowable
    106112    {
    107         if (index < 0 || index >= length())
     113        // The index < 0 case is checked in get().
     114        if (index >= length())
    108115            badIndex(index, length());
    109116        return get(index);
     
    132139    public void set(int index, LispObject newValue) throws ConditionThrowable
    133140    {
    134         if (index >= capacity)
     141        if (index < 0 || index >= capacity)
    135142            badIndex(index, capacity);
    136143        try {
    137             int n = Fixnum.getValue(newValue);
    138             if (n == 1) {
    139                 setBit(index);
    140                 return;
    141             }
    142             if (n == 0) {
    143                 clearBit(index);
    144                 return;
    145             }
    146             // None of the above...
    147         }
    148         catch (ConditionThrowable t) {}
     144            switch (((Fixnum)newValue).value) {
     145                case 0:
     146                    if (bits != null) {
     147                        final int offset = index >> 6;
     148                        bits[offset] &= ~(1L << index);
     149                    } else
     150                        clearBit(index);
     151                    return;
     152                case 1:
     153                    if (bits != null) {
     154                        final int offset = index >> 6;
     155                        bits[offset] |= 1L << index;
     156                    } else
     157                        setBit(index);
     158                    return;
     159            }
     160        }
     161        catch (ClassCastException e) {
     162            // Fall through...
     163        }
    149164        signal(new TypeError(newValue, Symbol.BIT));
    150165    }
  • trunk/j/src/org/armedbear/lisp/ComplexString.java

    r5961 r5968  
    33 *
    44 * Copyright (C) 2002-2004 Peter Graves
    5  * $Id: ComplexString.java,v 1.10 2004-02-25 15:44:19 piso Exp $
     5 * $Id: ComplexString.java,v 1.11 2004-02-25 17:29:17 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    105105    public LispObject arrayDisplacement()
    106106    {
    107         if (array != null)
    108             return LispThread.currentThread().setValues(array, new Fixnum(displacement));
    109         return super.arrayDisplacement();
     107        LispObject value1, value2;
     108        if (array != null) {
     109            value1 = array;
     110            value2 = new Fixnum(displacement);
     111        } else {
     112            value1 = NIL;
     113            value2 = Fixnum.ZERO;
     114        }
     115        return LispThread.currentThread().setValues(value1, value2);
    110116    }
    111117
  • trunk/j/src/org/armedbear/lisp/ComplexVector.java

    r5960 r5968  
    33 *
    44 * Copyright (C) 2002-2004 Peter Graves
    5  * $Id: ComplexVector.java,v 1.9 2004-02-25 15:23:33 piso Exp $
     5 * $Id: ComplexVector.java,v 1.10 2004-02-25 17:29:17 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    108108    public LispObject arrayDisplacement()
    109109    {
    110         if (array != null)
    111             return LispThread.currentThread().setValues(array, new Fixnum(displacement));
    112         return super.arrayDisplacement();
     110        LispObject value1, value2;
     111        if (array != null) {
     112            value1 = array;
     113            value2 = new Fixnum(displacement);
     114        } else {
     115            value1 = NIL;
     116            value2 = Fixnum.ZERO;
     117        }
     118        return LispThread.currentThread().setValues(value1, value2);
    113119    }
    114120
  • trunk/j/src/org/armedbear/lisp/SimpleBitVector.java

    r5966 r5968  
    33 *
    44 * Copyright (C) 2004 Peter Graves
    5  * $Id: SimpleBitVector.java,v 1.6 2004-02-25 16:58:19 piso Exp $
     5 * $Id: SimpleBitVector.java,v 1.7 2004-02-25 17:29:17 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    158158    }
    159159
    160     public AbstractVector adjustVector(int newCapacity, LispObject initialElement,
     160    public AbstractVector adjustVector(int newCapacity,
     161                                       LispObject initialElement,
    161162                                       LispObject initialContents)
    162163        throws ConditionThrowable
    163164    {
    164         SimpleBitVector v = new SimpleBitVector(newCapacity);
    165165        if (initialContents != NIL) {
     166            SimpleBitVector v = new SimpleBitVector(newCapacity);
    166167            if (initialContents.listp()) {
    167168                LispObject list = initialContents;
     
    175176            } else
    176177                signal(new TypeError(initialContents, Symbol.SEQUENCE));
    177         } else {
     178            return v;
     179        }
     180        if (capacity != newCapacity) {
     181            SimpleBitVector v = new SimpleBitVector(newCapacity);
    178182            final int limit = Math.min(capacity, newCapacity);
    179183            for (int i = limit; i-- > 0;) {
     
    183187                    v.clearBit(i);
    184188            }
    185             if (newCapacity > capacity) {
     189            if (initialElement != NIL && capacity < newCapacity) {
    186190                int n = Fixnum.getValue(initialElement);
    187191                if (n == 1)
     
    192196                        v.clearBit(i);
    193197            }
    194         }
    195         return v;
    196     }
    197 
    198     public AbstractVector adjustVector(int newCapacity, AbstractArray displacedTo,
     198            return v;
     199        }
     200        // No change.
     201        return this;
     202    }
     203
     204    public AbstractVector adjustVector(int newCapacity,
     205                                       AbstractArray displacedTo,
    199206                                       int displacement)
    200207        throws ConditionThrowable
Note: See TracChangeset for help on using the changeset viewer.