@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
62 lines • 6.38 kB
JavaScript
import { Pipe } from '@angular/core';
import * as i0 from "@angular/core";
/**
* Pipe to extract a bit value or a bit range from a number.
* Returns 0 when parameters are not valid
*
* For example:
*
* ```
* expect(pipe.transform(0b0101, '2')).toEqual(1, 'transform with parameter 2 should returns value of bit at position 2');
* // Extracting bits n° 1 and n°2 (index starts at 0)
* expect(pipe.transform(0b0101, '1-2')).toEqual(0b10);
* ````
*/
export class ExtractBitsPipe {
transform(value, format) {
if (typeof value !== 'number') {
console.warn(`Invalid value for "extractBits". Should be a number. Given: ${typeof value}`, value);
return 0;
}
let min, max;
if (typeof format === 'string') {
if (format.indexOf('-') >= 0) {
[min, max] = format.split('-').map((v) => {
if (!v) {
return 0;
}
else {
return parseInt(v, 10);
}
});
}
else {
min = max = parseInt(format, 10);
}
}
else if (typeof format === 'number') {
min = format;
max = format;
}
else {
// No format given, we always return 0
return 0;
}
// For example with max = 3 min = 1
// # => 0b0001110
// eslint-disable-next-line no-bitwise
const valueMask = ((1 << (max - min + 1)) - 1) << min;
// eslint-disable-next-line no-bitwise
value = (value & valueMask) >> min;
return value;
}
}
/** @nocollapse */ ExtractBitsPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ExtractBitsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
/** @nocollapse */ ExtractBitsPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ExtractBitsPipe, name: "extractBits" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ExtractBitsPipe, decorators: [{
type: Pipe,
args: [{
name: 'extractBits',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdC1iaXRzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvc3JjL2xpYi9saWItY29tbW9uL2V4dHJhY3QtYml0cy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUVwRDs7Ozs7Ozs7Ozs7R0FXRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFNBQVMsQ0FBQyxLQUFhLEVBQUUsTUFBd0I7UUFDL0MsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxDQUFDLElBQUksQ0FDViwrREFBK0QsT0FBTyxLQUFLLEVBQUUsRUFDN0UsS0FBSyxDQUNOLENBQUM7WUFDRixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsSUFBSSxHQUFXLEVBQUUsR0FBVyxDQUFDO1FBQzdCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzlCLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzVCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxDQUFDLEVBQUU7d0JBQ04sT0FBTyxDQUFDLENBQUM7cUJBQ1Y7eUJBQU07d0JBQ0wsT0FBTyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3FCQUN4QjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLEdBQUcsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNsQztTQUNGO2FBQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDckMsR0FBRyxHQUFHLE1BQU0sQ0FBQztZQUNiLEdBQUcsR0FBRyxNQUFNLENBQUM7U0FDZDthQUFNO1lBQ0wsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFDRCxtQ0FBbUM7UUFDbkMsaUJBQWlCO1FBQ2pCLHNDQUFzQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUN0RCxzQ0FBc0M7UUFDdEMsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUNuQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O2dJQXBDVSxlQUFlOzhIQUFmLGVBQWU7NEZBQWYsZUFBZTtrQkFIM0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsYUFBYTtpQkFDcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogUGlwZSB0byBleHRyYWN0IGEgYml0IHZhbHVlIG9yIGEgYml0IHJhbmdlIGZyb20gYSBudW1iZXIuXG4gKiBSZXR1cm5zIDAgd2hlbiBwYXJhbWV0ZXJzIGFyZSBub3QgdmFsaWRcbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBgYGBcbiAqIGV4cGVjdChwaXBlLnRyYW5zZm9ybSgwYjAxMDEsICcyJykpLnRvRXF1YWwoMSwgJ3RyYW5zZm9ybSB3aXRoIHBhcmFtZXRlciAyIHNob3VsZCByZXR1cm5zIHZhbHVlIG9mIGJpdCBhdCBwb3NpdGlvbiAyJyk7XG4gKiAvLyBFeHRyYWN0aW5nIGJpdHMgbsKwIDEgYW5kIG7CsDIgKGluZGV4IHN0YXJ0cyBhdCAwKVxuICogZXhwZWN0KHBpcGUudHJhbnNmb3JtKDBiMDEwMSwgJzEtMicpKS50b0VxdWFsKDBiMTApO1xuICogYGBgYFxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdleHRyYWN0Qml0cycsXG59KVxuZXhwb3J0IGNsYXNzIEV4dHJhY3RCaXRzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IG51bWJlciwgZm9ybWF0Pzogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgSW52YWxpZCB2YWx1ZSBmb3IgXCJleHRyYWN0Qml0c1wiLiBTaG91bGQgYmUgYSBudW1iZXIuIEdpdmVuOiAke3R5cGVvZiB2YWx1ZX1gLFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBsZXQgbWluOiBudW1iZXIsIG1heDogbnVtYmVyO1xuICAgIGlmICh0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCctJykgPj0gMCkge1xuICAgICAgICBbbWluLCBtYXhdID0gZm9ybWF0LnNwbGl0KCctJykubWFwKCh2KSA9PiB7XG4gICAgICAgICAgaWYgKCF2KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHYsIDEwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWluID0gbWF4ID0gcGFyc2VJbnQoZm9ybWF0LCAxMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0ID09PSAnbnVtYmVyJykge1xuICAgICAgbWluID0gZm9ybWF0O1xuICAgICAgbWF4ID0gZm9ybWF0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBmb3JtYXQgZ2l2ZW4sIHdlIGFsd2F5cyByZXR1cm4gMFxuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIC8vIEZvciBleGFtcGxlIHdpdGggbWF4ID0gMyBtaW4gPSAxXG4gICAgLy8gIyA9PiAwYjAwMDExMTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIGNvbnN0IHZhbHVlTWFzayA9ICgoMSA8PCAobWF4IC0gbWluICsgMSkpIC0gMSkgPDwgbWluO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgdmFsdWUgPSAodmFsdWUgJiB2YWx1ZU1hc2spID4+IG1pbjtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdfQ==