UNPKG

@iotize/ionic

Version:

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

62 lines 6.41 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 */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExtractBitsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); /** @nocollapse */ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ExtractBitsPipe, name: "extractBits" }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExtractBitsPipe, decorators: [{ type: Pipe, args: [{ name: 'extractBits', }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdC1iaXRzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvc3JjL2xpYi9saWItY29tbW9uL2V4dHJhY3QtYml0cy5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUVwRDs7Ozs7Ozs7Ozs7R0FXRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFNBQVMsQ0FBQyxLQUFhLEVBQUUsTUFBd0I7UUFDL0MsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsSUFBSSxDQUNWLCtEQUErRCxPQUFPLEtBQUssRUFBRSxFQUM3RSxLQUFLLENBQ04sQ0FBQztZQUNGLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELElBQUksR0FBVyxFQUFFLEdBQVcsQ0FBQztRQUM3QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNQLE9BQU8sQ0FBQyxDQUFDO29CQUNYLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3pCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2IsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNmLENBQUM7YUFBTSxDQUFDO1lBQ04sc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELG1DQUFtQztRQUNuQyxpQkFBaUI7UUFDakIsc0NBQXNDO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ3RELHNDQUFzQztRQUN0QyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ25DLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzsySEFwQ1UsZUFBZTt5SEFBZixlQUFlOzs0RkFBZixlQUFlO2tCQUgzQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxhQUFhO2lCQUNwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBQaXBlIHRvIGV4dHJhY3QgYSBiaXQgdmFsdWUgb3IgYSBiaXQgcmFuZ2UgZnJvbSBhIG51bWJlci5cbiAqIFJldHVybnMgMCB3aGVuIHBhcmFtZXRlcnMgYXJlIG5vdCB2YWxpZFxuICpcbiAqIEZvciBleGFtcGxlOlxuICpcbiAqIGBgYFxuICogZXhwZWN0KHBpcGUudHJhbnNmb3JtKDBiMDEwMSwgJzInKSkudG9FcXVhbCgxLCAndHJhbnNmb3JtIHdpdGggcGFyYW1ldGVyIDIgc2hvdWxkIHJldHVybnMgdmFsdWUgb2YgYml0IGF0IHBvc2l0aW9uIDInKTtcbiAqIC8vIEV4dHJhY3RpbmcgYml0cyBuwrAgMSBhbmQgbsKwMiAoaW5kZXggc3RhcnRzIGF0IDApXG4gKiBleHBlY3QocGlwZS50cmFuc2Zvcm0oMGIwMTAxLCAnMS0yJykpLnRvRXF1YWwoMGIxMCk7XG4gKiBgYGBgXG4gKi9cbkBQaXBlKHtcbiAgbmFtZTogJ2V4dHJhY3RCaXRzJyxcbn0pXG5leHBvcnQgY2xhc3MgRXh0cmFjdEJpdHNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyLCBmb3JtYXQ/OiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBJbnZhbGlkIHZhbHVlIGZvciBcImV4dHJhY3RCaXRzXCIuIFNob3VsZCBiZSBhIG51bWJlci4gR2l2ZW46ICR7dHlwZW9mIHZhbHVlfWAsXG4gICAgICAgIHZhbHVlXG4gICAgICApO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGxldCBtaW46IG51bWJlciwgbWF4OiBudW1iZXI7XG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJy0nKSA+PSAwKSB7XG4gICAgICAgIFttaW4sIG1heF0gPSBmb3JtYXQuc3BsaXQoJy0nKS5tYXAoKHYpID0+IHtcbiAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodiwgMTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW4gPSBtYXggPSBwYXJzZUludChmb3JtYXQsIDEwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdudW1iZXInKSB7XG4gICAgICBtaW4gPSBmb3JtYXQ7XG4gICAgICBtYXggPSBmb3JtYXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGZvcm1hdCBnaXZlbiwgd2UgYWx3YXlzIHJldHVybiAwXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgLy8gRm9yIGV4YW1wbGUgd2l0aCBtYXggPSAzIG1pbiA9IDFcbiAgICAvLyAjID0+IDBiMDAwMTExMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgY29uc3QgdmFsdWVNYXNrID0gKCgxIDw8IChtYXggLSBtaW4gKyAxKSkgLSAxKSA8PCBtaW47XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICB2YWx1ZSA9ICh2YWx1ZSAmIHZhbHVlTWFzaykgPj4gbWluO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuIl19