Changeset 5271


Ignore:
Timestamp:
12/27/03 17:02:21 (17 years ago)
Author:
piso
Message:

Fill pointer support.

File:
1 edited

Legend:

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

    r5114 r5271  
    33 *
    44 * Copyright (C) 2003 Peter Graves
    5  * $Id: DisplacedArray.java,v 1.18 2003-12-13 00:58:51 piso Exp $
     5 * $Id: DisplacedArray.java,v 1.19 2003-12-27 17:02:21 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2828    private final AbstractArray array;
    2929    private final int offset;
     30
     31    private int fillPointer = -1; // -1 indicates no fill pointer.
    3032
    3133    public DisplacedArray(int[] dimv, AbstractArray array, int offset)
     
    9092    {
    9193        if (dimv.length == 1)
    92             return size;
     94            return fillPointer >= 0 ? fillPointer : size;
    9395        signal(new TypeError(this, "sequence"));
    9496        // Not reached.
     
    161163        else
    162164            signal(new TypeError("bad row major index " + index));
     165    }
     166
     167    public int getFillPointer()
     168    {
     169        return fillPointer;
     170    }
     171
     172    public void setFillPointer(int n)
     173    {
     174        fillPointer = n;
     175    }
     176
     177    public void setFillPointer(LispObject obj) throws ConditionThrowable
     178    {
     179        if (obj == T)
     180            fillPointer = size;
     181        else {
     182            int n = Fixnum.getValue(obj);
     183            if (n > size) {
     184                StringBuffer sb = new StringBuffer("The new fill pointer (");
     185                sb.append(n);
     186                sb.append(") exceeds the capacity of the vector (");
     187                sb.append(size);
     188                sb.append(").");
     189                signal(new LispError(sb.toString()));
     190            } else if (n < 0) {
     191                StringBuffer sb = new StringBuffer("The new fill pointer (");
     192                sb.append(n);
     193                sb.append(") is negative.");
     194                signal(new LispError(sb.toString()));
     195            } else
     196                fillPointer = n;
     197        }
    163198    }
    164199
Note: See TracChangeset for help on using the changeset viewer.