UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

62 lines 6.38 kB
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==