Changeset 5847


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

adjustArray: support initialContents.

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

Legend:

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

    r5844 r5847  
    33 *
    44 * Copyright (C) 2002-2004 Peter Graves
    5  * $Id: LispString.java,v 1.80 2004-02-16 00:46:22 piso Exp $
     5 * $Id: LispString.java,v 1.81 2004-02-16 01:25:47 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    312312    }
    313313
    314     public LispString adjustArray(int size, LispObject initialElement)
     314    public LispString adjustArray(int size, LispObject initialElement,
     315                                  LispObject initialContents)
    315316        throws ConditionThrowable
    316317    {
    317318        if (chars.length != size) {
    318319            char[] newArray = new char[size];
    319             System.arraycopy(chars, 0, newArray, 0,
    320                              Math.min(chars.length, size));
    321             if (size > chars.length) {
    322                 final char c;
    323                 if (initialElement != NIL)
    324                     c = LispCharacter.getValue(initialElement);
    325                 else
    326                     c = 0;
    327                 for (int i = chars.length; i < size; i++)
    328                     newArray[i] = c;
     320            if (initialContents != NIL) {
     321                if (initialContents.listp()) {
     322                    LispObject list = initialContents;
     323                    for (int i = 0; i < size; i++) {
     324                        newArray[i] = LispCharacter.getValue(list.car());
     325                        list = list.cdr();
     326                    }
     327                } else if (initialContents.vectorp()) {
     328                    for (int i = 0; i < size; i++)
     329                        newArray[i] = LispCharacter.getValue(initialContents.elt(i));
     330                } else
     331                    signal(new TypeError(initialContents, Symbol.SEQUENCE));
     332            } else {
     333                System.arraycopy(chars, 0, newArray, 0,
     334                                 Math.min(chars.length, size));
     335                if (size > chars.length) {
     336                    final char c;
     337                    if (initialElement != NIL)
     338                        c = LispCharacter.getValue(initialElement);
     339                    else
     340                        c = 0;
     341                    for (int i = chars.length; i < size; i++)
     342                        newArray[i] = c;
     343                }
    329344            }
    330345            chars = newArray;
  • trunk/j/src/org/armedbear/lisp/Vector.java

    r5844 r5847  
    33 *
    44 * Copyright (C) 2002-2004 Peter Graves
    5  * $Id: Vector.java,v 1.31 2004-02-16 00:46:36 piso Exp $
     5 * $Id: Vector.java,v 1.32 2004-02-16 01:25:22 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    8282    }
    8383
    84     public Vector adjustArray(int size, LispObject initialElement)
     84    public Vector adjustArray(int size, LispObject initialElement,
     85                              LispObject initialContents)
     86        throws ConditionThrowable
    8587    {
    8688        if (elements.length != size) {
    8789            LispObject[] newArray = new LispObject[size];
    88             System.arraycopy(elements, 0, newArray, 0,
    89                              Math.min(elements.length, size));
    90             if (size > elements.length) {
    91                 for (int i = elements.length; i < size; i++)
    92                     newArray[i] = initialElement;
     90            if (initialContents != NIL) {
     91                if (initialContents.listp()) {
     92                    LispObject list = initialContents;
     93                    for (int i = 0; i < size; i++) {
     94                        newArray[i] = list.car();
     95                        list = list.cdr();
     96                    }
     97                } else if (initialContents.vectorp()) {
     98                    for (int i = 0; i < size; i++)
     99                        newArray[i] = initialContents.elt(i);
     100                } else
     101                    signal(new TypeError(initialContents, Symbol.SEQUENCE));
     102            } else {
     103                System.arraycopy(elements, 0, newArray, 0,
     104                                 Math.min(elements.length, size));
     105                if (size > elements.length) {
     106                    for (int i = elements.length; i < size; i++)
     107                        newArray[i] = initialElement;
     108                }
    93109            }
    94110            elements = newArray;
Note: See TracChangeset for help on using the changeset viewer.