diff --git a/array/base/fancy-slice-assign/coverage.ndjson b/array/base/fancy-slice-assign/coverage.ndjson index 9d2500487..13bd65490 100644 --- a/array/base/fancy-slice-assign/coverage.ndjson +++ b/array/base/fancy-slice-assign/coverage.ndjson @@ -1 +1,2 @@ [193,193,100,15,15,100,1,1,100,193,193,100,"5c3a28ef4bcf6eda6ecc86c7fe8de78b63576595","2024-02-05 18:46:32 -0800"] +[200,200,100,18,18,100,1,1,100,200,200,100,"15a1865590e694dfa122c18e34bb3d4d5d7a28f0","2024-02-12 19:31:34 -0800"] diff --git a/array/base/fancy-slice-assign/index.html b/array/base/fancy-slice-assign/index.html index 2b69a437b..e06a9c8a9 100644 --- a/array/base/fancy-slice-assign/index.html +++ b/array/base/fancy-slice-assign/index.html @@ -25,14 +25,14 @@

All files array/base/fancy-slice-assign
100% Statements - 193/193 + 200/200
100% Branches - 15/15 + 18/18
@@ -46,7 +46,7 @@

All files array/base/fancy-slice-assign
100% Lines - 193/193 + 200/200
@@ -99,13 +99,13 @@

All files array/base/fancy-slice-assign
100% - 126/126 + 133/133 100% - 14/14 + 17/17 100% 1/1 100% - 126/126 + 133/133 @@ -116,7 +116,7 @@

All files array/base/fancy-slice-assign + + + + + + \ No newline at end of file diff --git a/array/index/coverage.ndjson b/array/index/coverage.ndjson new file mode 100644 index 000000000..e530cf05e --- /dev/null +++ b/array/index/coverage.ndjson @@ -0,0 +1 @@ +[609,729,83.5391,21,26,80.7692,3,14,21.4286,609,729,83.5391,"15a1865590e694dfa122c18e34bb3d4d5d7a28f0","2024-02-12 19:31:34 -0800"] diff --git a/array/index/defaults.js.html b/array/index/defaults.js.html new file mode 100644 index 000000000..410137ff5 --- /dev/null +++ b/array/index/defaults.js.html @@ -0,0 +1,211 @@ + + + + + + Code coverage report for array/index/lib/defaults.js + + + + + + + + + +
+
+

All files / array/index/lib defaults.js

+
+ +
+ 100% + Statements + 42/42 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 42/42 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +431x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +10x +10x +10x +10x +10x +1x +1x +1x +1x +1x + 
/**
+* @license Apache-2.0
+*
+* Copyright (c) 2024 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ 
+'use strict';
+ 
+// MAIN //
+ 
+/**
+* Returns default options.
+*
+* @private
+* @returns {Object} defaults
+*
+* @example
+* var o = defaults();
+* // returns {...}
+*/
+function defaults() {
+	return {
+		'persist': false
+	};
+}
+ 
+ 
+// EXPORTS //
+ 
+module.exports = defaults;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/array/index/find.js.html b/array/index/find.js.html new file mode 100644 index 000000000..722fb8d9e --- /dev/null +++ b/array/index/find.js.html @@ -0,0 +1,232 @@ + + + + + + Code coverage report for array/index/lib/find.js + + + + + + + + + +
+
+

All files / array/index/lib find.js

+
+ +
+ 79.59% + Statements + 39/49 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 79.59% + Lines + 39/49 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +501x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x + 
/**
+* @license Apache-2.0
+*
+* Copyright (c) 2024 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ 
+'use strict';
+ 
+// MODULES //
+ 
+var cache = require( './cache.js' );
+ 
+ 
+// MAIN //
+ 
+/**
+* Returns an array index object associated with a specified identifier.
+*
+* @private
+* @param {*} id - identifier
+* @returns {(Node|null)} array index object
+*/
+function find( id ) { // eslint-disable-line stdlib/no-redeclare
+	var node = cache.first();
+	while ( node ) {
+		if ( node.value.id === id ) {
+			return node;
+		}
+		node = node.next;
+	}
+	return null;
+}
+ 
+ 
+// EXPORTS //
+ 
+module.exports = find;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/array/index/id.js.html b/array/index/id.js.html new file mode 100644 index 000000000..e8b61ee70 --- /dev/null +++ b/array/index/id.js.html @@ -0,0 +1,223 @@ + + + + + + Code coverage report for array/index/lib/id.js + + + + + + + + + +
+
+

All files / array/index/lib id.js

+
+ +
+ 100% + Statements + 46/46 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 46/46 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +471x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +10x +10x +10x +10x +1x +1x +1x +1x +1x + 
/**
+* @license Apache-2.0
+*
+* Copyright (c) 2024 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ 
+'use strict';
+ 
+// VARIABLES //
+ 
+var COUNTER = -1; // TODO: consider another approach for unique identifier generation. For most cases, this should suffice; however, it is possible that two different libraries, both relying on separate copies of this package, may trigger id collisions in the event that instantiated instances were to interact (e.g., a consumer attempting to free an instance instantiated by another copy of the package, etc).
+ 
+ 
+// MAIN //
+ 
+/**
+* Generates a new identifier.
+*
+* @private
+* @returns {string} identifier
+*
+* @example
+* var v = id();
+* // returns <string>
+*/
+function id() {
+	COUNTER += 1;
+	return COUNTER.toString();
+}
+ 
+ 
+// EXPORTS //
+ 
+module.exports = id;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/array/index/index.html b/array/index/index.html new file mode 100644 index 000000000..90e0292d3 --- /dev/null +++ b/array/index/index.html @@ -0,0 +1,206 @@ + + + + + + Code coverage report for array/index/lib + + + + + + + + + +
+
+

All files array/index/lib

+
+ +
+ 83.53% + Statements + 609/729 +
+ + +
+ 80.76% + Branches + 21/26 +
+ + +
+ 21.42% + Functions + 3/14 +
+ + +
+ 83.53% + Lines + 609/729 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
cache.js +
+
100%40/40100%1/1100%0/0100%40/40
defaults.js +
+
100%42/42100%2/2100%1/1100%42/42
find.js +
+
79.59%39/49100%1/10%0/179.59%39/49
id.js +
+
100%46/46100%2/2100%1/1100%46/46
index.js +
+
100%43/43100%1/1100%0/0100%43/43
main.js +
+
77.87%345/44372.22%13/1810%1/1077.87%345/443
validate.js +
+
81.81%54/66100%1/10%0/181.81%54/66
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/array/index/index.js.html b/array/index/index.js.html new file mode 100644 index 000000000..1a48a6475 --- /dev/null +++ b/array/index/index.js.html @@ -0,0 +1,214 @@ + + + + + + Code coverage report for array/index/lib/index.js + + + + + + + + + +
+
+

All files / array/index/lib index.js

+
+ +
+ 100% + Statements + 43/43 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 43/43 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +441x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x + 
/**
+* @license Apache-2.0
+*
+* Copyright (c) 2024 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ 
+'use strict';
+ 
+/**
+* Array index constructor.
+*
+* @module @stdlib/array/index
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+* var ArrayIndex = require( '@stdlib/array/index' );
+*
+* var x = new Uint8Array( [ 1, 0, 1, 0 ] );
+*
+* var idx = new ArrayIndex( x );
+* // returns <ArrayIndex>
+*/
+ 
+// MODULES //
+ 
+var main = require( './main.js' );
+ 
+ 
+// EXPORTS //
+ 
+module.exports = main;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/array/index/main.js.html b/array/index/main.js.html new file mode 100644 index 000000000..7af6f31cb --- /dev/null +++ b/array/index/main.js.html @@ -0,0 +1,1414 @@ + + + + + + Code coverage report for array/index/lib/main.js + + + + + + + + + +
+
+

All files / array/index/lib main.js

+
+ +
+ 77.87% + Statements + 345/443 +
+ + +
+ 72.22% + Branches + 13/18 +
+ + +
+ 10% + Functions + 1/10 +
+ + +
+ 77.87% + Lines + 345/443 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +4441x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +15x +15x +15x +15x +15x +15x +15x +15x +5x +  +  +5x +5x +15x +  +  +10x +10x +10x +15x +6x +6x +6x +6x +6x +2x +6x +4x +4x +  +  +15x +2x +2x +2x +2x +  +  +10x +10x +15x +  +  +  +  +  +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +15x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x + 
/**
+* @license Apache-2.0
+*
+* Copyright (c) 2024 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ 
+/* eslint-disable no-restricted-syntax, no-invalid-this */
+ 
+'use strict';
+ 
+// MODULES //
+ 
+var setReadOnlyAccessor = require( '@stdlib/utils/define-nonenumerable-read-only-accessor' );
+var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' );
+var setNonEnumerable = require( '@stdlib/utils/define-nonenumerable-property' );
+var isCollection = require( '@stdlib/assert/is-collection' );
+var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive;
+var isInteger = require( '@stdlib/assert/is-integer' ).isPrimitive;
+var isAccessorArray = require( '@stdlib/array/base/assert/is-accessor-array' );
+var array2json = require( '@stdlib/array/to-json' );
+var dtype = require( '@stdlib/array/dtype' );
+var copy = require( '@stdlib/array/base/copy' );
+var resolveGetter = require( '@stdlib/array/base/resolve-getter' );
+var format = require( '@stdlib/string/format' );
+var defaults = require( './defaults.js' );
+var validate = require( './validate.js' );
+var cache = require( './cache.js' );
+var findArrayIndex = require( './find.js' );
+var generateId = require( './id.js' );
+ 
+ 
+// MAIN //
+ 
+/**
+* Array index constructor.
+*
+* @param {Collection} x - input array
+* @param {Options} [options] - function options
+* @param {boolean} [options.persist=false] - boolean indicating whether to continue persisting an index object after first usage
+* @throws {TypeError} first argument must be an array-like object
+* @throws {TypeError} first argument must be a valid index array
+* @throws {TypeError} options argument must be an object
+* @throws {TypeError} must provide valid options
+* @returns {ArrayIndex} ArrayIndex instance
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var x = new Uint8Array( [ 1, 0, 1, 0 ] );
+*
+* var idx = new ArrayIndex( x );
+* // returns <ArrayIndex>
+*/
+function ArrayIndex( x ) {
+	var opts;
+	var err;
+	var get;
+	var dt;
+	var t;
+	var v;
+	if ( !(this instanceof ArrayIndex) ) {
+		if ( arguments.length > 1 ) {
+			return new ArrayIndex( x, arguments[ 1 ] );
+		}
+		return new ArrayIndex( x );
+	}
+	if ( !isCollection( x ) ) {
+		throw new TypeError( format( 'invalid argument. First argument must be an array-like object. Value: `%s`.', x ) );
+	}
+	dt = dtype( x );
+ 
+	// When provided a "generic" array or an array of an unknown data type, attempt to infer the type of index array...
+	if ( dt === 'generic' || dt === null ) {
+		get = resolveGetter( x );
+		v = get( x, 0 );
+ 
+		// Infer the "type" of index array from the first element...
+		if ( isBoolean( v ) ) {
+			t = 'bool';
+		} else if ( isInteger( v ) ) {
+			t = 'int';
+		} else {
+			throw new TypeError( 'invalid argument. First argument must be a valid index array.' );
+		}
+	} else if ( dt === 'int32' ) {
+		t = 'int';
+	} else if ( dt === 'uint8' ) {
+		t = 'mask';
+	} else {
+		throw new TypeError( 'invalid argument. First argument must be a valid index array.' );
+	}
+	// Resolve index options:
+	opts = defaults();
+	if ( arguments.length > 1 ) {
+		err = validate( opts, arguments[ 1 ] );
+		if ( err ) {
+			throw err;
+		}
+	}
+	// Add the array index to the index cache:
+	cache.push({
+		'id': generateId(),
+		'ref': this,
+		'data': x,
+		'type': t,
+		'dtype': dt,
+		'persist': opts.persist
+	});
+ 
+	// Store a reference to the cache node:
+	setReadOnly( this, '_node', cache.last() );
+ 
+	// Initialize a boolean flag indicating whether an array index object has been invalidated (i.e., freed):
+	setNonEnumerable( this, '_invalidated', false );
+ 
+	return this;
+}
+ 
+/**
+* Constructor name.
+*
+* @name name
+* @memberof ArrayIndex
+* @readonly
+* @type {string}
+* @default 'ArrayIndex'
+*
+* @example
+* var str = ArrayIndex.name;
+* // returns 'ArrayIndex'
+*/
+setReadOnly( ArrayIndex, 'name', 'ArrayIndex' );
+ 
+/**
+* Frees an array index object associated with a provided identifier.
+*
+* @name free
+* @memberof ArrayIndex
+* @type {Function}
+* @param {string} id - identifier
+* @returns {boolean} boolean indicating whether an array index object was successfully freed
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var idx = new ArrayIndex( new Uint8Array( [ 1, 0, 1, 0 ] ), {
+*     'persist': true
+* });
+* // returns <ArrayIndex>
+*
+* // ...
+*
+* var out = ArrayIndex.free( idx.id );
+* // returns true
+*/
+setReadOnly( ArrayIndex, 'free', function free( id ) {
+	var node;
+	var v;
+
+	// Retrieve the array index object with the specified identifier:
+	node = findArrayIndex( id );
+	if ( node === null ) {
+		return false;
+	}
+	v = node.value;
+
+	// Invalidate the array instance object:
+	setReadOnly( v.ref, '_invalidated', true );
+
+	// Remove the array instance from the cache:
+	cache.remove( node );
+
+	// Remove the reference to the original array:
+	v.data = null;
+
+	return true;
+});
+ 
+/**
+* Returns the array associated with a provided identifier.
+*
+* @name get
+* @memberof ArrayIndex
+* @type {Function}
+* @param {string} id - identifier
+* @returns {(Object|null)} object containing array index data
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var idx = new ArrayIndex( new Uint8Array( [ 1, 0, 1, 0 ] ), {
+*     'persist': true
+* });
+* // returns <ArrayIndex>
+*
+* // ...
+*
+* var o = ArrayIndex.get( idx.id );
+* // returns {...}
+*
+* var d = o.data;
+* // returns <Uint8Array>[ 1, 0, 1, 0 ]
+*
+* var t = o.type;
+* // returns 'mask'
+*
+* var dt = o.dtype;
+* // returns 'uint8'
+*/
+setReadOnly( ArrayIndex, 'get', function get( id ) {
+	var node;
+	var out;
+	var v;
+
+	// Retrieve the array index object with the specified identifier:
+	node = findArrayIndex( id );
+	if ( node === null ) {
+		return null;
+	}
+	v = node.value;
+
+	// Assemble the output object:
+	out = {
+		'data': v.data,
+		'type': v.type,
+		'dtype': v.dtype
+	};
+
+	// If the array index object should not be persisted, go ahead and remove the object from the cache...
+	if ( !v.persist ) {
+		ArrayIndex.free( id ); // note: this should come last, after having retrieved all desired array index node data
+	}
+	return out;
+});
+ 
+/**
+* Returns the underlying array data of array index object.
+*
+* @name data
+* @memberof ArrayIndex.prototype
+* @readonly
+* @type {Collection}
+* @throws {Error} array index is no longer valid
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var idx = new ArrayIndex( new Uint8Array( [ 1, 0, 1, 0 ] ) );
+* // returns <ArrayIndex>
+*
+* var v = idx.data;
+* // returns <Uint8Array>[ 1, 0, 1, 0 ]
+*/
+setReadOnlyAccessor( ArrayIndex.prototype, 'data', function get() {
+	if ( this._invalidated ) {
+		throw new Error( 'invalid operation. This array index instance has already been freed and can no longer be used.' );
+	}
+	return this._node.value.data;
+});
+ 
+/**
+* Returns the underlying array data type of array index object.
+*
+* @name dtype
+* @memberof ArrayIndex.prototype
+* @readonly
+* @type {string}
+* @throws {Error} array index is no longer valid
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var idx = new ArrayIndex( new Uint8Array( [ 1, 0, 1, 0 ] ) );
+* // returns <ArrayIndex>
+*
+* var t = idx.dtype;
+* // returns 'uint8'
+*/
+setReadOnlyAccessor( ArrayIndex.prototype, 'dtype', function get() {
+	if ( this._invalidated ) {
+		throw new Error( 'invalid operation. This array index instance has already been freed and can no longer be used.' );
+	}
+	return this._node.value.dtype;
+});
+ 
+/**
+* Returns the identifier associated with an array index object.
+*
+* @name id
+* @memberof ArrayIndex.prototype
+* @readonly
+* @type {string}
+* @throws {Error} array index is no longer valid
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var idx = new ArrayIndex( new Uint8Array( [ 1, 0, 1, 0 ] ) );
+* // returns <ArrayIndex>
+*
+* var id = idx.id;
+* // returns <string>
+*/
+setReadOnlyAccessor( ArrayIndex.prototype, 'id', function get() {
+	if ( this._invalidated ) {
+		throw new Error( 'invalid operation. This array index instance has already been freed and can no longer be used.' );
+	}
+	return this._node.value.id;
+});
+ 
+/**
+* Returns a boolean indicating if an array index is actively cached.
+*
+* @name isCached
+* @memberof ArrayIndex.prototype
+* @readonly
+* @type {boolean}
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var idx = new ArrayIndex( new Uint8Array( [ 1, 0, 1, 0 ] ) );
+* // returns <ArrayIndex>
+*
+* var out = idx.isCached;
+* // returns true
+*/
+setReadOnlyAccessor( ArrayIndex.prototype, 'isCached', function get() {
+	return !this._invalidated;
+});
+ 
+/**
+* Returns the type of array index object.
+*
+* @name type
+* @memberof ArrayIndex.prototype
+* @readonly
+* @type {string}
+* @throws {Error} array index is no longer valid
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var idx = new ArrayIndex( new Uint8Array( [ 1, 0, 1, 0 ] ) );
+* // returns <ArrayIndex>
+*
+* var t = idx.type;
+* // returns 'mask'
+*/
+setReadOnlyAccessor( ArrayIndex.prototype, 'type', function get() {
+	if ( this._invalidated ) {
+		throw new Error( 'invalid operation. This array index instance has already been freed and can no longer be used.' );
+	}
+	return this._node.value.type;
+});
+ 
+/**
+* Serializes an array index object to a string.
+*
+* @name toString
+* @memberof ArrayIndex.prototype
+* @type {Function}
+* @throws {Error} array index is no longer valid
+* @returns {string} serialized array index object
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var idx = new ArrayIndex( new Uint8Array( [ 1, 0, 1, 0 ] ) );
+* // returns <ArrayIndex>
+*
+* var str = idx.toString();
+* // e.g., 'ArrayIndex<0>'
+*/
+setReadOnly( ArrayIndex.prototype, 'toString', function toString() {
+	var v;
+	if ( this._invalidated ) {
+		throw new Error( 'invalid operation. This array index instance has already been freed and can no longer be used.' );
+	}
+	v = this._node.value;
+	return 'ArrayIndex<' + v.id + '>';
+});
+ 
+/**
+* Serializes an array index object as a JSON object.
+*
+* ## Notes
+*
+* -   `JSON.stringify()` implicitly calls this method when stringifying an `ArrayIndex` instance.
+*
+* @name toJSON
+* @memberof ArrayIndex.prototype
+* @type {Function}
+* @throws {Error} array index is no longer valid
+* @returns {Object} serialized array index object
+*
+* @example
+* var Uint8Array = require( '@stdlib/array/uint8' );
+*
+* var idx = new ArrayIndex( new Uint8Array( [ 1, 0, 1, 0 ] ) );
+* // returns <ArrayIndex>
+*
+* var o = idx.toJSON();
+* // returns { 'type': 'ArrayIndex', 'data': { 'type': 'Uint8Array', 'data': [ 1, 0, 1, 0 ] } }
+*/
+setReadOnly( ArrayIndex.prototype, 'toJSON', function toJSON() {
+	var v;
+	var o;
+	if ( this._invalidated ) {
+		throw new Error( 'invalid operation. This array index instance has already been freed and can no longer be used.' );
+	}
+	v = this._node.value;
+	if ( v.dtype === 'generic' || v.dtype === null ) {
+		if ( isAccessorArray( v.data ) ) {
+			o = copy( v.data );
+		} else {
+			o = v.data;
+		}
+	} else {
+		o = array2json( v.data );
+	}
+	return {
+		'type': 'ArrayIndex',
+		'data': o
+	};
+});
+ 
+ 
+// EXPORTS //
+ 
+module.exports = ArrayIndex;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/array/index/validate.js.html b/array/index/validate.js.html new file mode 100644 index 000000000..a67240aab --- /dev/null +++ b/array/index/validate.js.html @@ -0,0 +1,283 @@ + + + + + + Code coverage report for array/index/lib/validate.js + + + + + + + + + +
+
+

All files / array/index/lib validate.js

+
+ +
+ 81.81% + Statements + 54/66 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 81.81% + Lines + 54/66 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +671x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x + 
/**
+* @license Apache-2.0
+*
+* Copyright (c) 2024 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ 
+'use strict';
+ 
+// MODULES //
+ 
+var isObject = require( '@stdlib/assert/is-plain-object' );
+var hasOwnProp = require( '@stdlib/assert/has-own-property' );
+var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive;
+var format = require( '@stdlib/string/format' );
+ 
+ 
+// MAIN //
+ 
+/**
+* Validates function options.
+*
+* @private
+* @param {Object} opts - destination object
+* @param {Options} options - function options
+* @param {boolean} [options.persist] - boolean indicating whether to continue persisting an index object after first usage
+* @returns {(Error|null)} null or an error object
+*
+* @example
+* var opts = {};
+* var options = {
+*     'persist': false
+* };
+* var err = validate( opts, options );
+* if ( err ) {
+*     throw err;
+* }
+*/
+function validate( opts, options ) {
+	if ( !isObject( options ) ) {
+		return new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
+	}
+	if ( hasOwnProp( options, 'persist' ) ) {
+		opts.persist = options.persist;
+		if ( !isBoolean( opts.persist ) ) {
+			return new TypeError( format( 'invalid option. `%s` option must be a boolean. Option: `%s`.', 'persist', opts.persist ) );
+		}
+	}
+	return null;
+}
+ 
+ 
+// EXPORTS //
+ 
+module.exports = validate;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/namespace/alias2pkg/coverage.ndjson b/namespace/alias2pkg/coverage.ndjson index d40f0cb50..137bfcc81 100644 --- a/namespace/alias2pkg/coverage.ndjson +++ b/namespace/alias2pkg/coverage.ndjson @@ -79,3 +79,4 @@ [95,95,100,7,7,100,1,1,100,95,95,100,"4877282c798840743cf64baaddf415260d86270d","2024-01-28 04:29:13 -0800"] [95,95,100,7,7,100,1,1,100,95,95,100,"5c3a28ef4bcf6eda6ecc86c7fe8de78b63576595","2024-02-05 18:46:32 -0800"] [95,95,100,7,7,100,1,1,100,95,95,100,"c1d628249a148deaf55e5b87493b7cdec6a527b8","2024-02-07 19:29:56 -0800"] +[95,95,100,7,7,100,1,1,100,95,95,100,"15a1865590e694dfa122c18e34bb3d4d5d7a28f0","2024-02-12 19:31:34 -0800"] diff --git a/namespace/alias2pkg/index.html b/namespace/alias2pkg/index.html index 8d8b39b8f..36cad8804 100644 --- a/namespace/alias2pkg/index.html +++ b/namespace/alias2pkg/index.html @@ -116,7 +116,7 @@

All files namespace/alias2pkg/lib