Changeset 5966


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

Work in progress.

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

Legend:

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

    r5956 r5966  
    33 *
    44 * Copyright (C) 2004 Peter Graves
    5  * $Id: AbstractBitVector.java,v 1.2 2004-02-25 03:06:10 piso Exp $
     5 * $Id: AbstractBitVector.java,v 1.3 2004-02-25 16:58:19 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2525{
    2626    protected static final int LONG_MASK = 0x3f;
     27
     28    protected int capacity;
     29
     30    // For non-displaced bit-vectors.
     31    protected long[] bits;
    2732
    2833    public final LispClass classOf()
     
    4348    {
    4449        return T;
     50    }
     51
     52    public final int capacity()
     53    {
     54        return capacity;
    4555    }
    4656
     
    8696    }
    8797
     98    public void fill(LispObject obj) throws ConditionThrowable
     99    {
     100        try {
     101            switch (((Fixnum)obj).value) {
     102                case 0:
     103                    if (bits != null) {
     104                        for (int i = bits.length; i-- > 0;)
     105                            bits[i] = 0;
     106                    } else {
     107                        for (int i = capacity; i-- > 0;)
     108                            clearBit(i);
     109                    }
     110                    return;
     111                case 1:
     112                    if (bits != null) {
     113                        for (int i = bits.length; i-- > 0;)
     114                            bits[i] = -1L;
     115                    } else {
     116                        for (int i = capacity; i-- > 0;)
     117                            setBit(i);
     118                    }
     119                    return;
     120            }
     121        }
     122        catch (ClassCastException e) {
     123            // Fall through...
     124        }
     125        signal(new TypeError(obj, Symbol.BIT));
     126    }
     127
    88128    public LispObject subseq(int start, int end) throws ConditionThrowable
    89129    {
     
    140180    public LispObject AREF(LispObject index) throws ConditionThrowable
    141181    {
    142         return get(Fixnum.getValue(index));
     182        try {
     183            return get(((Fixnum)index).value);
     184        }
     185        catch (ClassCastException e) {
     186            return signal(new TypeError(index, Symbol.FIXNUM));
     187        }
    143188    }
    144189
  • trunk/j/src/org/armedbear/lisp/ComplexBitVector.java

    r5965 r5966  
    33 *
    44 * Copyright (C) 2003-2004 Peter Graves
    5  * $Id: ComplexBitVector.java,v 1.4 2004-02-25 16:18:30 piso Exp $
     5 * $Id: ComplexBitVector.java,v 1.5 2004-02-25 16:58:19 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2424public final class ComplexBitVector extends AbstractBitVector
    2525{
    26     private int capacity;
    2726    private int fillPointer = -1; // -1 indicates no fill pointer.
    2827    private boolean isDisplaced;
    29 
    30     // For non-displaced bit-vectors.
    31     private long[] bits;
    3228
    3329    // For displaced bit-vectors.
     
    10298    }
    10399
    104     public int capacity()
    105     {
    106         return capacity;
    107     }
    108 
    109100    public int length()
    110101    {
     
    122113    {
    123114        if (bits != null) {
    124             if (index >= capacity)
     115            if (index < 0 || index >= capacity)
    125116                badIndex(index, capacity);
    126117            int offset = index >> 6;
     
    175166        } else
    176167            array.setRowMajor(index + displacement, Fixnum.ZERO);
    177     }
    178 
    179     public void fill(LispObject obj) throws ConditionThrowable
    180     {
    181         try {
    182             switch (((Fixnum)obj).value) {
    183                 case 0:
    184                     if (bits != null) {
    185                         for (int i = bits.length; i-- > 0;)
    186                             bits[i] = 0;
    187                     } else {
    188                         for (int i = capacity; i-- > 0;)
    189                             clearBit(i);
    190                     }
    191                     return;
    192                 case 1:
    193                     if (bits != null) {
    194                         for (int i = bits.length; i-- > 0;)
    195                             bits[i] = -1L;
    196                     } else {
    197                         for (int i = capacity; i-- > 0;)
    198                             setBit(i);
    199                     }
    200                     return;
    201             }
    202         }
    203         catch (ClassCastException e) {
    204             // Fall through...
    205         }
    206         signal(new TypeError(obj, Symbol.BIT));
    207168    }
    208169
  • trunk/j/src/org/armedbear/lisp/SimpleBitVector.java

    r5964 r5966  
    33 *
    44 * Copyright (C) 2004 Peter Graves
    5  * $Id: SimpleBitVector.java,v 1.5 2004-02-25 16:12:14 piso Exp $
     5 * $Id: SimpleBitVector.java,v 1.6 2004-02-25 16:58:19 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2727public final class SimpleBitVector extends AbstractBitVector
    2828{
    29     private int capacity;
    30     private long[] bits;
    31 
    3229    public SimpleBitVector(int capacity) // throws ConditionThrowable
    3330    {
     
    8279    }
    8380
    84     public int capacity()
    85     {
    86         return capacity;
    87     }
    88 
    8981    public int length()
    9082    {
     
    10294    public LispObject get(int index) throws ConditionThrowable
    10395    {
    104         if (index >= capacity)
     96        if (index < 0 || index >= capacity)
    10597            badIndex(index, capacity);
    10698        int offset = index >> 6;
     
    145137        int offset = index >> 6;
    146138        bits[offset] &= ~(1L << index);
    147     }
    148 
    149     public void fill(LispObject obj) throws ConditionThrowable
    150     {
    151         try {
    152             switch (((Fixnum)obj).value) {
    153                 case 0:
    154                     for (int i = bits.length; i-- > 0;)
    155                         bits[i] = 0;
    156                     return;
    157                 case 1:
    158                     for (int i = bits.length; i-- > 0;)
    159                         bits[i] = -1L;
    160                     return;
    161             }
    162         }
    163         catch (ClassCastException e) {
    164             // Fall through...
    165         }
    166         signal(new TypeError(obj, Symbol.BIT));
    167139    }
    168140
Note: See TracChangeset for help on using the changeset viewer.