Changeset 5994


Ignore:
Timestamp:
02/26/04 19:30:46 (17 years ago)
Author:
piso
Message:

Use AbstractArray?.getRowMajorIndex().

File:
1 edited

Legend:

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

    r5990 r5994  
    33 *
    44 * Copyright (C) 2002-2004 Peter Graves
    5  * $Id: Primitives.java,v 1.583 2004-02-26 01:45:03 piso Exp $
     5 * $Id: Primitives.java,v 1.584 2004-02-26 19:30:46 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    17701770            AbstractArray array = checkArray(first);
    17711771            LispObject[] subscripts = second.copyToArray();
    1772             return number(arrayRowMajorIndex(array, subscripts));
     1772            return number(array.getRowMajorIndex(subscripts));
    17731773        }
    17741774    };
     
    18041804            for (int i = subscripts.length; i-- > 0;)
    18051805                subscripts[i] = args[i+1];
    1806             int rowMajorIndex = arrayRowMajorIndex(array, subscripts);
     1806            int rowMajorIndex = array.getRowMajorIndex(subscripts);
    18071807            return array.getRowMajor(rowMajorIndex);
    18081808        }
    18091809    };
    1810 
    1811     private static final int arrayRowMajorIndex(AbstractArray array,
    1812                                                 LispObject[] subscripts)
    1813         throws ConditionThrowable
    1814     {
    1815         final int rank = array.getRank();
    1816         if (rank != subscripts.length) {
    1817             StringBuffer sb = new StringBuffer("Wrong number of subscripts (");
    1818             sb.append(subscripts.length);
    1819             sb.append(") for array of rank ");
    1820             sb.append(rank);
    1821             sb.append('.');
    1822             signal(new ProgramError(sb.toString()));
    1823         }
    1824         if (rank == 0)
    1825             return 0;
    1826         int sum = 0;
    1827         int size = 1;
    1828         for (int i = rank; i-- > 0;) {
    1829             int dim = array.getDimension(i);
    1830             int lastSize = size;
    1831             size *= dim;
    1832             LispObject subscript = subscripts[i];
    1833             if (subscript instanceof Fixnum) {
    1834                 int n = ((Fixnum)subscript).getValue();
    1835                 if (n < 0 || n >= array.getDimension(i))
    1836                     signal(new ProgramError());
    1837                 sum += n * lastSize;
    1838             } else if (subscript instanceof Bignum) {
    1839                 signal(new ProgramError());
    1840             } else
    1841                 signal(new TypeError(subscript, "integer"));
    1842         }
    1843         return sum;
    1844     }
    18451810
    18461811    // ### row-major-aref
Note: See TracChangeset for help on using the changeset viewer.