| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- # hoopy
- [](https://gitlab.com/philbooth/hoopy/pipelines)
- [](https://www.npmjs.com/package/hoopy)
- [](https://www.npmjs.com/package/hoopy)
- [](https://opensource.org/licenses/MIT)
- Like an array, but rounder.
- * [Huh?](#huh)
- * [What's it useful for?](#whats-it-useful-for)
- * [How do I install it?](#how-do-i-install-it)
- * [How do I use it?](#how-do-i-use-it)
- * [Loading the library](#loading-the-library)
- * [Creating arrays](#creating-arrays)
- * [Accessing array items](#accessing-array-items)
- * [Growing the array](#growing-the-array)
- * [Is there a change log?](#is-there-a-change-log)
- * [How do I set up the dev environment?](#how-do-i-set-up-the-dev-environment)
- * [What license is it released under?](#what-license-is-it-released-under)
- ## Huh?
- Hoopy is a circular array
- data type.
- It extends `Array`
- so that out-of-bounds indices
- wrap back round
- to the start of the array
- (or if they're negative indices,
- they wrap back round
- to the end of the array).
- ## What's it useful for?
- If you want a fixed-length buffer
- for streamed I/O,
- Hoopy can do that for you.
- ## How do I install it?
- Via `npm`:
- ```
- npm i hoopy --save
- ```
- Or if you just want the git repo:
- ```
- git clone git@gitlab.com:philbooth/hoopy.git
- ```
- ## How do I use it?
- ### Loading the library
- ```js
- const Hoopy = require('hoopy');
- ```
- ### Creating arrays
- ```js
- const hoopy = new Hoopy(10);
- assert(Array.isArray(hoopy));
- ```
- You must pass
- a `size` argument
- to the `Hoopy` constructor,
- otherwise it will throw.
- ### Accessing array items
- ```js
- for (let i = 0; i < hoopy.length; ++i) {
- hoopy[i] = i;
- console.log(hoopy[i]);
- }
- ```
- You can read and write array items
- using square brackets for indexing
- as you would with a normal array.
- However, if you write to
- an out-of-bounds index,
- it will not increase
- the length of the array.
- Instead the index is applied
- modulo the array length,
- wrapping back round to the start.
- Negative indices work in reverse,
- wrapping back round to the end
- of the array.
- The methods
- `push`, `pop`, `shift` and `unshift`
- will throw if called.
- Future versions of the library
- may implement sane behaviour
- for them.
- All of the other `Array` methods
- work normally.
- ### Growing the array
- ```js
- hoopy.grow(50);
- ```
- The `grow` method
- adds items to the array.
- It takes one argument,
- which is the number
- of items to grow the array by.
- The new length of the array
- will be the old length
- plus the number you pass to `grow`.
- If the current state of the array
- includes overflowed indices,
- `grow` will take care
- to move those items
- in to the freshly-created
- available space,
- so that the correct order is maintained
- for your data.
- The caller is responsible
- for ensuring they don't overwrite
- unprocessed items.
- If you need to increase
- the size of the array,
- you must call `grow`.
- ## Is there a change log?
- [Yes](CHANGELOG.md).
- ## How do I set up the dev environment?
- To install the dependencies:
- ```
- npm i
- ```
- To run the tests:
- ```
- npm t
- ```
- To lint the code:
- ```
- npm run lint
- ```
- ## What license is it released under?
- [MIT](LICENSE).
|