Skip to content

Commit

Permalink
🐛 TRY: positive index only
Browse files Browse the repository at this point in the history
  • Loading branch information
wolfram77 committed May 13, 2023
1 parent d8f8d11 commit 5eb78d6
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 23 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
{
"name": "extra-array",
"version": "4.1.13",
"version": "4.1.14",
"description": "An array is a collection of values, stored contiguously.",
"main": "index.js",
"module": "index.mjs",
"sideEffects": false,
"private": true,
"exports": {
"require": "./index.js",
"import": "./index.mjs"
Expand Down
40 changes: 20 additions & 20 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -309,23 +309,23 @@ export function ientries<T>(x: T[]): IEntries<T> {
// -------------

/**
* Get zero-based index for an element in array.
* Get unmirrored index for an element in array.
* @param x an array
* @param i ±index
* @returns i' | x[i'] = x[i]; i' ∈ [0, |x|]
* @param i mirrored ±index
* @returns i' | x.at(i') = x.at(i); i' ∈ [0, |x|]
*/
export function index<T>(x: T[], i: number): number {
var X = x.length;
return i>=0? Math.min(i, X) : Math.max(X+i, 0);
return i>=0? Math.min(i, X) : (i>=-X? X+i : X);
}


/**
* Get zero-based index range for part of array.
* Get unmirrored index range for part of array.
* @param x an array
* @param i begin ±index [0]
* @param I end ±index (exclusive) [|x|]
* @returns [i', I'] | i' ≤ I'; i', I' ∈ [0, |x|]
* @param i begin mirrored ±index [0]
* @param I end mirrored ±index (exclusive) [|x|]
* @returns [i', I'] | x.slice(i', I') = x.slice(i, I); i' ≤ I'; i', I' ∈ [0, |x|]
*/
export function indexRange<T>(x: T[], i: number=0, I: number=x.length): [number, number] {
var X = x.length;
Expand Down Expand Up @@ -354,13 +354,10 @@ export function isEmpty<T>(x: T[]): boolean {
/**
* Find the length of an array.
* @param x an array
* @param i begin ±index [0]
* @param I end ±index (exclusive) [X]
* @returns |x[i..I]|
* @returns |x|
*/
export function length<T>(x: T[], i: number=0, I: number=x.length): number {
var [i, I] = indexRange(x, i, I);
return I-i;
export function length<T>(x: T[]): number {
return x.length;
}
export {length as size};

Expand All @@ -370,7 +367,7 @@ export {length as size};
* @param x an array
* @param n new length
* @param vd default value
* @returns resized x
* @returns x | x[|x|..n] = vd; |x| = n
*/
export function resize$<T>(x: T[], n: number, vd: T) {
var X = x.length; x.length = n;
Expand Down Expand Up @@ -403,7 +400,7 @@ export function clear$<T>(x: T[]) {
* @returns x[i]
*/
export function get<T>(x: T[], i: number): T {
return x[index(x, i)];
return x[i];
}
export {get as at};

Expand All @@ -419,7 +416,10 @@ export {get as at};
* @returns [x[i₀], x[i₁], ...] | [i₀, i₁, ...] = is
*/
export function getAll<T>(x: T[], is: number[]): T[] {
return is.map(i => get(x, i));
var a = [];
for (var i of is)
a.push(x[i]);
return a;
}


Expand All @@ -431,7 +431,7 @@ export function getAll<T>(x: T[], is: number[]): T[] {
*/
export function getPath(x: any[], p: number[]): any {
for (var i of p)
x = is(x)? get(x, i) : undefined;
x = Array.isArray(x)? x[i] : undefined;
return x;
}

Expand All @@ -444,8 +444,8 @@ export function getPath(x: any[], p: number[]): any {
*/
export function hasPath(x: any[], p: number[]): boolean {
for (var i of p) {
if (!is(x)) return false;
x = get(x, i);
if (!Array.isArray(x)) return false;
x = x[i];
}
return true;
}
Expand Down

0 comments on commit 5eb78d6

Please sign in to comment.