GithubHelp home page GithubHelp logo

tootallnate / bit-typedarray Goto Github PK

View Code? Open in Web Editor NEW

This project forked from swiing/bit-typedarray

0.0 2.0 0.0 57 KB

A BitArray object exhibiting the interface of standard ecmascript TypedArray's

License: ISC License

HTML 5.57% JavaScript 9.74% TypeScript 84.10% Shell 0.59%

bit-typedarray's Introduction

@bitarray/typedarray

GitHub package.json dynamic

A bit array object exhibiting the interface of standard ecmascript TypedArray's.

๐Ÿ’ก If you are looking for easily applying bitwise operations, check out @bitarray/es6, which builds on top of the present library. Here, we are purposely sticking to methods and properties described by the ecmascript specification (there are no bitwise operations on arrays specified by ecmascript).

Rationale

The ecmascript specification has introduced TypedArrays for Int8, Uint8, Uint8Clamped, Int16, Uint16, Int32, Uint32, Float32, Float64, BigInt64 and BigUint64 types.

This library adds support for the Bit type. It provides a very memory-efficient means to store sequences of bits, while exposing the familiar, standard interface of typed arrays.

Compatibility

compatibility

The library uses a Proxy object, which is an ES6 (aka ES2015) feature. It can NOT be polyfilled (to the extent it is used by the library).

Note: standard TypedArray is also a feature of ecmascript ES6.

Installation

npm version

npm install @bitarray/typedarray

or

yarn add @bitarray/typedarray

Usage

Usage is same as for any standard typed array. You may check the MDN documentation for details.

Instantiating

import BitArray from "path/to/bit-typedarray.js"

const length = 32; // or whatever length value
const bits = new BitArray(length);

// Bit arrays can be created from iterables.
// The following are all equivalent

new BitArray("11001010");
new BitArray([1, 1, 0, 0, 1, 0, 1, 0]);
new BitArray([true, true, false, false, true, false, true, false]);

BitArray.from("11001010");
BitArray.from([1, 1, 0, 0, 1, 0, 1, 0]);
BitArray.from([true, true, false, false, true, false, true, false]);

BitArray.of(..."11001010");
BitArray.of(1, 1, 0, 0, 1, 0, 1, 0);
BitArray.of(true, true, false, false, true, false, true, false);

Reading/writing values

bits[1]; // 0 by default
bits[1] = 1; 
bits[1]; // 1
bits.at(1); // 1

Iterating

for (let i=0; i<bits.length; i++) 
  // do something with bits[i]

bits.forEach((val, i, arr) => { /* do something */ });

for (let i in bits)
  // do something with bits[i]

for (let bit of bits) 
  // do something with bit

Indexes & values

// indexes - following two are the same
Object.keys(bits); // [0, 1, 2, ...]
Object.getOwnPropertyNames(bits);

// values
Object.values(bits); // [0, 1, 0, 0, 0, ...]

// entries
Object.entries(bits); // [["0", 0], ["1", 1], ["2", 0], ["3", 0], ...]

Instance properties

// properties
bits.buffer;
bits.byteLength;
bits.byteOffset;
bits.length;

static properties

BitArray.BYTES_PER_ELEMENT; // 0.125 == 1/8, read-only
BitArray.name;              // "BitArray", read-only
BitArray.prototype;         // Object {...}

Implementation notes

For the most part, mapping the behaviour of standard methods and properties to the case of bit arrays is obvious. There are a few caveats though.

Note: not all features of the specification are implemented yet [WIP; PRs welcome!].

Setting values

In standard typed arrays, except for the Uint8clamped type, values exceeding the limits go round. For instance, setting value 257 to a Uint8 results in the value of 1 (== 257 % 0xFF). Also, non-numerical values become 0.

With BitArray, values are first coerced to number. If the result is truthy, the bit will be set to 1; 0 otherwise.

let arr = new BitArray(2);

// one would normally set values like this
arr[0] = 0;
arr[1] = 1;

// this will also work
arr[0] = -.000001; // arr[0] === 1, because Boolean(-.000001) === true
arr[1] = "a";      // arr[1] === 0, because Number("a") === NaN, which is falsy

.toString() method

The standard method returns a comma-separated list of numbers. In the case of bit sequences, interleaving commas is unnecessarily heavy, for no benefit. Instead, we list 0|1 bits in sequence, grouping them by eight for better clarity (human-reading), and separating groups by a space rather than a comma, to match common practice of text representation of bit sequences.

new BitArray(20).toString(); // "00000000 00000000 0000"

.at() method

At the time of writing this is a proposal for the ecmascript specification. Hence, it is to be considered as experimental.

Note: it is currently not supported by any browser yet. So, on this specific method, we are ahead of now supported in most recent native implementations.

License

license

bit-typedarray's People

Contributors

swiing avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.