Changeset 5987


Ignore:
Timestamp:
02/26/04 01:39:27 (17 years ago)
Author:
piso
Message:

Array refactoring (work in progress).

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

Legend:

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

    r5923 r5987  
    33 *
    44 * Copyright (C) 2003-2004 Peter Graves
    5  * $Id: AbstractArray.java,v 1.17 2004-02-24 12:30:37 piso Exp $
     5 * $Id: AbstractArray.java,v 1.18 2004-02-26 01:34:47 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    7777        sb.append("wrong number of subscripts (1) for array of rank ");
    7878        sb.append(getRank());
     79        sb.append(".");
    7980        return signal(new ProgramError(sb.toString()));
    8081    }
     
    9394
    9495    public abstract void setRowMajor(int index, LispObject newValue) throws ConditionThrowable;
     96
     97    public abstract void fill(LispObject obj) throws ConditionThrowable;
     98
     99    // FIXME Detect overflow!
     100    protected static int computeTotalSize(int[] dimensions)
     101    {
     102        int size = 1;
     103        for (int i = dimensions.length; i-- > 0;)
     104            size *= dimensions[i];
     105        return size;
     106    }
    95107
    96108    // Helper for toString().
  • trunk/j/src/org/armedbear/lisp/AbstractVector.java

    r5962 r5987  
    9393    public abstract LispObject subseq(int start, int end) throws ConditionThrowable;
    9494
    95     public abstract void fill(LispObject obj) throws ConditionThrowable;
    96 
    9795    public abstract void shrink(int n) throws ConditionThrowable;
    9896
  • trunk/j/src/org/armedbear/lisp/make_array.java

    r5971 r5987  
    33 *
    44 * Copyright (C) 2003-2004 Peter Graves
    5  * $Id: make_array.java,v 1.20 2004-02-25 18:36:12 piso Exp $
     5 * $Id: make_array.java,v 1.21 2004-02-26 01:39:27 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    7373                displacement = 0;
    7474            if (rank == 1) {
     75                AbstractVector v;
    7576                if (array.getElementType() == Symbol.CHARACTER) {
    76                     ComplexString s = new ComplexString(dimv[0], array, displacement);
    77                     if (fillPointer != NIL)
    78                         s.setFillPointer(fillPointer);
    79                     return s;
     77                    v = new ComplexString(dimv[0], array, displacement);
    8078                } else if (array.getElementType() == Symbol.BIT) {
    81                     ComplexBitVector v = new ComplexBitVector(dimv[0], array, displacement);
    82                     if (fillPointer != NIL)
    83                         v.setFillPointer(fillPointer);
    84                     return v;
     79                    v = new ComplexBitVector(dimv[0], array, displacement);
    8580                } else {
    86                     ComplexVector v = new ComplexVector(dimv[0], array, displacement);
    87                     if (fillPointer != NIL)
    88                         v.setFillPointer(fillPointer);
    89                     return v;
     81                    v = new ComplexVector(dimv[0], array, displacement);
    9082                }
     83                if (fillPointer != NIL)
     84                    v.setFillPointer(fillPointer);
     85                return v;
    9186            }
    92             DisplacedArray displacedArray = new DisplacedArray(dimv, array, displacement);
    93             if (rank == 1 && fillPointer != NIL)
    94                 displacedArray.setFillPointer(fillPointer);
    95             return displacedArray;
     87            return new ComplexArray(dimv, array, displacement);
    9688        }
    9789        if (rank == 0) {
     
    163155        }
    164156        // rank != 1
    165         Array array;
    166         if (initialContents != NIL) {
    167             array = new Array(dimv, initialContents);
     157        AbstractArray array;
     158        if (adjustable == NIL) {
     159            if (initialContents != NIL) {
     160                array = new SimpleArray(dimv, initialContents);
     161            } else {
     162                array = new SimpleArray(dimv);
     163                if (initialElementProvided != NIL)
     164                    array.fill(initialElement);
     165            }
    168166        } else {
    169             array = new Array(dimv);
    170             if (initialElementProvided != NIL)
    171                 array.fill(initialElement);
     167            if (initialContents != NIL) {
     168                array = new ComplexArray(dimv, initialContents);
     169            } else {
     170                array = new ComplexArray(dimv);
     171                if (initialElementProvided != NIL)
     172                    array.fill(initialElement);
     173            }
    172174        }
    173175        return array;
Note: See TracChangeset for help on using the changeset viewer.