Changeset 5959


Ignore:
Timestamp:
02/25/04 14:50:40 (17 years ago)
Author:
piso
Message:

Work in progress.

File:
1 edited

Legend:

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

    r5957 r5959  
    33 *
    44 * Copyright (C) 2002-2004 Peter Graves
    5  * $Id: SimpleVector.java,v 1.7 2004-02-25 13:50:54 piso Exp $
     5 * $Id: SimpleVector.java,v 1.8 2004-02-25 14:50:40 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    9696    }
    9797
    98     public AbstractVector adjustVector(int size, LispObject initialElement,
    99                                      LispObject initialContents)
    100         throws ConditionThrowable
    101     {
    102         SimpleVector v = new SimpleVector(size);
    103         LispObject[] newArray = new LispObject[size];
    104         if (initialContents != NIL) {
    105             if (initialContents.listp()) {
    106                 LispObject list = initialContents;
    107                 for (int i = 0; i < size; i++) {
    108                     newArray[i] = list.car();
    109                     list = list.cdr();
    110                 }
    111             } else if (initialContents.vectorp()) {
    112                 for (int i = 0; i < size; i++)
    113                     newArray[i] = initialContents.elt(i);
    114             } else
    115                 signal(new TypeError(initialContents, Symbol.SEQUENCE));
    116         } else {
    117             System.arraycopy(elements, 0, newArray, 0,
    118                              Math.min(capacity, size));
    119             if (size > capacity) {
    120                 for (int i = capacity; i < size; i++)
    121                     newArray[i] = initialElement;
    122             }
    123         }
    124         v.elements = newArray;
    125         v.capacity = size;
    126         return v;
    127     }
    128 
    129     public AbstractVector adjustVector(int size, AbstractArray displacedTo,
    130                                      int displacement)
    131         throws ConditionThrowable
    132     {
    133         return new ComplexVector(size, displacedTo, displacement);
    134     }
    135 
    13698    public int length()
    13799    {
     
    278240        sb.append(')');
    279241        return sb.toString();
     242    }
     243
     244    public AbstractVector adjustVector(int newCapacity,
     245                                       LispObject initialElement,
     246                                       LispObject initialContents)
     247        throws ConditionThrowable
     248    {
     249        if (initialContents != NIL) {
     250            LispObject[] newElements = new LispObject[newCapacity];
     251            if (initialContents.listp()) {
     252                LispObject list = initialContents;
     253                for (int i = 0; i < newCapacity; i++) {
     254                    newElements[i] = list.car();
     255                    list = list.cdr();
     256                }
     257            } else if (initialContents.vectorp()) {
     258                for (int i = 0; i < newCapacity; i++)
     259                    newElements[i] = initialContents.elt(i);
     260            } else
     261                signal(new TypeError(initialContents, Symbol.SEQUENCE));
     262            return new SimpleVector(newElements);
     263        }
     264        if (capacity != newCapacity) {
     265            LispObject[] newElements = new LispObject[newCapacity];
     266            System.arraycopy(elements, 0, newElements, 0,
     267                             Math.min(capacity, newCapacity));
     268            for (int i = capacity; i < newCapacity; i++)
     269                newElements[i] = initialElement;
     270            return new SimpleVector(newElements);
     271        }
     272        // No change.
     273        return this;
     274    }
     275
     276    public AbstractVector adjustVector(int newCapacity,
     277                                       AbstractArray displacedTo,
     278                                       int displacement)
     279        throws ConditionThrowable
     280    {
     281        return new ComplexVector(newCapacity, displacedTo, displacement);
    280282    }
    281283
Note: See TracChangeset for help on using the changeset viewer.