14d6c458bSopenharmony_ci/*
24d6c458bSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
34d6c458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44d6c458bSopenharmony_ci * you may not use this file except in compliance with the License.
54d6c458bSopenharmony_ci * You may obtain a copy of the License at
64d6c458bSopenharmony_ci *
74d6c458bSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84d6c458bSopenharmony_ci *
94d6c458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104d6c458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114d6c458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124d6c458bSopenharmony_ci * See the License for the specific language governing permissions and
134d6c458bSopenharmony_ci * limitations under the License.
144d6c458bSopenharmony_ci */
154d6c458bSopenharmony_ci
164d6c458bSopenharmony_cifunction getTypeName(obj: unknown): string {
174d6c458bSopenharmony_ci  if (obj === null) {
184d6c458bSopenharmony_ci    return 'null';
194d6c458bSopenharmony_ci  }
204d6c458bSopenharmony_ci  if (typeof obj !== 'object') {
214d6c458bSopenharmony_ci    return typeof obj;
224d6c458bSopenharmony_ci  }
234d6c458bSopenharmony_ci  if (obj != null && obj.constructor != null) {
244d6c458bSopenharmony_ci    return obj.constructor.name;
254d6c458bSopenharmony_ci  }
264d6c458bSopenharmony_ci  return 'unknown';
274d6c458bSopenharmony_ci}
284d6c458bSopenharmony_ci
294d6c458bSopenharmony_ciclass BusinessError extends Error {
304d6c458bSopenharmony_ci  code: number;
314d6c458bSopenharmony_ci  constructor(message: string, errorNumber: number) {
324d6c458bSopenharmony_ci    super(message);
334d6c458bSopenharmony_ci    this.name = 'BusinessError';
344d6c458bSopenharmony_ci    this.code = errorNumber;
354d6c458bSopenharmony_ci  }
364d6c458bSopenharmony_ci}
374d6c458bSopenharmony_ci
384d6c458bSopenharmony_ciconst ERROR_CODES = {
394d6c458bSopenharmony_ci  TYPE_ERROR: 401, // 401: TYPE_ ERROR code value
404d6c458bSopenharmony_ci  RANGE_ERROR: 10200001, // 10200001: RANGE_ERROR code value
414d6c458bSopenharmony_ci  BUFFER_SIZE_ERROR: 10200009, // 10200009: BUFFER_SIZE_ERROR code value
424d6c458bSopenharmony_ci  PROPERTY_TYPE_ERROR: 10200013 // 10200013: TYPE_ ERROR code value
434d6c458bSopenharmony_ci};
444d6c458bSopenharmony_ci
454d6c458bSopenharmony_cilet errorMap = {
464d6c458bSopenharmony_ci  'typeError': ERROR_CODES.TYPE_ERROR,
474d6c458bSopenharmony_ci  'rangeError': ERROR_CODES.RANGE_ERROR,
484d6c458bSopenharmony_ci  'bufferSizeError': ERROR_CODES.BUFFER_SIZE_ERROR,
494d6c458bSopenharmony_ci  'typeErrorForProperty': ERROR_CODES.PROPERTY_TYPE_ERROR
504d6c458bSopenharmony_ci};
514d6c458bSopenharmony_ci
524d6c458bSopenharmony_cienum TypeErrorCategories {
534d6c458bSopenharmony_ci  COMMON = 0,
544d6c458bSopenharmony_ci  SIZE,
554d6c458bSopenharmony_ci  ENCODING,
564d6c458bSopenharmony_ci  PROPERTY
574d6c458bSopenharmony_ci};
584d6c458bSopenharmony_cienum RangeErrorCategories {
594d6c458bSopenharmony_ci  WHOLE = 0,
604d6c458bSopenharmony_ci  LEFT
614d6c458bSopenharmony_ci};
624d6c458bSopenharmony_ci
634d6c458bSopenharmony_ciconst UINT32MAX = 4294967296;
644d6c458bSopenharmony_ci
654d6c458bSopenharmony_ciclass ErrorMessage {
664d6c458bSopenharmony_ci  public errorNumber: number = 0;
674d6c458bSopenharmony_ci  public argument: string = '';
684d6c458bSopenharmony_ci  public types: string[] = [];
694d6c458bSopenharmony_ci  public receivedObj: unknown = '';
704d6c458bSopenharmony_ci  public rangeLeft: string | bigint | number = 0;
714d6c458bSopenharmony_ci  public rangeRight: string | bigint | number = 0;
724d6c458bSopenharmony_ci
734d6c458bSopenharmony_ci  public typeErrorCat: TypeErrorCategories = TypeErrorCategories.COMMON;
744d6c458bSopenharmony_ci  public rangeErrorCat: RangeErrorCategories = RangeErrorCategories.WHOLE;
754d6c458bSopenharmony_ci
764d6c458bSopenharmony_ci  constructor(errNo: number, argument?: string) {
774d6c458bSopenharmony_ci    this.errorNumber = errNo;
784d6c458bSopenharmony_ci    this.argument = argument === undefined ? '' : argument;
794d6c458bSopenharmony_ci  }
804d6c458bSopenharmony_ci
814d6c458bSopenharmony_ci  public setTypeInfo(types: string[], receivedObj: unknown): ErrorMessage {
824d6c458bSopenharmony_ci    this.types = types;
834d6c458bSopenharmony_ci    this.receivedObj = receivedObj;
844d6c458bSopenharmony_ci    return this;
854d6c458bSopenharmony_ci  }
864d6c458bSopenharmony_ci
874d6c458bSopenharmony_ci  public setSizeTypeInfo(types: string[], receivedObj: unknown): ErrorMessage {
884d6c458bSopenharmony_ci    this.types = types;
894d6c458bSopenharmony_ci    this.receivedObj = receivedObj;
904d6c458bSopenharmony_ci    this.typeErrorCat = TypeErrorCategories.SIZE;
914d6c458bSopenharmony_ci    return this;
924d6c458bSopenharmony_ci  }
934d6c458bSopenharmony_ci
944d6c458bSopenharmony_ci  public setEncodingTypeInfo(types: string[], receivedObj: unknown): ErrorMessage {
954d6c458bSopenharmony_ci    this.types = types;
964d6c458bSopenharmony_ci    this.receivedObj = receivedObj;
974d6c458bSopenharmony_ci    this.typeErrorCat = TypeErrorCategories.ENCODING;
984d6c458bSopenharmony_ci    return this;
994d6c458bSopenharmony_ci  }
1004d6c458bSopenharmony_ci
1014d6c458bSopenharmony_ci  public setProperty(argument: string): ErrorMessage {
1024d6c458bSopenharmony_ci    this.typeErrorCat = TypeErrorCategories.PROPERTY;
1034d6c458bSopenharmony_ci    this.argument = argument;
1044d6c458bSopenharmony_ci    return this;
1054d6c458bSopenharmony_ci  }
1064d6c458bSopenharmony_ci
1074d6c458bSopenharmony_ci  public setRangeInfo(rangeLeft: string | bigint | number, rangeRight: string | bigint | number, receivedObj: unknown): ErrorMessage {
1084d6c458bSopenharmony_ci    this.rangeLeft = rangeLeft;
1094d6c458bSopenharmony_ci    this.rangeRight = rangeRight;
1104d6c458bSopenharmony_ci    this.receivedObj = receivedObj;
1114d6c458bSopenharmony_ci    return this;
1124d6c458bSopenharmony_ci  }
1134d6c458bSopenharmony_ci
1144d6c458bSopenharmony_ci  public setRangeLeftInfo(rangeLeft: string | number, receivedObj: unknown): ErrorMessage {
1154d6c458bSopenharmony_ci    this.rangeLeft = rangeLeft;
1164d6c458bSopenharmony_ci    this.receivedObj = receivedObj;
1174d6c458bSopenharmony_ci    this.rangeErrorCat = RangeErrorCategories.LEFT;
1184d6c458bSopenharmony_ci    return this;
1194d6c458bSopenharmony_ci  }
1204d6c458bSopenharmony_ci
1214d6c458bSopenharmony_ci  public setSizeInfo(receivedObj: string): ErrorMessage {
1224d6c458bSopenharmony_ci    this.receivedObj = receivedObj;
1234d6c458bSopenharmony_ci    return this;
1244d6c458bSopenharmony_ci  }
1254d6c458bSopenharmony_ci
1264d6c458bSopenharmony_ci  private getErrorTypeStrings(types: string[]): string {
1274d6c458bSopenharmony_ci    let ret = types.join(', ');
1284d6c458bSopenharmony_ci    ret = ret.replace(',', ' or');
1294d6c458bSopenharmony_ci    return ret;
1304d6c458bSopenharmony_ci  }
1314d6c458bSopenharmony_ci
1324d6c458bSopenharmony_ci  private getArgumentStr(flag: boolean): string {
1334d6c458bSopenharmony_ci    if (flag) {
1344d6c458bSopenharmony_ci      return 'Parameter error. The type of "' + this.argument + '" must be ';
1354d6c458bSopenharmony_ci    } else {
1364d6c458bSopenharmony_ci      return 'The type of "' + this.argument + '" must be ';
1374d6c458bSopenharmony_ci    }
1384d6c458bSopenharmony_ci  }
1394d6c458bSopenharmony_ci
1404d6c458bSopenharmony_ci  private getTypeString(flag: boolean): string {
1414d6c458bSopenharmony_ci    let str = '';
1424d6c458bSopenharmony_ci    switch (this.typeErrorCat) {
1434d6c458bSopenharmony_ci      case TypeErrorCategories.COMMON:
1444d6c458bSopenharmony_ci        str += this.getArgumentStr(flag) + this.getErrorTypeStrings(this.types) +
1454d6c458bSopenharmony_ci          '. Received value is: ' + getTypeName(this.receivedObj);
1464d6c458bSopenharmony_ci        break;
1474d6c458bSopenharmony_ci      case TypeErrorCategories.SIZE:
1484d6c458bSopenharmony_ci        str += this.getArgumentStr(flag) + this.getErrorTypeStrings(this.types) +
1494d6c458bSopenharmony_ci          ' and the value cannot be negative. Received value is: ' + getTypeName(this.receivedObj);
1504d6c458bSopenharmony_ci        break;
1514d6c458bSopenharmony_ci      case TypeErrorCategories.ENCODING:
1524d6c458bSopenharmony_ci        str += this.getArgumentStr(flag) + this.getErrorTypeStrings(this.types) +
1534d6c458bSopenharmony_ci          '. the encoding ' + this.receivedObj + ' is unknown';
1544d6c458bSopenharmony_ci        break;
1554d6c458bSopenharmony_ci      case TypeErrorCategories.PROPERTY:
1564d6c458bSopenharmony_ci        str += this.argument + ' cannot be set for the buffer that has only a getter';
1574d6c458bSopenharmony_ci      default:
1584d6c458bSopenharmony_ci        break;
1594d6c458bSopenharmony_ci    }
1604d6c458bSopenharmony_ci    return str;
1614d6c458bSopenharmony_ci  }
1624d6c458bSopenharmony_ci
1634d6c458bSopenharmony_ci  private getRangeString(): string {
1644d6c458bSopenharmony_ci    let str = '';
1654d6c458bSopenharmony_ci    switch (this.rangeErrorCat) {
1664d6c458bSopenharmony_ci      case RangeErrorCategories.WHOLE:
1674d6c458bSopenharmony_ci        str += 'The value of "' + this.argument + '" is out of range. It must be >= ' + this.rangeLeft +
1684d6c458bSopenharmony_ci          ' and <= ' + this.rangeRight + '. Received value is: ' + this.receivedObj;
1694d6c458bSopenharmony_ci        break;
1704d6c458bSopenharmony_ci      case RangeErrorCategories.LEFT:
1714d6c458bSopenharmony_ci        str += 'The value of "' + this.argument + '" is out of range. It must be >= ' + this.rangeLeft +
1724d6c458bSopenharmony_ci          '. Received value is: ' + this.receivedObj;
1734d6c458bSopenharmony_ci        break;
1744d6c458bSopenharmony_ci      default:
1754d6c458bSopenharmony_ci        break;
1764d6c458bSopenharmony_ci    }
1774d6c458bSopenharmony_ci    return str;
1784d6c458bSopenharmony_ci  }
1794d6c458bSopenharmony_ci
1804d6c458bSopenharmony_ci  public getString(): string {
1814d6c458bSopenharmony_ci    let str = '';
1824d6c458bSopenharmony_ci    switch (this.errorNumber) {
1834d6c458bSopenharmony_ci      case ERROR_CODES.TYPE_ERROR:
1844d6c458bSopenharmony_ci        str = this.getTypeString(true);
1854d6c458bSopenharmony_ci        break;
1864d6c458bSopenharmony_ci      case ERROR_CODES.PROPERTY_TYPE_ERROR:
1874d6c458bSopenharmony_ci        str = this.getTypeString(false);
1884d6c458bSopenharmony_ci        break;
1894d6c458bSopenharmony_ci      case ERROR_CODES.RANGE_ERROR:
1904d6c458bSopenharmony_ci        str = this.getRangeString();
1914d6c458bSopenharmony_ci        break;
1924d6c458bSopenharmony_ci      case ERROR_CODES.BUFFER_SIZE_ERROR:
1934d6c458bSopenharmony_ci        str = 'The buffer size must be a multiple of ' + this.receivedObj;
1944d6c458bSopenharmony_ci        break;
1954d6c458bSopenharmony_ci      default:
1964d6c458bSopenharmony_ci        break;
1974d6c458bSopenharmony_ci    }
1984d6c458bSopenharmony_ci    return str;
1994d6c458bSopenharmony_ci  }
2004d6c458bSopenharmony_ci}
2014d6c458bSopenharmony_ci
2024d6c458bSopenharmony_ciinterface NativeBuffer {
2034d6c458bSopenharmony_ci  new(type: number, length: number): NativeBuffer;
2044d6c458bSopenharmony_ci  new(type: number, array: number[]): NativeBuffer;
2054d6c458bSopenharmony_ci  new(type: number, raw: NativeBuffer): NativeBuffer;
2064d6c458bSopenharmony_ci  new(type: number, str: string, encoding: string): NativeBuffer;
2074d6c458bSopenharmony_ci  new(type: number, arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): NativeBuffer;
2084d6c458bSopenharmony_ci  new(type: number, pool: NativeBuffer, poolOffset: number, length: number): NativeBuffer;
2094d6c458bSopenharmony_ci  setArray(array: Array<number>): undefined;
2104d6c458bSopenharmony_ci  getLength(): number;
2114d6c458bSopenharmony_ci  getByteOffset(): number;
2124d6c458bSopenharmony_ci  writeString(value: string, offset: number, length: number, encoding: string): number;
2134d6c458bSopenharmony_ci  fromString(str: string, encoding: string, size: number): NativeBuffer;
2144d6c458bSopenharmony_ci  fillString(value: string, offset: number, end: number, encoding: string): undefined;
2154d6c458bSopenharmony_ci  fillNumbers(value: number[], offset: number, end: number): undefined;
2164d6c458bSopenharmony_ci  fillBuffer(value: NativeBuffer, offset: number, end: number): undefined;
2174d6c458bSopenharmony_ci  writeInt32BE(value: number, offset: number): number;
2184d6c458bSopenharmony_ci  readInt32BE(offset: number): number;
2194d6c458bSopenharmony_ci  writeInt32LE(value: number, offset: number): number;
2204d6c458bSopenharmony_ci  readInt32LE(offset: number): number;
2214d6c458bSopenharmony_ci  writeUInt32BE(value: number, offset: number): number;
2224d6c458bSopenharmony_ci  readUInt32BE(offset: number): number;
2234d6c458bSopenharmony_ci  writeUInt32LE(value: number, offset: number): number;
2244d6c458bSopenharmony_ci  readUInt32LE(offset: number): number;
2254d6c458bSopenharmony_ci  getBufferData(): Array<number>;
2264d6c458bSopenharmony_ci  getArrayBuffer(): ArrayBufferLike;
2274d6c458bSopenharmony_ci  get(index: number): number;
2284d6c458bSopenharmony_ci  set(index: number, value: number): undefined;
2294d6c458bSopenharmony_ci  subBuffer(target: NativeBuffer, start: number, end: number): undefined;
2304d6c458bSopenharmony_ci  copy(target: NativeBuffer, targetStart: number, sourceStart: number, sourceEnd: number): number;
2314d6c458bSopenharmony_ci  compare(target: NativeBuffer, targetStart: number, sourceStart: number, length: number): number;
2324d6c458bSopenharmony_ci  toUtf8(start: number, end: number): string;
2334d6c458bSopenharmony_ci  toBase64(start: number, end: number): string;
2344d6c458bSopenharmony_ci  indexOf(value: string, byteOffset: number, encoding: string, isReverse: boolean): number;
2354d6c458bSopenharmony_ci}
2364d6c458bSopenharmony_ciinterface NativeBlob {
2374d6c458bSopenharmony_ci  new(src: Array<number>): NativeBlob;
2384d6c458bSopenharmony_ci  new(blob: NativeBlob, start: number, end?: number): NativeBlob;
2394d6c458bSopenharmony_ci  arraybuffer(): Promise<ArrayBuffer>;
2404d6c458bSopenharmony_ci  text(): Promise<string>;
2414d6c458bSopenharmony_ci  getBytes(): Array<number>;
2424d6c458bSopenharmony_ci}
2434d6c458bSopenharmony_ciinterface IBuffer {
2444d6c458bSopenharmony_ci  Buffer: NativeBuffer;
2454d6c458bSopenharmony_ci  Blob: NativeBlob;
2464d6c458bSopenharmony_ci  utf8ByteLength(str: string): number;
2474d6c458bSopenharmony_ci  utf8StringToNumbers(str: string): Array<number>;
2484d6c458bSopenharmony_ci}
2494d6c458bSopenharmony_ci
2504d6c458bSopenharmony_cideclare function requireInternal(s: string): IBuffer;
2514d6c458bSopenharmony_ciconst internalBuffer = requireInternal('buffer');
2524d6c458bSopenharmony_ciconst bufferSymbol = Symbol('bufferClass');
2534d6c458bSopenharmony_ciconst lengthSymbol = Symbol('bufferLength');
2544d6c458bSopenharmony_ciconst bufferEncoding = ['ascii', 'utf8', 'utf-8', 'utf16le', 'utf-16le', 'ucs2', 'ucs-2',
2554d6c458bSopenharmony_ci  'base64', 'base64url', 'latin1', 'binary', 'hex'];
2564d6c458bSopenharmony_ci
2574d6c458bSopenharmony_cienum ParaType {
2584d6c458bSopenharmony_ci  NUMBER = 0,
2594d6c458bSopenharmony_ci  BUFFER,
2604d6c458bSopenharmony_ci  UINT8ARRAY,
2614d6c458bSopenharmony_ci  ARRAYBUFFER,
2624d6c458bSopenharmony_ci  NUMBERS,
2634d6c458bSopenharmony_ci  STRING
2644d6c458bSopenharmony_ci}
2654d6c458bSopenharmony_ciconst initialPoolSize: number = 8 * 1024; // 8 * 1024 : initialPoolSize number
2664d6c458bSopenharmony_cilet poolSize: number;
2674d6c458bSopenharmony_cilet poolOffset: number;
2684d6c458bSopenharmony_cilet pool: Buffer;
2694d6c458bSopenharmony_ciconst MAX_LENGTH: number = Math.pow(2, 32); // 2 : 32 : MAX_LENGTH code
2704d6c458bSopenharmony_ciconst TWO_POW_FIFTEEN: number = Math.pow(2, 15); // 2 : 15 : two to power of fifteen code
2714d6c458bSopenharmony_ciconst TWO_POW_SEVEN: number = Math.pow(2, 7); // 2 : 7 : two to power of seven code
2724d6c458bSopenharmony_ciconst oneByte: number = 1; // 1 : one Byte
2734d6c458bSopenharmony_ciconst twoBytes: number = 2; // 2 : two Bytes
2744d6c458bSopenharmony_ciconst threeBytes: number = 3; // 3 : three Bytes
2754d6c458bSopenharmony_ciconst fourBytes: number = 4; // 4 : four Bytes
2764d6c458bSopenharmony_ciconst fiveBytes: number = 5; // 5 : five Bytes
2774d6c458bSopenharmony_ciconst sixBytes: number = 6; // 6 : six Bytes
2784d6c458bSopenharmony_ciconst sevenBytes: number = 7; // 7 : seven Bytes
2794d6c458bSopenharmony_ciconst eightBytes: number = 8; // 8 : eight Bytes
2804d6c458bSopenharmony_ci
2814d6c458bSopenharmony_ci
2824d6c458bSopenharmony_citype TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array |
2834d6c458bSopenharmony_ciInt32Array | Uint32Array | Float32Array | Float64Array;
2844d6c458bSopenharmony_citype BackingType = Buffer | TypedArray | DataView | ArrayBuffer | SharedArrayBuffer;
2854d6c458bSopenharmony_ciconst float64Array: Float64Array = new Float64Array(1);
2864d6c458bSopenharmony_ciconst uInt8Float64Array: Uint8Array = new Uint8Array(float64Array.buffer);
2874d6c458bSopenharmony_ciconst float32Array: Float32Array = new Float32Array(1);
2884d6c458bSopenharmony_ciconst uInt8Float32Array: Uint8Array = new Uint8Array(float32Array.buffer);
2894d6c458bSopenharmony_ci
2904d6c458bSopenharmony_cifunction createPool(): void {
2914d6c458bSopenharmony_ci  poolSize = initialPoolSize;
2924d6c458bSopenharmony_ci  pool = new Buffer(poolSize);
2934d6c458bSopenharmony_ci  poolOffset = 0;
2944d6c458bSopenharmony_ci}
2954d6c458bSopenharmony_ci
2964d6c458bSopenharmony_cifunction alignPool(): void {
2974d6c458bSopenharmony_ci  if (poolOffset & 0x7) {
2984d6c458bSopenharmony_ci    poolOffset |= 0x7; // 0x7 : align offset based of 8-bits
2994d6c458bSopenharmony_ci    poolOffset++;
3004d6c458bSopenharmony_ci  }
3014d6c458bSopenharmony_ci}
3024d6c458bSopenharmony_citype Options = {
3034d6c458bSopenharmony_ci  type: string,
3044d6c458bSopenharmony_ci  endings: string
3054d6c458bSopenharmony_ci};
3064d6c458bSopenharmony_ci
3074d6c458bSopenharmony_ciconst _log = console.log;
3084d6c458bSopenharmony_ci
3094d6c458bSopenharmony_ciconsole.log = function (...args) : void {
3104d6c458bSopenharmony_ci  if (args.length === 1 && args[0] instanceof Buffer) {
3114d6c458bSopenharmony_ci    let buf: Buffer = args[0];
3124d6c458bSopenharmony_ci    let bufArr: Array<number> = buf[bufferSymbol].getBufferData();
3134d6c458bSopenharmony_ci    let getStr = function (bufArr: Array<number>, len: number): string {
3144d6c458bSopenharmony_ci      let str: string = '';
3154d6c458bSopenharmony_ci      for (let i = 0; i < len; i++) {
3164d6c458bSopenharmony_ci        let strTemp: string = bufArr[i].toString(16); // 16 : convert the element to a hexadecimal string
3174d6c458bSopenharmony_ci        strTemp = (strTemp.length === 1) ? `0${strTemp}` : strTemp;
3184d6c458bSopenharmony_ci        str += ` ${strTemp}`;
3194d6c458bSopenharmony_ci      }
3204d6c458bSopenharmony_ci      return str;
3214d6c458bSopenharmony_ci    };
3224d6c458bSopenharmony_ci    let msg: string = '';
3234d6c458bSopenharmony_ci    if (bufArr.length > 50) {
3244d6c458bSopenharmony_ci      let bufStr: string = getStr(bufArr, 50); // 50: Maximum number of log displays
3254d6c458bSopenharmony_ci      msg = bufStr + ` ... ${bufArr.length - 50} more bytes`;
3264d6c458bSopenharmony_ci    } else {
3274d6c458bSopenharmony_ci      msg = getStr(bufArr, bufArr.length);
3284d6c458bSopenharmony_ci    }
3294d6c458bSopenharmony_ci    _log.call(console, `<Buffer ${msg}>`);
3304d6c458bSopenharmony_ci  } else {
3314d6c458bSopenharmony_ci    _log(...args);
3324d6c458bSopenharmony_ci  }
3334d6c458bSopenharmony_ci};
3344d6c458bSopenharmony_ci
3354d6c458bSopenharmony_ciclass Blob {
3364d6c458bSopenharmony_ci  blobClass: NativeBlob;
3374d6c458bSopenharmony_ci  private _size: number;
3384d6c458bSopenharmony_ci  private _type: string;
3394d6c458bSopenharmony_ci
3404d6c458bSopenharmony_ci  public get size(): number {
3414d6c458bSopenharmony_ci    return this._size;
3424d6c458bSopenharmony_ci  }
3434d6c458bSopenharmony_ci
3444d6c458bSopenharmony_ci  public get type(): string {
3454d6c458bSopenharmony_ci    return this._type;
3464d6c458bSopenharmony_ci  }
3474d6c458bSopenharmony_ci
3484d6c458bSopenharmony_ci  constructor(sources: string[] | ArrayBuffer[] | TypedArray[] | DataView[] | Blob[], options: Options) {
3494d6c458bSopenharmony_ci    if (options === undefined || options === null) {
3504d6c458bSopenharmony_ci      options = {
3514d6c458bSopenharmony_ci        type: '',
3524d6c458bSopenharmony_ci        endings: 'transparent'
3534d6c458bSopenharmony_ci      };
3544d6c458bSopenharmony_ci    }
3554d6c458bSopenharmony_ci    typeErrorCheck(options, ['Object'], 'options');
3564d6c458bSopenharmony_ci
3574d6c458bSopenharmony_ci    let type = options.type ? options.type : '';
3584d6c458bSopenharmony_ci    let endings = options.endings ? options.endings : 'transparent';
3594d6c458bSopenharmony_ci    if (endings !== 'transparent' && endings !== 'native') {
3604d6c458bSopenharmony_ci      throw new BusinessError('Parameter error. The value of endings is neither "transparent" nor "native"',
3614d6c458bSopenharmony_ci                              errorMap.typeError);
3624d6c458bSopenharmony_ci    }
3634d6c458bSopenharmony_ci    let arr: Array<number> = [];
3644d6c458bSopenharmony_ci    if (sources instanceof Array || isTypedArray(sources)) {
3654d6c458bSopenharmony_ci      for (const value of sources) {
3664d6c458bSopenharmony_ci        arr = arr.concat(this.normalizeSource(value));
3674d6c458bSopenharmony_ci      }
3684d6c458bSopenharmony_ci    } else {
3694d6c458bSopenharmony_ci      throw typeError(sources, 'sources', ['Iterable']);
3704d6c458bSopenharmony_ci    }
3714d6c458bSopenharmony_ci    this._size = arr.length;
3724d6c458bSopenharmony_ci    this._type = type;
3734d6c458bSopenharmony_ci    this.blobClass = new internalBuffer.Blob(arr);
3744d6c458bSopenharmony_ci  }
3754d6c458bSopenharmony_ci
3764d6c458bSopenharmony_ci  normalizeSource(source: string | ArrayBuffer | TypedArray | DataView | Blob | Buffer): Array<number> {
3774d6c458bSopenharmony_ci    let ret: Array<number> = [];
3784d6c458bSopenharmony_ci    if (typeof source === 'string') {
3794d6c458bSopenharmony_ci      return internalBuffer.utf8StringToNumbers(source);
3804d6c458bSopenharmony_ci    } else if (source instanceof ArrayBuffer) {
3814d6c458bSopenharmony_ci      return Array.prototype.slice.call(new Uint8Array(source));
3824d6c458bSopenharmony_ci    } else if (isTypedArray(source)) {
3834d6c458bSopenharmony_ci      let numbers = Array.prototype.slice.call(source);
3844d6c458bSopenharmony_ci      let str = '';
3854d6c458bSopenharmony_ci      for (let i = 0, len = numbers.length; i < len; i++) {
3864d6c458bSopenharmony_ci        str += numbers[i].toString();
3874d6c458bSopenharmony_ci      }
3884d6c458bSopenharmony_ci      let charCodeArr = [];
3894d6c458bSopenharmony_ci      for (let i = 0, len = str.length; i < len; i++) {
3904d6c458bSopenharmony_ci        let code = str.charCodeAt(i);
3914d6c458bSopenharmony_ci        charCodeArr.push(code);
3924d6c458bSopenharmony_ci      }
3934d6c458bSopenharmony_ci      return charCodeArr;
3944d6c458bSopenharmony_ci    } else if (source instanceof DataView) {
3954d6c458bSopenharmony_ci      return Array.prototype.slice.call(new Uint8Array(source.buffer));
3964d6c458bSopenharmony_ci    } else if (source instanceof Blob) {
3974d6c458bSopenharmony_ci      return source.blobClass.getBytes();
3984d6c458bSopenharmony_ci    } else if (source instanceof Buffer) {
3994d6c458bSopenharmony_ci      for (let i = 0, len = source.length; i < len; i++) {
4004d6c458bSopenharmony_ci        ret[i] = source[i];
4014d6c458bSopenharmony_ci      }
4024d6c458bSopenharmony_ci      return ret;
4034d6c458bSopenharmony_ci    }
4044d6c458bSopenharmony_ci    return [];
4054d6c458bSopenharmony_ci  }
4064d6c458bSopenharmony_ci
4074d6c458bSopenharmony_ci  arrayBuffer(): Promise<ArrayBuffer> {
4084d6c458bSopenharmony_ci    return this.blobClass.arraybuffer();
4094d6c458bSopenharmony_ci  }
4104d6c458bSopenharmony_ci
4114d6c458bSopenharmony_ci  text(): Promise<string> {
4124d6c458bSopenharmony_ci    return this.blobClass.text();
4134d6c458bSopenharmony_ci  }
4144d6c458bSopenharmony_ci
4154d6c458bSopenharmony_ci  slice(start?: number, end?: number, type?: string): Blob {
4164d6c458bSopenharmony_ci    let newBlob = Object.create(this);
4174d6c458bSopenharmony_ci    if (type !== undefined) {
4184d6c458bSopenharmony_ci      newBlob._type = type;
4194d6c458bSopenharmony_ci    }
4204d6c458bSopenharmony_ci    if (start === undefined || start === null) {
4214d6c458bSopenharmony_ci      return newBlob;
4224d6c458bSopenharmony_ci    }
4234d6c458bSopenharmony_ci    if (end === undefined || end === null) {
4244d6c458bSopenharmony_ci      newBlob.blobClass = new internalBuffer.Blob(this.blobClass, start);
4254d6c458bSopenharmony_ci      return newBlob;
4264d6c458bSopenharmony_ci    }
4274d6c458bSopenharmony_ci    if (start > end) {
4284d6c458bSopenharmony_ci      return newBlob;
4294d6c458bSopenharmony_ci    }
4304d6c458bSopenharmony_ci    if ((start > 0 && end < 0) || (start < 0 && end > 0)) {
4314d6c458bSopenharmony_ci      return newBlob;
4324d6c458bSopenharmony_ci    }
4334d6c458bSopenharmony_ci    newBlob.blobClass = new internalBuffer.Blob(this.blobClass, start, end);
4344d6c458bSopenharmony_ci    return newBlob;
4354d6c458bSopenharmony_ci  }
4364d6c458bSopenharmony_ci}
4374d6c458bSopenharmony_ci
4384d6c458bSopenharmony_cilet utils = {
4394d6c458bSopenharmony_ci  eightBits: 0xFF,
4404d6c458bSopenharmony_ci  sixtyFourBit: 0xFFFFFFFFn,
4414d6c458bSopenharmony_ci
4424d6c458bSopenharmony_ci  getLowerEight(value: number): number {
4434d6c458bSopenharmony_ci    return value & this.eightBits;
4444d6c458bSopenharmony_ci  },
4454d6c458bSopenharmony_ci  getLowerSixtyFour(value: bigint): bigint {
4464d6c458bSopenharmony_ci    return value & this.sixtyFourBit;
4474d6c458bSopenharmony_ci  }
4484d6c458bSopenharmony_ci};
4494d6c458bSopenharmony_ci
4504d6c458bSopenharmony_cienum Style {
4514d6c458bSopenharmony_ci  intBE = 0,
4524d6c458bSopenharmony_ci  intLE,
4534d6c458bSopenharmony_ci  uintBE,
4544d6c458bSopenharmony_ci  uintLE
4554d6c458bSopenharmony_ci};
4564d6c458bSopenharmony_ci
4574d6c458bSopenharmony_ciclass HandlerBuffer {
4584d6c458bSopenharmony_ci  get(obj: Buffer, prop: string): number | undefined {
4594d6c458bSopenharmony_ci    if (typeof prop === 'number') {
4604d6c458bSopenharmony_ci      if (prop >= obj.length) {
4614d6c458bSopenharmony_ci        return obj[prop];
4624d6c458bSopenharmony_ci      }
4634d6c458bSopenharmony_ci      return obj[bufferSymbol].get(prop);
4644d6c458bSopenharmony_ci    }
4654d6c458bSopenharmony_ci    return obj[prop];
4664d6c458bSopenharmony_ci  }
4674d6c458bSopenharmony_ci  set(obj: Buffer, prop: string | symbol, value: number): boolean {
4684d6c458bSopenharmony_ci    if (typeof prop === 'number') {
4694d6c458bSopenharmony_ci      if (prop >= obj.length) {
4704d6c458bSopenharmony_ci        return false;
4714d6c458bSopenharmony_ci      }
4724d6c458bSopenharmony_ci      value = utils.getLowerEight(value);
4734d6c458bSopenharmony_ci      obj[bufferSymbol].set(prop, value);
4744d6c458bSopenharmony_ci      return true;
4754d6c458bSopenharmony_ci    }
4764d6c458bSopenharmony_ci
4774d6c458bSopenharmony_ci    if (prop === lengthSymbol || prop === bufferSymbol) {
4784d6c458bSopenharmony_ci      obj[prop] = value;
4794d6c458bSopenharmony_ci      return true;
4804d6c458bSopenharmony_ci    } else if (prop === 'length' || prop === 'buffer' || prop === 'byteOffset') {
4814d6c458bSopenharmony_ci      throw typeErrorForProperty(prop);
4824d6c458bSopenharmony_ci    }
4834d6c458bSopenharmony_ci    return false;
4844d6c458bSopenharmony_ci  }
4854d6c458bSopenharmony_ci  ownKeys(obj: Buffer): Array<string> {
4864d6c458bSopenharmony_ci    let keys: Array<string> = [];
4874d6c458bSopenharmony_ci    for (let i = 0, len = obj.length; i < len; i++) {
4884d6c458bSopenharmony_ci      keys.push(i.toString());
4894d6c458bSopenharmony_ci    }
4904d6c458bSopenharmony_ci    return keys;
4914d6c458bSopenharmony_ci  }
4924d6c458bSopenharmony_ci}
4934d6c458bSopenharmony_ciclass Buffer {
4944d6c458bSopenharmony_ci  private _arrayBuffer: ArrayBuffer | SharedArrayBuffer | undefined;
4954d6c458bSopenharmony_ci
4964d6c458bSopenharmony_ci  public get length(): number {
4974d6c458bSopenharmony_ci    return this[lengthSymbol];
4984d6c458bSopenharmony_ci  }
4994d6c458bSopenharmony_ci
5004d6c458bSopenharmony_ci  public get byteOffset(): number {
5014d6c458bSopenharmony_ci    return this[bufferSymbol].getByteOffset();
5024d6c458bSopenharmony_ci  }
5034d6c458bSopenharmony_ci
5044d6c458bSopenharmony_ci  public get buffer(): ArrayBufferLike {
5054d6c458bSopenharmony_ci    if (this._arrayBuffer) {
5064d6c458bSopenharmony_ci      return this._arrayBuffer;
5074d6c458bSopenharmony_ci    }
5084d6c458bSopenharmony_ci    let arr = this[bufferSymbol].getArrayBuffer();
5094d6c458bSopenharmony_ci    return arr;
5104d6c458bSopenharmony_ci  }
5114d6c458bSopenharmony_ci
5124d6c458bSopenharmony_ci  constructor(value: number | Buffer | Uint8Array | ArrayBuffer | SharedArrayBuffer | Array<number> | string,
5134d6c458bSopenharmony_ci    byteOffsetOrEncoding?: number | string, length?: number) {
5144d6c458bSopenharmony_ci    if (arguments.length === 1) {
5154d6c458bSopenharmony_ci      if (typeof value === 'number') {
5164d6c458bSopenharmony_ci        this[bufferSymbol] = new internalBuffer.Buffer(ParaType.NUMBER, value);
5174d6c458bSopenharmony_ci      } else if (value instanceof Buffer) {
5184d6c458bSopenharmony_ci        this[bufferSymbol] = new internalBuffer.Buffer(ParaType.BUFFER, value[bufferSymbol]);
5194d6c458bSopenharmony_ci      } else if (value instanceof Uint8Array) {
5204d6c458bSopenharmony_ci        this[bufferSymbol] = new internalBuffer.Buffer(ParaType.UINT8ARRAY, value);
5214d6c458bSopenharmony_ci      } else if (value instanceof Array) {
5224d6c458bSopenharmony_ci        this[bufferSymbol] = new internalBuffer.Buffer(ParaType.NUMBERS, value);
5234d6c458bSopenharmony_ci      }
5244d6c458bSopenharmony_ci    } else if (arguments.length === 3 && typeof byteOffsetOrEncoding === 'number' && typeof length === 'number') {
5254d6c458bSopenharmony_ci      if (value instanceof ArrayBuffer || value instanceof SharedArrayBuffer) {
5264d6c458bSopenharmony_ci        this[bufferSymbol] = new internalBuffer.Buffer(ParaType.ARRAYBUFFER, value, byteOffsetOrEncoding, length);
5274d6c458bSopenharmony_ci        this._arrayBuffer = value;
5284d6c458bSopenharmony_ci      } else if (value instanceof Buffer) {
5294d6c458bSopenharmony_ci        this[bufferSymbol] = new internalBuffer.Buffer(ParaType.BUFFER, value[bufferSymbol], byteOffsetOrEncoding, length);
5304d6c458bSopenharmony_ci      }
5314d6c458bSopenharmony_ci    } else if (arguments.length === twoBytes && typeof value === 'string' && typeof byteOffsetOrEncoding === 'string') {
5324d6c458bSopenharmony_ci      this[bufferSymbol] = new internalBuffer.Buffer(ParaType.STRING, value, byteOffsetOrEncoding);
5334d6c458bSopenharmony_ci    } else {
5344d6c458bSopenharmony_ci      this[bufferSymbol] = new internalBuffer.Buffer(ParaType.NUMBER, 0);
5354d6c458bSopenharmony_ci    }
5364d6c458bSopenharmony_ci    this[lengthSymbol] = this[bufferSymbol].getLength();
5374d6c458bSopenharmony_ci    return new Proxy(this, new HandlerBuffer());
5384d6c458bSopenharmony_ci  }
5394d6c458bSopenharmony_ci
5404d6c458bSopenharmony_ci  fillInner(value: string | Buffer | Uint8Array | number, offset: number = 0, end: number = this.length,
5414d6c458bSopenharmony_ci    encoding: string = 'utf8'): Buffer {
5424d6c458bSopenharmony_ci    const normalizedEncoding = encodingTypeErrorCheck(encoding);
5434d6c458bSopenharmony_ci
5444d6c458bSopenharmony_ci    rangeErrorCheck(offset, 'offset', 0, UINT32MAX);
5454d6c458bSopenharmony_ci    rangeErrorCheck(end, 'end', 0, this.length);
5464d6c458bSopenharmony_ci
5474d6c458bSopenharmony_ci    if (offset > end - 1) {
5484d6c458bSopenharmony_ci      return this;
5494d6c458bSopenharmony_ci    }
5504d6c458bSopenharmony_ci    if (typeof value === 'string') {
5514d6c458bSopenharmony_ci      if (normalizedEncoding === 'hex') {
5524d6c458bSopenharmony_ci        let numbers = hexStrtoNumbers(value);
5534d6c458bSopenharmony_ci        this[bufferSymbol].fillNumbers(numbers, offset, end);
5544d6c458bSopenharmony_ci      } else {
5554d6c458bSopenharmony_ci        this[bufferSymbol].fillString(value, offset, end, normalizedEncoding);
5564d6c458bSopenharmony_ci      }
5574d6c458bSopenharmony_ci    }
5584d6c458bSopenharmony_ci    if (typeof value === 'number') {
5594d6c458bSopenharmony_ci      let nums: Array<number> = [];
5604d6c458bSopenharmony_ci      nums.push(value & 0xFF); // 0xFF : get lower 8-bits
5614d6c458bSopenharmony_ci      this[bufferSymbol].fillNumbers(nums, offset, end);
5624d6c458bSopenharmony_ci    }
5634d6c458bSopenharmony_ci    if (value instanceof Buffer) {
5644d6c458bSopenharmony_ci      this[bufferSymbol].fillBuffer(value[bufferSymbol], offset, end);
5654d6c458bSopenharmony_ci    }
5664d6c458bSopenharmony_ci    if (value instanceof Uint8Array) {
5674d6c458bSopenharmony_ci      let nums = Array.from(value);
5684d6c458bSopenharmony_ci      this[bufferSymbol].fillNumbers(nums, offset, end);
5694d6c458bSopenharmony_ci    }
5704d6c458bSopenharmony_ci    return this;
5714d6c458bSopenharmony_ci  }
5724d6c458bSopenharmony_ci  /**
5734d6c458bSopenharmony_ci   * Fills buf with the specified value. If the offset and end are not given, the entire buf will be filled.
5744d6c458bSopenharmony_ci   * @since 9
5754d6c458bSopenharmony_ci   * @syscap SystemCapability.Utils.Lang
5764d6c458bSopenharmony_ci   * @param value The value with which to fill buf
5774d6c458bSopenharmony_ci   * @param [offset = 0] Number of bytes to skip before starting to fill buf
5784d6c458bSopenharmony_ci   * @param [end = buf.length] Where to stop filling buf (not inclusive)
5794d6c458bSopenharmony_ci   * @param [encoding='utf8'] The encoding for value if value is a string
5804d6c458bSopenharmony_ci   * @return A reference to buf
5814d6c458bSopenharmony_ci   */
5824d6c458bSopenharmony_ci  fill(value: string | Buffer | Uint8Array | number, offset: number = 0, end: number = this.length,
5834d6c458bSopenharmony_ci    encoding: string = 'utf8'): Buffer {
5844d6c458bSopenharmony_ci    if (this.length === 0) {
5854d6c458bSopenharmony_ci      return this;
5864d6c458bSopenharmony_ci    }
5874d6c458bSopenharmony_ci    if (offset === null) {
5884d6c458bSopenharmony_ci      offset = 0;
5894d6c458bSopenharmony_ci    }
5904d6c458bSopenharmony_ci    if (end === null) {
5914d6c458bSopenharmony_ci      end = this.length;
5924d6c458bSopenharmony_ci    }
5934d6c458bSopenharmony_ci    if (encoding === null) {
5944d6c458bSopenharmony_ci      encoding = 'utf8';
5954d6c458bSopenharmony_ci    }
5964d6c458bSopenharmony_ci    if (arguments.length === twoBytes) {
5974d6c458bSopenharmony_ci      if (typeof offset === 'string') {
5984d6c458bSopenharmony_ci        encoding = offset;
5994d6c458bSopenharmony_ci        offset = 0;
6004d6c458bSopenharmony_ci      }
6014d6c458bSopenharmony_ci    } else if (arguments.length === 3) {
6024d6c458bSopenharmony_ci      if (typeof end === 'string') {
6034d6c458bSopenharmony_ci        encoding = end;
6044d6c458bSopenharmony_ci        end = this.length;
6054d6c458bSopenharmony_ci      }
6064d6c458bSopenharmony_ci    }
6074d6c458bSopenharmony_ci    if (typeof offset !== 'number') {
6084d6c458bSopenharmony_ci      typeErrorCheck(offset, ['number'], 'offset');
6094d6c458bSopenharmony_ci    }
6104d6c458bSopenharmony_ci    if (typeof end === 'number') {
6114d6c458bSopenharmony_ci      typeErrorCheck(end, ['number'], 'end');
6124d6c458bSopenharmony_ci    }
6134d6c458bSopenharmony_ci    if (typeof encoding !== 'string') {
6144d6c458bSopenharmony_ci      typeErrorCheck(encoding, ['string'], 'encoding');
6154d6c458bSopenharmony_ci    }
6164d6c458bSopenharmony_ci    return this.fillInner(value, offset, end, encoding);
6174d6c458bSopenharmony_ci  }
6184d6c458bSopenharmony_ci
6194d6c458bSopenharmony_ci  write(str: string, offset: number = 0, length: number = this.length - offset, encoding: string = 'utf8'): number {
6204d6c458bSopenharmony_ci    typeErrorCheck(str, ['string'], 'str');
6214d6c458bSopenharmony_ci    if (offset === null) {
6224d6c458bSopenharmony_ci      offset = 0;
6234d6c458bSopenharmony_ci    }
6244d6c458bSopenharmony_ci    if (length === null) {
6254d6c458bSopenharmony_ci      length = this.length - offset;
6264d6c458bSopenharmony_ci    }
6274d6c458bSopenharmony_ci    if (encoding === null) {
6284d6c458bSopenharmony_ci      encoding = 'utf8';
6294d6c458bSopenharmony_ci    }
6304d6c458bSopenharmony_ci    if (arguments.length === 1) {
6314d6c458bSopenharmony_ci      return this[bufferSymbol].writeString(str, 0, length, 'utf8');
6324d6c458bSopenharmony_ci    } else if (arguments.length === twoBytes) {
6334d6c458bSopenharmony_ci      if (typeof offset === 'string') {
6344d6c458bSopenharmony_ci        encoding = offset;
6354d6c458bSopenharmony_ci        let encode = encodingTypeErrorCheck(encoding);
6364d6c458bSopenharmony_ci        return this[bufferSymbol].writeString(str, 0, this.length, encode);
6374d6c458bSopenharmony_ci      } else if (typeof offset === 'number') {
6384d6c458bSopenharmony_ci        rangeErrorCheck(offset, 'offset', 0, this.length - 1);
6394d6c458bSopenharmony_ci        return this[bufferSymbol].writeString(str, offset, length, 'utf8');
6404d6c458bSopenharmony_ci      } else {
6414d6c458bSopenharmony_ci        throw typeError(offset, 'offset', ['number']);
6424d6c458bSopenharmony_ci      }
6434d6c458bSopenharmony_ci    } else if (arguments.length === 3) {
6444d6c458bSopenharmony_ci      typeErrorCheck(offset, ['number'], 'offset');
6454d6c458bSopenharmony_ci      rangeErrorCheck(offset, 'offset', 0, this.length - 1);
6464d6c458bSopenharmony_ci      if (typeof length === 'number') {
6474d6c458bSopenharmony_ci        rangeErrorCheck(length, 'length', 0, this.length);
6484d6c458bSopenharmony_ci        length = (length > this.length - offset) ? (this.length - offset) : length;
6494d6c458bSopenharmony_ci        return this[bufferSymbol].writeString(str, offset, length, 'utf8');
6504d6c458bSopenharmony_ci      } else if (typeof length === 'string') {
6514d6c458bSopenharmony_ci        encoding = length;
6524d6c458bSopenharmony_ci        length = this.length - offset;
6534d6c458bSopenharmony_ci        let encode = encodingTypeErrorCheck(encoding);
6544d6c458bSopenharmony_ci        return this[bufferSymbol].writeString(str, offset, length, encode);
6554d6c458bSopenharmony_ci      } else {
6564d6c458bSopenharmony_ci        throw typeError(length, 'length', ['number']);
6574d6c458bSopenharmony_ci      }
6584d6c458bSopenharmony_ci    } else {
6594d6c458bSopenharmony_ci      if (typeof offset !== 'number') {
6604d6c458bSopenharmony_ci        throw typeError(offset, 'offset', ['number']);
6614d6c458bSopenharmony_ci      } else if (typeof length !== 'number') {
6624d6c458bSopenharmony_ci        throw typeError(length, 'length', ['number']);
6634d6c458bSopenharmony_ci      } else {
6644d6c458bSopenharmony_ci        rangeErrorCheck(offset, 'offset', 0, this.length - 1);
6654d6c458bSopenharmony_ci        let encode = encodingTypeErrorCheck(encoding);
6664d6c458bSopenharmony_ci        length = (length > this.length - offset) ? (this.length - offset) : length;
6674d6c458bSopenharmony_ci        return this[bufferSymbol].writeString(str, offset, length, encode);
6684d6c458bSopenharmony_ci      }
6694d6c458bSopenharmony_ci    }
6704d6c458bSopenharmony_ci  }
6714d6c458bSopenharmony_ci
6724d6c458bSopenharmony_ci  convertToBig64BE(value: bigint, offset: number): number {
6734d6c458bSopenharmony_ci    let byteValue = Number(utils.getLowerSixtyFour(value));
6744d6c458bSopenharmony_ci    let bitNum: number = eightBytes;
6754d6c458bSopenharmony_ci    for (let i = bitNum - 1; i > 0; i--) {
6764d6c458bSopenharmony_ci      this[offset + i] = byteValue;
6774d6c458bSopenharmony_ci      if (i === fourBytes) {
6784d6c458bSopenharmony_ci        byteValue = Number(utils.getLowerSixtyFour(value >> 32n));
6794d6c458bSopenharmony_ci      } else {
6804d6c458bSopenharmony_ci        byteValue = byteValue >> eightBytes;
6814d6c458bSopenharmony_ci      }
6824d6c458bSopenharmony_ci    }
6834d6c458bSopenharmony_ci    this[offset] = byteValue;
6844d6c458bSopenharmony_ci    return offset + eightBytes;
6854d6c458bSopenharmony_ci  }
6864d6c458bSopenharmony_ci
6874d6c458bSopenharmony_ci  convertToBig64LE(value: bigint, offset: number): number {
6884d6c458bSopenharmony_ci    let byteValue = Number(utils.getLowerSixtyFour(value));
6894d6c458bSopenharmony_ci    let bitNum = eightBytes;
6904d6c458bSopenharmony_ci    for (let i = 0; i < bitNum - 1; i++) {
6914d6c458bSopenharmony_ci      this[offset++] = byteValue;
6924d6c458bSopenharmony_ci      if (i === 3) {
6934d6c458bSopenharmony_ci        byteValue = Number(utils.getLowerSixtyFour(value >> 32n)); // 32 means offset 32-bits
6944d6c458bSopenharmony_ci      } else {
6954d6c458bSopenharmony_ci        byteValue = byteValue >> eightBytes;
6964d6c458bSopenharmony_ci      }
6974d6c458bSopenharmony_ci    }
6984d6c458bSopenharmony_ci    this[offset++] = byteValue;
6994d6c458bSopenharmony_ci    return offset;
7004d6c458bSopenharmony_ci  }
7014d6c458bSopenharmony_ci
7024d6c458bSopenharmony_ci  private readIntBEType(offset: number, byteLength: number): number | undefined {
7034d6c458bSopenharmony_ci    switch (byteLength) {
7044d6c458bSopenharmony_ci      case oneByte:
7054d6c458bSopenharmony_ci        return this.readInt8(offset);
7064d6c458bSopenharmony_ci      case twoBytes:
7074d6c458bSopenharmony_ci        return this.readInt16BE(offset);
7084d6c458bSopenharmony_ci      case threeBytes:
7094d6c458bSopenharmony_ci        return this.readInt24BE(offset);
7104d6c458bSopenharmony_ci      case fourBytes:
7114d6c458bSopenharmony_ci        return this.readInt32BE(offset);
7124d6c458bSopenharmony_ci      case fiveBytes:
7134d6c458bSopenharmony_ci        return this.readInt40BE(offset);
7144d6c458bSopenharmony_ci      case sixBytes:
7154d6c458bSopenharmony_ci        return this.readInt48BE(offset);
7164d6c458bSopenharmony_ci      default:
7174d6c458bSopenharmony_ci        break;
7184d6c458bSopenharmony_ci    }
7194d6c458bSopenharmony_ci    return undefined;
7204d6c458bSopenharmony_ci  }
7214d6c458bSopenharmony_ci
7224d6c458bSopenharmony_ci  private readIntLEType(offset: number, byteLength: number): number | undefined {
7234d6c458bSopenharmony_ci    switch (byteLength) {
7244d6c458bSopenharmony_ci      case oneByte:
7254d6c458bSopenharmony_ci        return this.readInt8(offset);
7264d6c458bSopenharmony_ci      case twoBytes:
7274d6c458bSopenharmony_ci        return this.readInt16LE(offset);
7284d6c458bSopenharmony_ci      case threeBytes:
7294d6c458bSopenharmony_ci        return this.readInt24LE(offset);
7304d6c458bSopenharmony_ci      case fourBytes:
7314d6c458bSopenharmony_ci        return this.readInt32LE(offset);
7324d6c458bSopenharmony_ci      case fiveBytes:
7334d6c458bSopenharmony_ci        return this.readInt40LE(offset);
7344d6c458bSopenharmony_ci      case sixBytes:
7354d6c458bSopenharmony_ci        return this.readInt48LE(offset);
7364d6c458bSopenharmony_ci      default:
7374d6c458bSopenharmony_ci        break;
7384d6c458bSopenharmony_ci    }
7394d6c458bSopenharmony_ci    return undefined;
7404d6c458bSopenharmony_ci  }
7414d6c458bSopenharmony_ci
7424d6c458bSopenharmony_ci  private readUIntBEType(offset: number, byteLength: number): number | undefined {
7434d6c458bSopenharmony_ci    switch (byteLength) {
7444d6c458bSopenharmony_ci      case oneByte:
7454d6c458bSopenharmony_ci        return this.readUInt8(offset);
7464d6c458bSopenharmony_ci      case twoBytes:
7474d6c458bSopenharmony_ci        return this.readUInt16BE(offset);
7484d6c458bSopenharmony_ci      case threeBytes:
7494d6c458bSopenharmony_ci        return this.readUInt24BE(offset);
7504d6c458bSopenharmony_ci      case fourBytes:
7514d6c458bSopenharmony_ci        return this.readUInt32BE(offset);
7524d6c458bSopenharmony_ci      case fiveBytes:
7534d6c458bSopenharmony_ci        return this.readUInt40BE(offset);
7544d6c458bSopenharmony_ci      case sixBytes:
7554d6c458bSopenharmony_ci        return this.readUInt48BE(offset);
7564d6c458bSopenharmony_ci      default:
7574d6c458bSopenharmony_ci        break;
7584d6c458bSopenharmony_ci    }
7594d6c458bSopenharmony_ci    return undefined;
7604d6c458bSopenharmony_ci  }
7614d6c458bSopenharmony_ci
7624d6c458bSopenharmony_ci  private readUIntLEType(offset: number, byteLength: number): number | undefined {
7634d6c458bSopenharmony_ci    switch (byteLength) {
7644d6c458bSopenharmony_ci      case oneByte:
7654d6c458bSopenharmony_ci        return this.readUInt8(offset);
7664d6c458bSopenharmony_ci      case twoBytes:
7674d6c458bSopenharmony_ci        return this.readUInt16LE(offset);
7684d6c458bSopenharmony_ci      case threeBytes:
7694d6c458bSopenharmony_ci        return this.readUInt24LE(offset);
7704d6c458bSopenharmony_ci      case fourBytes:
7714d6c458bSopenharmony_ci        return this.readUInt32LE(offset);
7724d6c458bSopenharmony_ci      case fiveBytes:
7734d6c458bSopenharmony_ci        return this.readUInt40LE(offset);
7744d6c458bSopenharmony_ci      case sixBytes:
7754d6c458bSopenharmony_ci        return this.readUInt48LE(offset);
7764d6c458bSopenharmony_ci      default:
7774d6c458bSopenharmony_ci        break;
7784d6c458bSopenharmony_ci    }
7794d6c458bSopenharmony_ci    return undefined;
7804d6c458bSopenharmony_ci  }
7814d6c458bSopenharmony_ci
7824d6c458bSopenharmony_ci  private readData(offset: number, byteLength: number, style: Style): number | undefined {
7834d6c458bSopenharmony_ci    rangeErrorCheck(byteLength, 'byteLength', oneByte, sixBytes);
7844d6c458bSopenharmony_ci    if (style === Style.intBE) {
7854d6c458bSopenharmony_ci      return this.readIntBEType(offset, byteLength);
7864d6c458bSopenharmony_ci    } else if (style === Style.intLE) {
7874d6c458bSopenharmony_ci      return this.readIntLEType(offset, byteLength);
7884d6c458bSopenharmony_ci    } else if (style === Style.uintLE) {
7894d6c458bSopenharmony_ci      return this.readUIntLEType(offset, byteLength);
7904d6c458bSopenharmony_ci    } else if (style === Style.uintBE) {
7914d6c458bSopenharmony_ci      return this.readUIntBEType(offset, byteLength);
7924d6c458bSopenharmony_ci    }
7934d6c458bSopenharmony_ci    return undefined;
7944d6c458bSopenharmony_ci  }
7954d6c458bSopenharmony_ci
7964d6c458bSopenharmony_ci  private writeIntBEType(value: number, offset: number, byteLength: number): number | undefined {
7974d6c458bSopenharmony_ci    switch (byteLength) {
7984d6c458bSopenharmony_ci      case oneByte:
7994d6c458bSopenharmony_ci        return this.writeInt8(value, offset);
8004d6c458bSopenharmony_ci      case twoBytes:
8014d6c458bSopenharmony_ci        return this.writeInt16BE(value, offset);
8024d6c458bSopenharmony_ci      case threeBytes:
8034d6c458bSopenharmony_ci        return this.writeUInt24BE(value, offset);
8044d6c458bSopenharmony_ci      case fourBytes:
8054d6c458bSopenharmony_ci        return this.writeInt32BE(value, offset);
8064d6c458bSopenharmony_ci      case fiveBytes:
8074d6c458bSopenharmony_ci        return this.writeUInt40BE(value, offset);
8084d6c458bSopenharmony_ci      case sixBytes:
8094d6c458bSopenharmony_ci        return this.writeUInt48BE(value, offset);
8104d6c458bSopenharmony_ci      default:
8114d6c458bSopenharmony_ci        break;
8124d6c458bSopenharmony_ci    }
8134d6c458bSopenharmony_ci    return undefined;
8144d6c458bSopenharmony_ci  }
8154d6c458bSopenharmony_ci
8164d6c458bSopenharmony_ci  private writeUIntBEType(value: number, offset: number, byteLength: number): number | undefined {
8174d6c458bSopenharmony_ci    switch (byteLength) {
8184d6c458bSopenharmony_ci      case oneByte:
8194d6c458bSopenharmony_ci        return this.writeUInt8(value, offset);
8204d6c458bSopenharmony_ci      case twoBytes:
8214d6c458bSopenharmony_ci        return this.writeUInt16BE(value, offset);
8224d6c458bSopenharmony_ci      case threeBytes:
8234d6c458bSopenharmony_ci        return this.writeUInt24BE(value, offset);
8244d6c458bSopenharmony_ci      case fourBytes:
8254d6c458bSopenharmony_ci        return this.writeUInt32BE(value, offset);
8264d6c458bSopenharmony_ci      case fiveBytes:
8274d6c458bSopenharmony_ci        return this.writeUInt40BE(value, offset);
8284d6c458bSopenharmony_ci      case sixBytes:
8294d6c458bSopenharmony_ci        return this.writeUInt48BE(value, offset);
8304d6c458bSopenharmony_ci      default:
8314d6c458bSopenharmony_ci        break;
8324d6c458bSopenharmony_ci    }
8334d6c458bSopenharmony_ci    return undefined;
8344d6c458bSopenharmony_ci  }
8354d6c458bSopenharmony_ci
8364d6c458bSopenharmony_ci  private writeUIntLEType(value: number, offset: number, byteLength: number): number | undefined {
8374d6c458bSopenharmony_ci    switch (byteLength) {
8384d6c458bSopenharmony_ci      case oneByte:
8394d6c458bSopenharmony_ci        return this.writeUInt8(value, offset);
8404d6c458bSopenharmony_ci      case twoBytes:
8414d6c458bSopenharmony_ci        return this.writeUInt16LE(value, offset);
8424d6c458bSopenharmony_ci      case threeBytes:
8434d6c458bSopenharmony_ci        return this.writeUInt24LE(value, offset);
8444d6c458bSopenharmony_ci      case fourBytes:
8454d6c458bSopenharmony_ci        return this.writeUInt32LE(value, offset);
8464d6c458bSopenharmony_ci      case fiveBytes:
8474d6c458bSopenharmony_ci        return this.writeUInt40LE(value, offset);
8484d6c458bSopenharmony_ci      case sixBytes:
8494d6c458bSopenharmony_ci        return this.writeUInt48LE(value, offset);
8504d6c458bSopenharmony_ci      default:
8514d6c458bSopenharmony_ci        break;
8524d6c458bSopenharmony_ci    }
8534d6c458bSopenharmony_ci    return undefined;
8544d6c458bSopenharmony_ci  }
8554d6c458bSopenharmony_ci
8564d6c458bSopenharmony_ci  private writeData(value: number, offset: number, byteLength: number, style: Style): number | undefined {
8574d6c458bSopenharmony_ci    rangeErrorCheck(byteLength, 'byteLength', oneByte, sixBytes);
8584d6c458bSopenharmony_ci    if (style === Style.intBE) {
8594d6c458bSopenharmony_ci      return this.writeIntBEType(value, offset, byteLength);
8604d6c458bSopenharmony_ci    } else if (style === Style.intLE || style === Style.uintLE) {
8614d6c458bSopenharmony_ci      return this.writeUIntLEType(value, offset, byteLength);
8624d6c458bSopenharmony_ci    } else if (style === Style.uintBE) {
8634d6c458bSopenharmony_ci      return this.writeUIntBEType(value, offset, byteLength);
8644d6c458bSopenharmony_ci    }
8654d6c458bSopenharmony_ci    return undefined;
8664d6c458bSopenharmony_ci  }
8674d6c458bSopenharmony_ci
8684d6c458bSopenharmony_ci  writeBigInt64BE(value: bigint, offset: number = 0): number {
8694d6c458bSopenharmony_ci    typeErrorCheck(value, ['bigint'], 'value');
8704d6c458bSopenharmony_ci    if (offset === null) {
8714d6c458bSopenharmony_ci      offset = 0;
8724d6c458bSopenharmony_ci    }
8734d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
8744d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
8754d6c458bSopenharmony_ci    // 2n : 63n : 1n : The range of 64-bit BigInt value is from negative the 63st power of 2 to the 63st power of 2 minus 1
8764d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', -(2n ** 63n), 2n ** 63n, '-(2n ** 63n)', '2n ** 63n');
8774d6c458bSopenharmony_ci    return this.convertToBig64BE(value, offset);
8784d6c458bSopenharmony_ci  }
8794d6c458bSopenharmony_ci
8804d6c458bSopenharmony_ci  readBigInt64BE(offset: number = 0): bigint {
8814d6c458bSopenharmony_ci    if (offset === null) {
8824d6c458bSopenharmony_ci      offset = 0;
8834d6c458bSopenharmony_ci    }
8844d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
8854d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
8864d6c458bSopenharmony_ci    const val = (this[offset] << 24) + this.calculationBE(offset + 1, threeBytes); // 24 : the first val for this[offset]
8874d6c458bSopenharmony_ci    return (BigInt(val) << 32n) + // 32 means offset 32-bits left
8884d6c458bSopenharmony_ci      BigInt(this.calculationBE(offset + fourBytes, fourBytes));
8894d6c458bSopenharmony_ci  }
8904d6c458bSopenharmony_ci
8914d6c458bSopenharmony_ci  writeBigInt64LE(value: bigint, offset: number = 0): number {
8924d6c458bSopenharmony_ci    typeErrorCheck(value, ['bigint'], 'value');
8934d6c458bSopenharmony_ci    if (offset === null) {
8944d6c458bSopenharmony_ci      offset = 0;
8954d6c458bSopenharmony_ci    }
8964d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
8974d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
8984d6c458bSopenharmony_ci    // 2n : 63n : 1n : The range of 64-bit BigInt value is from negative the 63st power of 2 to the 63st power of 2 minus 1
8994d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', -(2n ** 63n), 2n ** 63n, '-(2n ** 63n)', '2n ** 63n');
9004d6c458bSopenharmony_ci
9014d6c458bSopenharmony_ci    return this.convertToBig64LE(value, offset);
9024d6c458bSopenharmony_ci  }
9034d6c458bSopenharmony_ci
9044d6c458bSopenharmony_ci  private calculationLE(offset: number, count: number): number {
9054d6c458bSopenharmony_ci    let result: number = 0;
9064d6c458bSopenharmony_ci    for (let i = 0; i < count; i++) {
9074d6c458bSopenharmony_ci      result += this[offset++] * Math.pow(twoBytes, eightBytes * i);
9084d6c458bSopenharmony_ci    }
9094d6c458bSopenharmony_ci    return result;
9104d6c458bSopenharmony_ci  }
9114d6c458bSopenharmony_ci
9124d6c458bSopenharmony_ci  private calculationBE(offset: number, count: number): number {
9134d6c458bSopenharmony_ci    let result: number = 0;
9144d6c458bSopenharmony_ci    for (let i = count - 1; i >= 0; i--) {
9154d6c458bSopenharmony_ci      result += this[offset++] * Math.pow(twoBytes, eightBytes * i);
9164d6c458bSopenharmony_ci    }
9174d6c458bSopenharmony_ci    return result;
9184d6c458bSopenharmony_ci  }
9194d6c458bSopenharmony_ci
9204d6c458bSopenharmony_ci  readBigInt64LE(offset: number = 0): bigint {
9214d6c458bSopenharmony_ci    if (offset === null) {
9224d6c458bSopenharmony_ci      offset = 0;
9234d6c458bSopenharmony_ci    }
9244d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
9254d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
9264d6c458bSopenharmony_ci    const val = this.calculationLE(offset + fourBytes, threeBytes) + (this[offset + sevenBytes] << 24); // 24 means offset 24-bits left
9274d6c458bSopenharmony_ci    return (BigInt(val) << 32n) + BigInt(this.calculationLE(offset, fourBytes)); // 32 means offset 32-bits left
9284d6c458bSopenharmony_ci  }
9294d6c458bSopenharmony_ci
9304d6c458bSopenharmony_ci  writeBigUInt64BE(value: bigint, offset: number = 0): number {
9314d6c458bSopenharmony_ci    typeErrorCheck(value, ['bigint'], 'value');
9324d6c458bSopenharmony_ci    if (offset === null) {
9334d6c458bSopenharmony_ci      offset = 0;
9344d6c458bSopenharmony_ci    }
9354d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
9364d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
9374d6c458bSopenharmony_ci    // 2n : 64n : 1n : The range of 64-bit BigUInt value is from 0 to the 64st power of 2 minus 1
9384d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, 2n ** 64n - 1n, '0', '2n ** 64n - 1n');
9394d6c458bSopenharmony_ci
9404d6c458bSopenharmony_ci    return this.convertToBig64BE(value, offset);
9414d6c458bSopenharmony_ci  }
9424d6c458bSopenharmony_ci
9434d6c458bSopenharmony_ci  readBigUInt64BE(offset: number = 0): bigint {
9444d6c458bSopenharmony_ci    if (offset === null) {
9454d6c458bSopenharmony_ci      offset = 0;
9464d6c458bSopenharmony_ci    }
9474d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
9484d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
9494d6c458bSopenharmony_ci    const hi = this.calculationBE(offset, fourBytes);
9504d6c458bSopenharmony_ci
9514d6c458bSopenharmony_ci    const lo = this.calculationBE(offset + fourBytes, fourBytes);
9524d6c458bSopenharmony_ci    return (BigInt(hi) << 32n) + BigInt(lo); // 32 means offset 32-bits left
9534d6c458bSopenharmony_ci  }
9544d6c458bSopenharmony_ci
9554d6c458bSopenharmony_ci  writeBigUInt64LE(value: bigint, offset: number = 0): number {
9564d6c458bSopenharmony_ci    typeErrorCheck(value, ['bigint'], 'value');
9574d6c458bSopenharmony_ci    if (offset === null) {
9584d6c458bSopenharmony_ci      offset = 0;
9594d6c458bSopenharmony_ci    }
9604d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
9614d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
9624d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, 2n ** 64n - 1n, '0', '2n ** 64n - 1n'); // 2n : 64n : 1n : The range of BigUInt
9634d6c458bSopenharmony_ci
9644d6c458bSopenharmony_ci    return this.convertToBig64LE(value, offset);
9654d6c458bSopenharmony_ci  }
9664d6c458bSopenharmony_ci
9674d6c458bSopenharmony_ci  readBigUInt64LE(offset: number = 0): bigint {
9684d6c458bSopenharmony_ci    if (offset === null) {
9694d6c458bSopenharmony_ci      offset = 0;
9704d6c458bSopenharmony_ci    }
9714d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
9724d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
9734d6c458bSopenharmony_ci    const lo = this.calculationLE(offset, fourBytes);
9744d6c458bSopenharmony_ci    const hi = this.calculationLE(offset + fourBytes, fourBytes);
9754d6c458bSopenharmony_ci    return BigInt(lo) + (BigInt(hi) << 32n); // 32 means offset 32-bits left
9764d6c458bSopenharmony_ci  }
9774d6c458bSopenharmony_ci
9784d6c458bSopenharmony_ci  writeInt8(value: number, offset: number = 0): number {
9794d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
9804d6c458bSopenharmony_ci    if (offset === null) {
9814d6c458bSopenharmony_ci      offset = 0;
9824d6c458bSopenharmony_ci    }
9834d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
9844d6c458bSopenharmony_ci    this.checkOffsetRange(offset, oneByte);
9854d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', - (TWO_POW_SEVEN), (TWO_POW_SEVEN - 1));
9864d6c458bSopenharmony_ci    value = +value;
9874d6c458bSopenharmony_ci
9884d6c458bSopenharmony_ci    this[offset] = value;
9894d6c458bSopenharmony_ci    return offset + 1;
9904d6c458bSopenharmony_ci  }
9914d6c458bSopenharmony_ci
9924d6c458bSopenharmony_ci  readInt8(offset: number = 0): number {
9934d6c458bSopenharmony_ci    if (offset === null) {
9944d6c458bSopenharmony_ci      offset = 0;
9954d6c458bSopenharmony_ci    }
9964d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
9974d6c458bSopenharmony_ci    this.checkOffsetRange(offset, oneByte);
9984d6c458bSopenharmony_ci    const val = this[offset];
9994d6c458bSopenharmony_ci
10004d6c458bSopenharmony_ci    return val | (val & TWO_POW_SEVEN) * 0x1fffffe; // 0x1fffffe mean the decimal value is 33554430"
10014d6c458bSopenharmony_ci  }
10024d6c458bSopenharmony_ci
10034d6c458bSopenharmony_ci  writeInt16BE(value: number, offset: number = 0): number {
10044d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
10054d6c458bSopenharmony_ci    if (offset === null) {
10064d6c458bSopenharmony_ci      offset = 0;
10074d6c458bSopenharmony_ci    }
10084d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
10094d6c458bSopenharmony_ci    this.checkOffsetRange(offset, twoBytes);
10104d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', - (TWO_POW_FIFTEEN), (TWO_POW_FIFTEEN - 1));
10114d6c458bSopenharmony_ci    value = +value;
10124d6c458bSopenharmony_ci    this[offset++] = (value >>> eightBytes);
10134d6c458bSopenharmony_ci    this[offset++] = value;
10144d6c458bSopenharmony_ci    return offset;
10154d6c458bSopenharmony_ci  }
10164d6c458bSopenharmony_ci
10174d6c458bSopenharmony_ci  readInt16BE(offset: number = 0): number {
10184d6c458bSopenharmony_ci    if (offset === null) {
10194d6c458bSopenharmony_ci      offset = 0;
10204d6c458bSopenharmony_ci    }
10214d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
10224d6c458bSopenharmony_ci    this.checkOffsetRange(offset, twoBytes);
10234d6c458bSopenharmony_ci    const val = this.calculationBE(offset, twoBytes);
10244d6c458bSopenharmony_ci    return val | (val & TWO_POW_FIFTEEN) * 0x1fffe; // 0x1fffe mean the decimal value is 131070"
10254d6c458bSopenharmony_ci  }
10264d6c458bSopenharmony_ci
10274d6c458bSopenharmony_ci  writeInt16LE(value: number, offset: number = 0): number {
10284d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
10294d6c458bSopenharmony_ci    if (offset === null) {
10304d6c458bSopenharmony_ci      offset = 0;
10314d6c458bSopenharmony_ci    }
10324d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
10334d6c458bSopenharmony_ci    this.checkOffsetRange(offset, twoBytes);
10344d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', -(TWO_POW_FIFTEEN), (TWO_POW_FIFTEEN - 1));
10354d6c458bSopenharmony_ci    value = +value;
10364d6c458bSopenharmony_ci    this[offset++] = value;
10374d6c458bSopenharmony_ci    this[offset++] = (value >>> eightBytes);
10384d6c458bSopenharmony_ci    return offset;
10394d6c458bSopenharmony_ci  }
10404d6c458bSopenharmony_ci
10414d6c458bSopenharmony_ci  readInt16LE(offset: number = 0): number {
10424d6c458bSopenharmony_ci    if (offset === null) {
10434d6c458bSopenharmony_ci      offset = 0;
10444d6c458bSopenharmony_ci    }
10454d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
10464d6c458bSopenharmony_ci    this.checkOffsetRange(offset, twoBytes);
10474d6c458bSopenharmony_ci    const val = this[offset] + this[offset + 1] * Math.pow(twoBytes, eightBytes);
10484d6c458bSopenharmony_ci    return val | (val & TWO_POW_FIFTEEN) * 0x1fffe; // 0x1fffe mean the decimal value is 131070"
10494d6c458bSopenharmony_ci  }
10504d6c458bSopenharmony_ci
10514d6c458bSopenharmony_ci  readUInt16LE(offset: number = 0): number {
10524d6c458bSopenharmony_ci    if (offset === null) {
10534d6c458bSopenharmony_ci      offset = 0;
10544d6c458bSopenharmony_ci    }
10554d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
10564d6c458bSopenharmony_ci    this.checkOffsetRange(offset, twoBytes);
10574d6c458bSopenharmony_ci    return this[offset] + this[offset + 1] * Math.pow(twoBytes, eightBytes); // 8 means offset 8 bits
10584d6c458bSopenharmony_ci  }
10594d6c458bSopenharmony_ci
10604d6c458bSopenharmony_ci  writeUInt8(value: number, offset: number = 0): number {
10614d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
10624d6c458bSopenharmony_ci    if (offset === null) {
10634d6c458bSopenharmony_ci      offset = 0;
10644d6c458bSopenharmony_ci    }
10654d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
10664d6c458bSopenharmony_ci    this.checkOffsetRange(offset, oneByte);
10674d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, 255); // 255 : The range of 8-bit UInt value is from 0 to the 255
10684d6c458bSopenharmony_ci    value = +value;
10694d6c458bSopenharmony_ci
10704d6c458bSopenharmony_ci    this[offset] = value;
10714d6c458bSopenharmony_ci    return offset + 1;
10724d6c458bSopenharmony_ci  }
10734d6c458bSopenharmony_ci
10744d6c458bSopenharmony_ci  readUInt8(offset: number = 0): number {
10754d6c458bSopenharmony_ci    if (offset === null) {
10764d6c458bSopenharmony_ci      offset = 0;
10774d6c458bSopenharmony_ci    }
10784d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
10794d6c458bSopenharmony_ci    this.checkOffsetRange(offset, oneByte);
10804d6c458bSopenharmony_ci    const val = this[offset];
10814d6c458bSopenharmony_ci    return val;
10824d6c458bSopenharmony_ci  }
10834d6c458bSopenharmony_ci
10844d6c458bSopenharmony_ci  writeIntBE(value: number, offset: number, byteLength: number): number | undefined {
10854d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
10864d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
10874d6c458bSopenharmony_ci    typeErrorCheck(byteLength, ['number'], 'byteLength');
10884d6c458bSopenharmony_ci    return this.writeData(value, offset, byteLength, Style.intBE);
10894d6c458bSopenharmony_ci  }
10904d6c458bSopenharmony_ci
10914d6c458bSopenharmony_ci  private writeUInt24BE(value: number, offset: number = 0): number {
10924d6c458bSopenharmony_ci    this.checkOffsetRange(offset, threeBytes);
10934d6c458bSopenharmony_ci    // 24 : The range of 24-bit UInt value is from 0 to the 24st power of 2 minus 1
10944d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, twoBytes ** 24 - 1, '0', '2**24 - 1');
10954d6c458bSopenharmony_ci    value = +value;
10964d6c458bSopenharmony_ci    for (let i: number = twoBytes; i > 0; i--) {
10974d6c458bSopenharmony_ci      this[offset + i] = value;
10984d6c458bSopenharmony_ci      value = value >>> eightBytes;
10994d6c458bSopenharmony_ci    }
11004d6c458bSopenharmony_ci    this[offset] = value;
11014d6c458bSopenharmony_ci    return offset + threeBytes;
11024d6c458bSopenharmony_ci  }
11034d6c458bSopenharmony_ci
11044d6c458bSopenharmony_ci  private writeUInt40BE(value: number, offset: number = 0): number {
11054d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fiveBytes);
11064d6c458bSopenharmony_ci    // 2 : 40 : The range of 40-bit UInt value is from 0 to the 40st power of 2 minus 1
11074d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, twoBytes ** 40 - 1, '0', '2**40 - 1');
11084d6c458bSopenharmony_ci    value = +value;
11094d6c458bSopenharmony_ci    this[offset++] = Math.floor(value * Math.pow(twoBytes, -32)); // -32 means offset 32 bits to left
11104d6c458bSopenharmony_ci    for (let i: number = 3; i > 0; i--) { // 3 is array->maxIndex
11114d6c458bSopenharmony_ci      this[offset + i] = value;
11124d6c458bSopenharmony_ci      value = value >>> eightBytes;
11134d6c458bSopenharmony_ci    }
11144d6c458bSopenharmony_ci    this[offset] = value;
11154d6c458bSopenharmony_ci    return offset + fourBytes;
11164d6c458bSopenharmony_ci  }
11174d6c458bSopenharmony_ci
11184d6c458bSopenharmony_ci  private writeUInt48BE(value: number, offset: number = 0): number {
11194d6c458bSopenharmony_ci    this.checkOffsetRange(offset, sixBytes);
11204d6c458bSopenharmony_ci    // 48 : The range of 48-bit UInt value is from 0 to the 48st power of 2 minus 1
11214d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, twoBytes ** 48 - 1, '0', '2**48 - 1');
11224d6c458bSopenharmony_ci    value = +value;
11234d6c458bSopenharmony_ci    const newVal = Math.floor(value * Math.pow(twoBytes, -32)); // -32 means offset 32 bits to left
11244d6c458bSopenharmony_ci    this[offset++] = (newVal >>> eightBytes);
11254d6c458bSopenharmony_ci    this[offset++] = newVal;
11264d6c458bSopenharmony_ci    for (let i: number = 3; i > 0; i--) { // 3 is array->maxIndex
11274d6c458bSopenharmony_ci      this[offset + i] = value;
11284d6c458bSopenharmony_ci      value = value >>> eightBytes;
11294d6c458bSopenharmony_ci    }
11304d6c458bSopenharmony_ci    this[offset] = value;
11314d6c458bSopenharmony_ci    return offset + fourBytes;
11324d6c458bSopenharmony_ci  }
11334d6c458bSopenharmony_ci
11344d6c458bSopenharmony_ci  readIntBE(offset: number, byteLength: number): number | undefined {
11354d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
11364d6c458bSopenharmony_ci    typeErrorCheck(byteLength, ['number'], 'byteLength');
11374d6c458bSopenharmony_ci    return this.readData(offset, byteLength, Style.intBE);
11384d6c458bSopenharmony_ci  }
11394d6c458bSopenharmony_ci
11404d6c458bSopenharmony_ci  private readInt48BE(offset: number = 0): number {
11414d6c458bSopenharmony_ci    this.checkOffsetRange(offset, sixBytes);
11424d6c458bSopenharmony_ci    const val = this.calculationBE(offset, twoBytes);
11434d6c458bSopenharmony_ci    return (val | (val & TWO_POW_FIFTEEN) * 0x1fffe) * MAX_LENGTH + this.calculationBE(offset + twoBytes, fourBytes);
11444d6c458bSopenharmony_ci  }
11454d6c458bSopenharmony_ci
11464d6c458bSopenharmony_ci  private readInt40BE(offset: number = 0): number {
11474d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fiveBytes);
11484d6c458bSopenharmony_ci    const first = this[offset];
11494d6c458bSopenharmony_ci    const last = this[offset + fourBytes];
11504d6c458bSopenharmony_ci    return (this[offset] | (this[offset] & TWO_POW_SEVEN) * 0x1fffffe) * MAX_LENGTH +
11514d6c458bSopenharmony_ci      this.calculationBE(++offset, fourBytes);
11524d6c458bSopenharmony_ci  }
11534d6c458bSopenharmony_ci
11544d6c458bSopenharmony_ci
11554d6c458bSopenharmony_ci  private readInt24BE(offset: number = 0): number {
11564d6c458bSopenharmony_ci    this.checkOffsetRange(offset, threeBytes);
11574d6c458bSopenharmony_ci    const val = this.calculationBE(offset, threeBytes);
11584d6c458bSopenharmony_ci    // 23 : 0x1fe : The number of 3 bytes changes to 4 bytes, positive high fill 0, negative high fill 1.
11594d6c458bSopenharmony_ci    return val | (val & Math.pow(twoBytes, 23)) * 0x1fe;
11604d6c458bSopenharmony_ci  }
11614d6c458bSopenharmony_ci
11624d6c458bSopenharmony_ci  writeIntLE(value: number, offset: number, byteLength: number): number | undefined {
11634d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
11644d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
11654d6c458bSopenharmony_ci    typeErrorCheck(byteLength, ['number'], 'byteLength');
11664d6c458bSopenharmony_ci    return this.writeData(value, offset, byteLength, Style.intLE);
11674d6c458bSopenharmony_ci  }
11684d6c458bSopenharmony_ci
11694d6c458bSopenharmony_ci  private writeUInt48LE(value: number, offset: number = 0): number {
11704d6c458bSopenharmony_ci    this.checkOffsetRange(offset, sixBytes);
11714d6c458bSopenharmony_ci    // 2 : 48 : The range of 48-bit UInt value is from 0 to the 48st power of 2 minus 1
11724d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, twoBytes ** 48 - 1, '0', '2**48 - 1');
11734d6c458bSopenharmony_ci    value = +value;
11744d6c458bSopenharmony_ci    const newVal = Math.floor(value * Math.pow(twoBytes, -32)); // -32 means offset 32 bits to left
11754d6c458bSopenharmony_ci    for (let i: number = 3; i > 0; i--) {
11764d6c458bSopenharmony_ci      this[offset++] = value;
11774d6c458bSopenharmony_ci      value = value >>> eightBytes;
11784d6c458bSopenharmony_ci    }
11794d6c458bSopenharmony_ci    this[offset++] = value;
11804d6c458bSopenharmony_ci    this[offset++] = newVal;
11814d6c458bSopenharmony_ci    this[offset++] = (newVal >>> eightBytes);
11824d6c458bSopenharmony_ci    return offset;
11834d6c458bSopenharmony_ci  }
11844d6c458bSopenharmony_ci
11854d6c458bSopenharmony_ci  private writeUInt40LE(value: number, offset: number = 0): number {
11864d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fiveBytes);
11874d6c458bSopenharmony_ci    // 2 : 40 : The range of 40-bit UInt value is from 0 to the 40st power of 2 minus 1
11884d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, twoBytes ** 40 - 1, '0', '2**40 - 1');
11894d6c458bSopenharmony_ci    value = +value;
11904d6c458bSopenharmony_ci    const newVal = value;
11914d6c458bSopenharmony_ci    for (let i: number = 3; i > 0; i--) {
11924d6c458bSopenharmony_ci      this[offset++] = value;
11934d6c458bSopenharmony_ci      value = value >>> eightBytes;
11944d6c458bSopenharmony_ci    }
11954d6c458bSopenharmony_ci    this[offset++] = value;
11964d6c458bSopenharmony_ci    this[offset++] = Math.floor(newVal * Math.pow(twoBytes, -32)); // -32 means offset 32 bits to left
11974d6c458bSopenharmony_ci    return offset;
11984d6c458bSopenharmony_ci  }
11994d6c458bSopenharmony_ci
12004d6c458bSopenharmony_ci  private writeUInt24LE(value: number, offset: number = 0): number {
12014d6c458bSopenharmony_ci    this.checkOffsetRange(offset, threeBytes);
12024d6c458bSopenharmony_ci    // 2 : 24 : The range of 24-bit UInt value is from 0 to the 24st power of 2 minus 1
12034d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, twoBytes ** 24 - 1, '0', '2**24 - 1');
12044d6c458bSopenharmony_ci    value = +value;
12054d6c458bSopenharmony_ci    for (let i: number = twoBytes; i > 0; i--) {
12064d6c458bSopenharmony_ci      this[offset++] = value;
12074d6c458bSopenharmony_ci      value = value >>> eightBytes;
12084d6c458bSopenharmony_ci    }
12094d6c458bSopenharmony_ci    this[offset++] = value;
12104d6c458bSopenharmony_ci    return offset;
12114d6c458bSopenharmony_ci  }
12124d6c458bSopenharmony_ci
12134d6c458bSopenharmony_ci  readIntLE(offset: number, byteLength: number): number | undefined {
12144d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
12154d6c458bSopenharmony_ci    typeErrorCheck(byteLength, ['number'], 'byteLength');
12164d6c458bSopenharmony_ci    return this.readData(offset, byteLength, Style.intLE);
12174d6c458bSopenharmony_ci  }
12184d6c458bSopenharmony_ci
12194d6c458bSopenharmony_ci  private readInt48LE(offset: number = 0): number {
12204d6c458bSopenharmony_ci    this.checkOffsetRange(offset, sixBytes);
12214d6c458bSopenharmony_ci    const val = this.calculationLE(offset + fourBytes, twoBytes);
12224d6c458bSopenharmony_ci    return (val | (val & TWO_POW_FIFTEEN) * 0x1fffe) * MAX_LENGTH + this.calculationLE(offset, fourBytes);
12234d6c458bSopenharmony_ci  }
12244d6c458bSopenharmony_ci
12254d6c458bSopenharmony_ci  private readInt40LE(offset: number = 0): number {
12264d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fiveBytes);
12274d6c458bSopenharmony_ci    return (this[offset + fourBytes] | (this[offset + fourBytes] & TWO_POW_SEVEN) * 0x1fffffe) * MAX_LENGTH +
12284d6c458bSopenharmony_ci      this.calculationLE(offset, fourBytes);
12294d6c458bSopenharmony_ci  }
12304d6c458bSopenharmony_ci
12314d6c458bSopenharmony_ci  private readInt24LE(offset: number = 0): number {
12324d6c458bSopenharmony_ci    this.checkOffsetRange(offset, threeBytes);
12334d6c458bSopenharmony_ci    const val = this.calculationLE(offset, threeBytes);
12344d6c458bSopenharmony_ci    // 2 : 23 : 0x1fe : The number of 3 bytes changes to 4 bytes, positive high fill 0, negative high fill 1.
12354d6c458bSopenharmony_ci    return val | (val & Math.pow(twoBytes, 23)) * 0x1fe;
12364d6c458bSopenharmony_ci  }
12374d6c458bSopenharmony_ci
12384d6c458bSopenharmony_ci  writeUIntLE(value: number, offset: number, byteLength: number): number | undefined {
12394d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
12404d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
12414d6c458bSopenharmony_ci    typeErrorCheck(byteLength, ['number'], 'byteLength');
12424d6c458bSopenharmony_ci    return this.writeData(value, offset, byteLength, Style.uintLE);
12434d6c458bSopenharmony_ci  }
12444d6c458bSopenharmony_ci
12454d6c458bSopenharmony_ci  readUIntLE(offset: number, byteLength: number): number | undefined {
12464d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
12474d6c458bSopenharmony_ci    typeErrorCheck(byteLength, ['number'], 'byteLength');
12484d6c458bSopenharmony_ci    return this.readData(offset, byteLength, Style.uintLE);
12494d6c458bSopenharmony_ci  }
12504d6c458bSopenharmony_ci
12514d6c458bSopenharmony_ci  private readUInt48LE(offset: number = 0): number {
12524d6c458bSopenharmony_ci    this.checkOffsetRange(offset, sixBytes);
12534d6c458bSopenharmony_ci    return this.calculationLE(offset, fourBytes) +
12544d6c458bSopenharmony_ci      (this.calculationLE(offset + fourBytes, twoBytes)) * MAX_LENGTH;
12554d6c458bSopenharmony_ci  }
12564d6c458bSopenharmony_ci
12574d6c458bSopenharmony_ci  private readUInt40LE(offset: number = 0): number {
12584d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fiveBytes);
12594d6c458bSopenharmony_ci    return this.calculationLE(offset, fiveBytes);
12604d6c458bSopenharmony_ci  }
12614d6c458bSopenharmony_ci
12624d6c458bSopenharmony_ci  private readUInt24LE(offset: number = 0): number {
12634d6c458bSopenharmony_ci    this.checkOffsetRange(offset, threeBytes);
12644d6c458bSopenharmony_ci    return this.calculationLE(offset, threeBytes);
12654d6c458bSopenharmony_ci  }
12664d6c458bSopenharmony_ci
12674d6c458bSopenharmony_ci  writeUIntBE(value: number, offset: number, byteLength: number): number | undefined {
12684d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
12694d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
12704d6c458bSopenharmony_ci    typeErrorCheck(byteLength, ['number'], 'byteLength');
12714d6c458bSopenharmony_ci    return this.writeData(value, offset, byteLength, Style.uintBE);
12724d6c458bSopenharmony_ci  }
12734d6c458bSopenharmony_ci
12744d6c458bSopenharmony_ci  readUIntBE(offset: number, byteLength: number): number | undefined {
12754d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
12764d6c458bSopenharmony_ci    typeErrorCheck(byteLength, ['number'], 'byteLength');
12774d6c458bSopenharmony_ci    return this.readData(offset, byteLength, Style.uintBE);
12784d6c458bSopenharmony_ci  }
12794d6c458bSopenharmony_ci
12804d6c458bSopenharmony_ci  private readUInt48BE(offset: number = 0): number {
12814d6c458bSopenharmony_ci    this.checkOffsetRange(offset, sixBytes);
12824d6c458bSopenharmony_ci    return (this.calculationBE(offset, twoBytes)) * MAX_LENGTH + this.calculationBE(offset + twoBytes, fourBytes);
12834d6c458bSopenharmony_ci  }
12844d6c458bSopenharmony_ci
12854d6c458bSopenharmony_ci  private readUInt40BE(offset: number = 0): number {
12864d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fiveBytes);
12874d6c458bSopenharmony_ci    return this.calculationBE(offset, fiveBytes);
12884d6c458bSopenharmony_ci  }
12894d6c458bSopenharmony_ci
12904d6c458bSopenharmony_ci  private readUInt24BE(offset: number = 0): number {
12914d6c458bSopenharmony_ci    this.checkOffsetRange(offset, threeBytes);
12924d6c458bSopenharmony_ci    return this.calculationBE(offset, threeBytes);
12934d6c458bSopenharmony_ci  }
12944d6c458bSopenharmony_ci
12954d6c458bSopenharmony_ci  writeInt32BE(value: number, offset: number = 0): number {
12964d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
12974d6c458bSopenharmony_ci    if (offset === null) {
12984d6c458bSopenharmony_ci      offset = 0;
12994d6c458bSopenharmony_ci    }
13004d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
13014d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
13024d6c458bSopenharmony_ci    // 2 : 31 : The range of 32-bit Int value is from negative the 31st power of 2 to the 31st power of 2 minus 1
13034d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', - (Math.pow(twoBytes, 31)), (Math.pow(twoBytes, 31) - 1));
13044d6c458bSopenharmony_ci
13054d6c458bSopenharmony_ci    value = +value;
13064d6c458bSopenharmony_ci    this[bufferSymbol].writeInt32BE(value, offset);
13074d6c458bSopenharmony_ci    return offset + fourBytes;
13084d6c458bSopenharmony_ci  }
13094d6c458bSopenharmony_ci
13104d6c458bSopenharmony_ci  private checkOffsetRange(offset: number, size: number): void {
13114d6c458bSopenharmony_ci    rangeErrorCheck(offset, 'offset', 0, this.length - size);
13124d6c458bSopenharmony_ci  }
13134d6c458bSopenharmony_ci
13144d6c458bSopenharmony_ci  readInt32BE(offset: number = 0): number {
13154d6c458bSopenharmony_ci    if (offset === null) {
13164d6c458bSopenharmony_ci      offset = 0;
13174d6c458bSopenharmony_ci    }
13184d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
13194d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
13204d6c458bSopenharmony_ci    return this[bufferSymbol].readInt32BE(offset);
13214d6c458bSopenharmony_ci  }
13224d6c458bSopenharmony_ci
13234d6c458bSopenharmony_ci  writeInt32LE(value: number, offset: number = 0): number {
13244d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
13254d6c458bSopenharmony_ci    if (offset === null) {
13264d6c458bSopenharmony_ci      offset = 0;
13274d6c458bSopenharmony_ci    }
13284d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
13294d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
13304d6c458bSopenharmony_ci    // 2 : 31 : The range of 32-bit Int value is from negative the 31st power of 2 to the 31st power of 2 minus 1
13314d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', - (Math.pow(twoBytes, 31)), (Math.pow(twoBytes, 31) - 1));
13324d6c458bSopenharmony_ci
13334d6c458bSopenharmony_ci    value = +value;
13344d6c458bSopenharmony_ci    this[bufferSymbol].writeInt32LE(value, offset);
13354d6c458bSopenharmony_ci    return offset + fourBytes;
13364d6c458bSopenharmony_ci  }
13374d6c458bSopenharmony_ci
13384d6c458bSopenharmony_ci  readInt32LE(offset: number = 0): number {
13394d6c458bSopenharmony_ci    if (offset === null) {
13404d6c458bSopenharmony_ci      offset = 0;
13414d6c458bSopenharmony_ci    }
13424d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
13434d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
13444d6c458bSopenharmony_ci    return this[bufferSymbol].readInt32LE(offset);
13454d6c458bSopenharmony_ci  }
13464d6c458bSopenharmony_ci
13474d6c458bSopenharmony_ci  writeUInt32BE(value: number, offset: number = 0): number {
13484d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
13494d6c458bSopenharmony_ci    if (offset === null) {
13504d6c458bSopenharmony_ci      offset = 0;
13514d6c458bSopenharmony_ci    }
13524d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
13534d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
13544d6c458bSopenharmony_ci    // 2 : 32 : The range of 32-bit UInt value is from zero to the 32st power of 2 minus 1
13554d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, (MAX_LENGTH - 1));
13564d6c458bSopenharmony_ci    value = +value;
13574d6c458bSopenharmony_ci    this[bufferSymbol].writeUInt32BE(value, offset);
13584d6c458bSopenharmony_ci    return offset + fourBytes;
13594d6c458bSopenharmony_ci  }
13604d6c458bSopenharmony_ci
13614d6c458bSopenharmony_ci  readUInt32BE(offset: number = 0): number {
13624d6c458bSopenharmony_ci    if (offset === null) {
13634d6c458bSopenharmony_ci      offset = 0;
13644d6c458bSopenharmony_ci    }
13654d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
13664d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
13674d6c458bSopenharmony_ci    return this[bufferSymbol].readUInt32BE(offset);
13684d6c458bSopenharmony_ci  }
13694d6c458bSopenharmony_ci
13704d6c458bSopenharmony_ci  writeUInt32LE(value: number, offset: number = 0): number {
13714d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
13724d6c458bSopenharmony_ci    if (offset === null) {
13734d6c458bSopenharmony_ci      offset = 0;
13744d6c458bSopenharmony_ci    }
13754d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
13764d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
13774d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, (MAX_LENGTH - 1));
13784d6c458bSopenharmony_ci    value = +value;
13794d6c458bSopenharmony_ci    this[bufferSymbol].writeUInt32LE(value, offset);
13804d6c458bSopenharmony_ci    return offset + fourBytes;
13814d6c458bSopenharmony_ci  }
13824d6c458bSopenharmony_ci
13834d6c458bSopenharmony_ci  readUInt32LE(offset: number = 0): number {
13844d6c458bSopenharmony_ci    if (offset === null) {
13854d6c458bSopenharmony_ci      offset = 0;
13864d6c458bSopenharmony_ci    }
13874d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
13884d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
13894d6c458bSopenharmony_ci    return this[bufferSymbol].readUInt32LE(offset);
13904d6c458bSopenharmony_ci  }
13914d6c458bSopenharmony_ci
13924d6c458bSopenharmony_ci  writeDoubleBE(value: number, offset: number = 0): number {
13934d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
13944d6c458bSopenharmony_ci    if (offset === null) {
13954d6c458bSopenharmony_ci      offset = 0;
13964d6c458bSopenharmony_ci    }
13974d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
13984d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
13994d6c458bSopenharmony_ci
14004d6c458bSopenharmony_ci    value = +value;
14014d6c458bSopenharmony_ci    float64Array[0] = value;
14024d6c458bSopenharmony_ci    let i: number = 7; // 7 is uInt8Float64Array->maxIndex
14034d6c458bSopenharmony_ci    while (i >= 0) {
14044d6c458bSopenharmony_ci      this[offset++] = uInt8Float64Array[i--];
14054d6c458bSopenharmony_ci    }
14064d6c458bSopenharmony_ci    return offset;
14074d6c458bSopenharmony_ci  }
14084d6c458bSopenharmony_ci
14094d6c458bSopenharmony_ci  readDoubleBE(offset: number = 0): number {
14104d6c458bSopenharmony_ci    if (offset === null) {
14114d6c458bSopenharmony_ci      offset = 0;
14124d6c458bSopenharmony_ci    }
14134d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
14144d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
14154d6c458bSopenharmony_ci
14164d6c458bSopenharmony_ci    let i: number = 7; // 7 is uInt8Float64Array->maxIndex
14174d6c458bSopenharmony_ci    while (i >= 0) {
14184d6c458bSopenharmony_ci      uInt8Float64Array[i--] = this[offset++];
14194d6c458bSopenharmony_ci    }
14204d6c458bSopenharmony_ci    return float64Array[0];
14214d6c458bSopenharmony_ci  }
14224d6c458bSopenharmony_ci
14234d6c458bSopenharmony_ci  writeDoubleLE(value: number, offset: number = 0): number {
14244d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
14254d6c458bSopenharmony_ci    if (offset === null) {
14264d6c458bSopenharmony_ci      offset = 0;
14274d6c458bSopenharmony_ci    }
14284d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
14294d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
14304d6c458bSopenharmony_ci
14314d6c458bSopenharmony_ci    value = +value;
14324d6c458bSopenharmony_ci    float64Array[0] = value;
14334d6c458bSopenharmony_ci    let i: number = 0;
14344d6c458bSopenharmony_ci    while (i <= 7) { // 7 is uInt8Float64Array->maxIndex
14354d6c458bSopenharmony_ci      this[offset++] = uInt8Float64Array[i++];
14364d6c458bSopenharmony_ci    }
14374d6c458bSopenharmony_ci    return offset;
14384d6c458bSopenharmony_ci  }
14394d6c458bSopenharmony_ci
14404d6c458bSopenharmony_ci  readDoubleLE(offset: number = 0): number {
14414d6c458bSopenharmony_ci    if (offset === null) {
14424d6c458bSopenharmony_ci      offset = 0;
14434d6c458bSopenharmony_ci    }
14444d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
14454d6c458bSopenharmony_ci    this.checkOffsetRange(offset, eightBytes);
14464d6c458bSopenharmony_ci
14474d6c458bSopenharmony_ci    let i: number = 0;
14484d6c458bSopenharmony_ci    while (i <= 7) { // 7 is uInt8Float64Array->maxIndex
14494d6c458bSopenharmony_ci      uInt8Float64Array[i++] = this[offset++];
14504d6c458bSopenharmony_ci    }
14514d6c458bSopenharmony_ci    return float64Array[0];
14524d6c458bSopenharmony_ci  }
14534d6c458bSopenharmony_ci
14544d6c458bSopenharmony_ci  writeFloatBE(value: number, offset: number = 0): number {
14554d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
14564d6c458bSopenharmony_ci    if (offset === null) {
14574d6c458bSopenharmony_ci      offset = 0;
14584d6c458bSopenharmony_ci    }
14594d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
14604d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
14614d6c458bSopenharmony_ci
14624d6c458bSopenharmony_ci    value = +value;
14634d6c458bSopenharmony_ci    float32Array[0] = value;
14644d6c458bSopenharmony_ci    let i: number = 3; // 3 is uInt8Float32Array->maxIndex
14654d6c458bSopenharmony_ci    while (i >= 0) {
14664d6c458bSopenharmony_ci      this[offset++] = uInt8Float32Array[i--];
14674d6c458bSopenharmony_ci    }
14684d6c458bSopenharmony_ci    return offset;
14694d6c458bSopenharmony_ci  }
14704d6c458bSopenharmony_ci
14714d6c458bSopenharmony_ci  readFloatBE(offset: number = 0): number {
14724d6c458bSopenharmony_ci    if (offset === null) {
14734d6c458bSopenharmony_ci      offset = 0;
14744d6c458bSopenharmony_ci    }
14754d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
14764d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
14774d6c458bSopenharmony_ci
14784d6c458bSopenharmony_ci    let i: number = 3; // 3 is uInt8Float32Array->maxIndex
14794d6c458bSopenharmony_ci    while (i >= 0) {
14804d6c458bSopenharmony_ci      uInt8Float32Array[i--] = this[offset++];
14814d6c458bSopenharmony_ci    }
14824d6c458bSopenharmony_ci    return float32Array[0];
14834d6c458bSopenharmony_ci  }
14844d6c458bSopenharmony_ci
14854d6c458bSopenharmony_ci  writeFloatLE(value: number, offset: number = 0): number {
14864d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
14874d6c458bSopenharmony_ci    if (offset === null) {
14884d6c458bSopenharmony_ci      offset = 0;
14894d6c458bSopenharmony_ci    }
14904d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
14914d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
14924d6c458bSopenharmony_ci
14934d6c458bSopenharmony_ci    value = +value;
14944d6c458bSopenharmony_ci    float32Array[0] = value;
14954d6c458bSopenharmony_ci    let i: number = 0;
14964d6c458bSopenharmony_ci    while (i <= 3) { // 3 is uInt8Float32Array->maxIndex
14974d6c458bSopenharmony_ci      this[offset++] = uInt8Float32Array[i++];
14984d6c458bSopenharmony_ci    }
14994d6c458bSopenharmony_ci    return offset;
15004d6c458bSopenharmony_ci  }
15014d6c458bSopenharmony_ci
15024d6c458bSopenharmony_ci  readFloatLE(offset: number): number {
15034d6c458bSopenharmony_ci    if (offset === undefined || offset === null) {
15044d6c458bSopenharmony_ci      offset = 0;
15054d6c458bSopenharmony_ci    }
15064d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
15074d6c458bSopenharmony_ci    this.checkOffsetRange(offset, fourBytes);
15084d6c458bSopenharmony_ci    let i: number = 0;
15094d6c458bSopenharmony_ci    while (i <= 3) { // 3 is uInt8Float32Array->maxIndex
15104d6c458bSopenharmony_ci      uInt8Float32Array[i++] = this[offset++];
15114d6c458bSopenharmony_ci    }
15124d6c458bSopenharmony_ci    return float32Array[0];
15134d6c458bSopenharmony_ci  }
15144d6c458bSopenharmony_ci
15154d6c458bSopenharmony_ci  writeUInt16BE(value: number, offset: number = 0): number {
15164d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
15174d6c458bSopenharmony_ci    if (offset === null) {
15184d6c458bSopenharmony_ci      offset = 0;
15194d6c458bSopenharmony_ci    }
15204d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
15214d6c458bSopenharmony_ci    this.checkOffsetRange(offset, twoBytes);
15224d6c458bSopenharmony_ci    // 2 : 16 : The range of 32-bit Int value is from zero to the 16st power of 2 minus 1
15234d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, Math.pow(twoBytes, 16) - 1);
15244d6c458bSopenharmony_ci    value = +value;
15254d6c458bSopenharmony_ci    this[offset++] = (value >>> eightBytes);
15264d6c458bSopenharmony_ci    this[offset++] = value;
15274d6c458bSopenharmony_ci    return offset;
15284d6c458bSopenharmony_ci  }
15294d6c458bSopenharmony_ci
15304d6c458bSopenharmony_ci  readUInt16BE(offset: number = 0): number {
15314d6c458bSopenharmony_ci    if (offset === null) {
15324d6c458bSopenharmony_ci      offset = 0;
15334d6c458bSopenharmony_ci    }
15344d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
15354d6c458bSopenharmony_ci    this.checkOffsetRange(offset, twoBytes);
15364d6c458bSopenharmony_ci    const first = this[offset];
15374d6c458bSopenharmony_ci    const last = this[offset + 1];
15384d6c458bSopenharmony_ci    return first * Math.pow(twoBytes, eightBytes) + last;
15394d6c458bSopenharmony_ci  }
15404d6c458bSopenharmony_ci
15414d6c458bSopenharmony_ci  writeUInt16LE(value: number, offset: number = 0): number {
15424d6c458bSopenharmony_ci    typeErrorCheck(value, ['number'], 'value');
15434d6c458bSopenharmony_ci    if (offset === null) {
15444d6c458bSopenharmony_ci      offset = 0;
15454d6c458bSopenharmony_ci    }
15464d6c458bSopenharmony_ci    typeErrorCheck(offset, ['number'], 'offset');
15474d6c458bSopenharmony_ci    this.checkOffsetRange(offset, twoBytes);
15484d6c458bSopenharmony_ci    // 2 : 16 : The range of 32-bit Int value is from zero to the 16st power of 2 minus 1
15494d6c458bSopenharmony_ci    rangeErrorCheck(value, 'value', 0, Math.pow(twoBytes, 16) - 1);
15504d6c458bSopenharmony_ci    value = +value;
15514d6c458bSopenharmony_ci    this[offset++] = value;
15524d6c458bSopenharmony_ci    this[offset++] = (value >>> eightBytes);
15534d6c458bSopenharmony_ci    return offset;
15544d6c458bSopenharmony_ci  }
15554d6c458bSopenharmony_ci
15564d6c458bSopenharmony_ci  compareInner(target: Buffer | Uint8Array, targetStart: number = 0, targetEnd: number = target.length,
15574d6c458bSopenharmony_ci    sourceStart: number = 0, sourceEnd: number = this.length): number {
15584d6c458bSopenharmony_ci      let length1: number = sourceEnd - sourceStart;
15594d6c458bSopenharmony_ci      let length2: number = targetEnd - targetStart;
15604d6c458bSopenharmony_ci      let length: number = length1 > length2 ? length2 : length1;
15614d6c458bSopenharmony_ci      if (target instanceof Buffer) {
15624d6c458bSopenharmony_ci        let val = this[bufferSymbol].compare(target[bufferSymbol], targetStart, sourceStart, length);
15634d6c458bSopenharmony_ci        if (val === 0) {
15644d6c458bSopenharmony_ci          if (length1 === length2) {
15654d6c458bSopenharmony_ci            return 0;
15664d6c458bSopenharmony_ci          }
15674d6c458bSopenharmony_ci          return length1 < length2 ? -1 : 1;
15684d6c458bSopenharmony_ci        } else {
15694d6c458bSopenharmony_ci          return val < 0 ? 1 : -1;
15704d6c458bSopenharmony_ci        }
15714d6c458bSopenharmony_ci      } else {
15724d6c458bSopenharmony_ci        let bufData1 = this[bufferSymbol].getBufferData();
15734d6c458bSopenharmony_ci        for (let i = 0; i < length; i++) {
15744d6c458bSopenharmony_ci          let value1 = +bufData1[i + sourceStart];
15754d6c458bSopenharmony_ci          let value2 = +target[i + targetStart];
15764d6c458bSopenharmony_ci          if (value1 === value2) {
15774d6c458bSopenharmony_ci            continue;
15784d6c458bSopenharmony_ci          }
15794d6c458bSopenharmony_ci          return value1 < value2 ? -1 : 1;
15804d6c458bSopenharmony_ci        }
15814d6c458bSopenharmony_ci        if (length1 === length2) {
15824d6c458bSopenharmony_ci          return 0;
15834d6c458bSopenharmony_ci        }
15844d6c458bSopenharmony_ci        return length1 < length2 ? -1 : 1;
15854d6c458bSopenharmony_ci      }
15864d6c458bSopenharmony_ci    }
15874d6c458bSopenharmony_ci
15884d6c458bSopenharmony_ci  compare(target: Buffer | Uint8Array, targetStart: number = 0, targetEnd: number = target.length,
15894d6c458bSopenharmony_ci    sourceStart: number = 0, sourceEnd: number = this.length): number {
15904d6c458bSopenharmony_ci    if (targetStart === null) {
15914d6c458bSopenharmony_ci      targetStart = 0;
15924d6c458bSopenharmony_ci    }
15934d6c458bSopenharmony_ci    if (targetEnd === null) {
15944d6c458bSopenharmony_ci      targetEnd = target.length;
15954d6c458bSopenharmony_ci    }
15964d6c458bSopenharmony_ci    if (sourceStart === null) {
15974d6c458bSopenharmony_ci      sourceStart = 0;
15984d6c458bSopenharmony_ci    }
15994d6c458bSopenharmony_ci    if (sourceEnd === null) {
16004d6c458bSopenharmony_ci      sourceEnd = this.length;
16014d6c458bSopenharmony_ci    }
16024d6c458bSopenharmony_ci    typeErrorCheck(target, ['Buffer', 'Uint8Array'], 'target');
16034d6c458bSopenharmony_ci    typeErrorCheck(targetStart, ['number'], 'targetStart');
16044d6c458bSopenharmony_ci    typeErrorCheck(targetEnd, ['number'], 'targetEnd');
16054d6c458bSopenharmony_ci    typeErrorCheck(sourceStart, ['number'], 'sourceStart');
16064d6c458bSopenharmony_ci    typeErrorCheck(sourceEnd, ['number'], 'sourceEnd');
16074d6c458bSopenharmony_ci    rangeErrorCheck(targetStart, 'targetStart', 0, UINT32MAX);
16084d6c458bSopenharmony_ci    rangeErrorCheck(sourceStart, 'sourceStart', 0, UINT32MAX);
16094d6c458bSopenharmony_ci    rangeErrorCheck(targetEnd, 'targetEnd', 0, target.length);
16104d6c458bSopenharmony_ci    rangeErrorCheck(sourceEnd, 'sourceEnd', 0, this.length);
16114d6c458bSopenharmony_ci    if (sourceStart >= sourceEnd) {
16124d6c458bSopenharmony_ci      return (targetStart >= targetEnd ? 0 : -1);
16134d6c458bSopenharmony_ci    }
16144d6c458bSopenharmony_ci    if (targetStart >= targetEnd) {
16154d6c458bSopenharmony_ci      return 1;
16164d6c458bSopenharmony_ci    }
16174d6c458bSopenharmony_ci    return this.compareInner(target, targetStart, targetEnd, sourceStart, sourceEnd);
16184d6c458bSopenharmony_ci  }
16194d6c458bSopenharmony_ci
16204d6c458bSopenharmony_ci  equals(otherBuffer: Uint8Array | Buffer): boolean {
16214d6c458bSopenharmony_ci    typeErrorCheck(otherBuffer, ['Buffer', 'Uint8Array'], 'otherBuffer');
16224d6c458bSopenharmony_ci    let res = this.compare(otherBuffer, 0, otherBuffer.length, 0, this.length);
16234d6c458bSopenharmony_ci    return res === 0 ? true : false;
16244d6c458bSopenharmony_ci  }
16254d6c458bSopenharmony_ci
16264d6c458bSopenharmony_ci  subarray(start: number = 0, end: number = this.length): Buffer {
16274d6c458bSopenharmony_ci    let newBuf: Buffer = new Buffer(0);
16284d6c458bSopenharmony_ci    start = isNaN(start) ? 0 : Number(start);
16294d6c458bSopenharmony_ci    end = isNaN(end) ? 0 : Number(end);
16304d6c458bSopenharmony_ci    end = (end > this.length) ? this.length : end;
16314d6c458bSopenharmony_ci    if (start < 0 || end < 0 || end <= start) {
16324d6c458bSopenharmony_ci      return newBuf;
16334d6c458bSopenharmony_ci    }
16344d6c458bSopenharmony_ci    newBuf[bufferSymbol].subBuffer(this[bufferSymbol], start, end);
16354d6c458bSopenharmony_ci    newBuf[lengthSymbol] = (end - start);
16364d6c458bSopenharmony_ci    return newBuf;
16374d6c458bSopenharmony_ci  }
16384d6c458bSopenharmony_ci
16394d6c458bSopenharmony_ci  copy(target: Buffer | Uint8Array, targetStart: number = 0, sourceStart: number = 0,
16404d6c458bSopenharmony_ci    sourceEnd: number = this.length): number {
16414d6c458bSopenharmony_ci    typeErrorCheck(target, ['Buffer', 'Uint8Array'], 'target');
16424d6c458bSopenharmony_ci    targetStart = isNaN(targetStart) ? 0 : Number(targetStart);
16434d6c458bSopenharmony_ci    sourceStart = isNaN(sourceStart) ? 0 : Number(sourceStart);
16444d6c458bSopenharmony_ci    sourceEnd = isNaN(sourceEnd) ? this.length : Number(sourceEnd);
16454d6c458bSopenharmony_ci    rangeLeftErrorCheck(targetStart, 'targetStart', 0);
16464d6c458bSopenharmony_ci    rangeLeftErrorCheck(sourceStart, 'sourceStart', 0);
16474d6c458bSopenharmony_ci    rangeLeftErrorCheck(sourceEnd, 'sourceEnd', 0);
16484d6c458bSopenharmony_ci    if (targetStart >= target.length) {
16494d6c458bSopenharmony_ci      return 0;
16504d6c458bSopenharmony_ci    }
16514d6c458bSopenharmony_ci    if (sourceEnd <= sourceStart || sourceStart >= this.length) {
16524d6c458bSopenharmony_ci      return 0;
16534d6c458bSopenharmony_ci    }
16544d6c458bSopenharmony_ci    if (target instanceof Buffer) {
16554d6c458bSopenharmony_ci      sourceEnd = sourceEnd > this.length ? this.length : sourceEnd;
16564d6c458bSopenharmony_ci      return this[bufferSymbol].copy(target[bufferSymbol], targetStart, sourceStart, sourceEnd);
16574d6c458bSopenharmony_ci    }
16584d6c458bSopenharmony_ci    if (sourceEnd - sourceStart > target.length - targetStart) {
16594d6c458bSopenharmony_ci        sourceEnd = target.length - targetStart + sourceStart;
16604d6c458bSopenharmony_ci    }
16614d6c458bSopenharmony_ci    let sLength = sourceEnd - sourceStart;
16624d6c458bSopenharmony_ci    let res = sLength > this.length - sourceStart ? this.length - sourceStart : sLength;
16634d6c458bSopenharmony_ci    for (let i = 0; i < res; i++) {
16644d6c458bSopenharmony_ci      target[targetStart++] = this[sourceStart++];
16654d6c458bSopenharmony_ci    }
16664d6c458bSopenharmony_ci    return res;
16674d6c458bSopenharmony_ci  }
16684d6c458bSopenharmony_ci
16694d6c458bSopenharmony_ci  toString(encoding: string = 'utf8', start: number = 0, end: number = this.length): string {
16704d6c458bSopenharmony_ci    if (encoding === null) {
16714d6c458bSopenharmony_ci      encoding = 'utf8';
16724d6c458bSopenharmony_ci    }
16734d6c458bSopenharmony_ci    let encodObj = getEncodingByType(encoding);
16744d6c458bSopenharmony_ci    if (!encodObj) {
16754d6c458bSopenharmony_ci      throw typeErrorForEncoding(encoding, 'encoding');
16764d6c458bSopenharmony_ci    }
16774d6c458bSopenharmony_ci    start = isNaN(start) ? 0 : (Number(start) < 0 ? 0 : Number(start));
16784d6c458bSopenharmony_ci    end = isNaN(end) ? 0 : Number(end);
16794d6c458bSopenharmony_ci    let bufLength = this.length;
16804d6c458bSopenharmony_ci    if (start >= bufLength || start > end) {
16814d6c458bSopenharmony_ci      return '';
16824d6c458bSopenharmony_ci    }
16834d6c458bSopenharmony_ci    end = end > bufLength ? bufLength : end;
16844d6c458bSopenharmony_ci    return encodObj.toString(this, start, end);
16854d6c458bSopenharmony_ci  }
16864d6c458bSopenharmony_ci
16874d6c458bSopenharmony_ci  toJSON(): Object {
16884d6c458bSopenharmony_ci    if (this.length <= 0) {
16894d6c458bSopenharmony_ci      return { type: 'Buffer', data: [] };
16904d6c458bSopenharmony_ci    }
16914d6c458bSopenharmony_ci    let data = this[bufferSymbol].getBufferData();
16924d6c458bSopenharmony_ci    return { type: 'Buffer', data };
16934d6c458bSopenharmony_ci  }
16944d6c458bSopenharmony_ci
16954d6c458bSopenharmony_ci  indexOf(value: string | number | Buffer | Uint8Array, byteOffset: number = 0, encoding: string = 'utf8'): number {
16964d6c458bSopenharmony_ci    typeErrorCheck(value, ['string', 'number', 'Buffer', 'Uint8Array'], 'value');
16974d6c458bSopenharmony_ci    if (typeof value === 'string') {
16984d6c458bSopenharmony_ci      const length = this[lengthSymbol];
16994d6c458bSopenharmony_ci      if (typeof byteOffset === 'string') {
17004d6c458bSopenharmony_ci        encoding = byteOffset;
17014d6c458bSopenharmony_ci      }
17024d6c458bSopenharmony_ci      if (typeof byteOffset !== 'number') {
17034d6c458bSopenharmony_ci        byteOffset = 0;
17044d6c458bSopenharmony_ci      }
17054d6c458bSopenharmony_ci      if (encoding === null) {
17064d6c458bSopenharmony_ci        encoding = 'utf8';
17074d6c458bSopenharmony_ci      }
17084d6c458bSopenharmony_ci      encoding = encodingTypeErrorCheck(encoding);
17094d6c458bSopenharmony_ci      if (byteOffset > length) {
17104d6c458bSopenharmony_ci        return -1;
17114d6c458bSopenharmony_ci      }
17124d6c458bSopenharmony_ci      if (byteOffset < 0) {
17134d6c458bSopenharmony_ci        let offsetResult = Math.abs(byteOffset);
17144d6c458bSopenharmony_ci        if (offsetResult > length) {
17154d6c458bSopenharmony_ci          byteOffset = 0;
17164d6c458bSopenharmony_ci        } else {
17174d6c458bSopenharmony_ci          byteOffset = length - offsetResult;
17184d6c458bSopenharmony_ci        }
17194d6c458bSopenharmony_ci      }
17204d6c458bSopenharmony_ci      return this[bufferSymbol].indexOf(value, byteOffset, encoding, false);
17214d6c458bSopenharmony_ci    } else if (typeof value === 'number') {
17224d6c458bSopenharmony_ci      value = +value;
17234d6c458bSopenharmony_ci      if (value < 0 || value > utils.eightBits) {
17244d6c458bSopenharmony_ci        return -1;
17254d6c458bSopenharmony_ci      }
17264d6c458bSopenharmony_ci      let data = this[bufferSymbol].getBufferData();
17274d6c458bSopenharmony_ci      return data.indexOf(value, byteOffset);
17284d6c458bSopenharmony_ci    } else {
17294d6c458bSopenharmony_ci      let sourceData = this[bufferSymbol].getBufferData();
17304d6c458bSopenharmony_ci      if (value instanceof Buffer) {
17314d6c458bSopenharmony_ci        let targetData = value[bufferSymbol].getBufferData();
17324d6c458bSopenharmony_ci        return sourceData.join(',').indexOf(targetData.join(','), byteOffset);
17334d6c458bSopenharmony_ci      }
17344d6c458bSopenharmony_ci      return sourceData.join(',').indexOf(value.join(','), byteOffset);
17354d6c458bSopenharmony_ci    }
17364d6c458bSopenharmony_ci  }
17374d6c458bSopenharmony_ci
17384d6c458bSopenharmony_ci  lastIndexOf(value: string | number | Buffer | Uint8Array, byteOffset: number = this.length,
17394d6c458bSopenharmony_ci    encoding: string = 'utf8'): number {
17404d6c458bSopenharmony_ci    typeErrorCheck(value, ['string', 'number', 'Buffer', 'Uint8Array'], 'value');
17414d6c458bSopenharmony_ci    if (typeof value === 'string') {
17424d6c458bSopenharmony_ci      if (typeof byteOffset === null) {
17434d6c458bSopenharmony_ci        byteOffset = 0;
17444d6c458bSopenharmony_ci      }
17454d6c458bSopenharmony_ci      if (encoding === null) {
17464d6c458bSopenharmony_ci        encoding = 'utf8';
17474d6c458bSopenharmony_ci      }
17484d6c458bSopenharmony_ci      encoding = encodingTypeErrorCheck(encoding);
17494d6c458bSopenharmony_ci      let str = this.toString(encoding);
17504d6c458bSopenharmony_ci      byteOffset = byteOffset < 0 ? str.length + byteOffset : byteOffset;
17514d6c458bSopenharmony_ci      return str.lastIndexOf(value, byteOffset);
17524d6c458bSopenharmony_ci    } else if (typeof value === 'number') {
17534d6c458bSopenharmony_ci      value = +value;
17544d6c458bSopenharmony_ci      if (value < 0 || value > utils.eightBits) {
17554d6c458bSopenharmony_ci        return -1;
17564d6c458bSopenharmony_ci      }
17574d6c458bSopenharmony_ci      let data = this[bufferSymbol].getBufferData();
17584d6c458bSopenharmony_ci      return data.lastIndexOf(value, byteOffset);
17594d6c458bSopenharmony_ci    } else {
17604d6c458bSopenharmony_ci      let sourceData = this[bufferSymbol].getBufferData();
17614d6c458bSopenharmony_ci      if (value instanceof Buffer) {
17624d6c458bSopenharmony_ci        let targetData = value[bufferSymbol].getBufferData();
17634d6c458bSopenharmony_ci        return sourceData.join(',').lastIndexOf(targetData.join(','), byteOffset);
17644d6c458bSopenharmony_ci      }
17654d6c458bSopenharmony_ci      return sourceData.join(',').lastIndexOf(value.join(','), byteOffset);
17664d6c458bSopenharmony_ci    }
17674d6c458bSopenharmony_ci  }
17684d6c458bSopenharmony_ci
17694d6c458bSopenharmony_ci  includes(value: string | number | Buffer | Uint8Array, byteOffset: number = 0, encoding: string = 'utf8'): boolean {
17704d6c458bSopenharmony_ci    typeErrorCheck(value, ['string', 'number', 'Buffer', 'Uint8Array'], 'value');
17714d6c458bSopenharmony_ci    if (encoding === null) {
17724d6c458bSopenharmony_ci      encoding = 'utf8';
17734d6c458bSopenharmony_ci    }
17744d6c458bSopenharmony_ci    encoding = encodingTypeErrorCheck(encoding);
17754d6c458bSopenharmony_ci    if (typeof value === 'string') {
17764d6c458bSopenharmony_ci      const length = this[lengthSymbol];
17774d6c458bSopenharmony_ci      if (byteOffset > length) {
17784d6c458bSopenharmony_ci        return false;
17794d6c458bSopenharmony_ci      }
17804d6c458bSopenharmony_ci      if (byteOffset < 0) {
17814d6c458bSopenharmony_ci        let byteOffsetAbs: number = Math.abs(byteOffset);
17824d6c458bSopenharmony_ci        if (byteOffsetAbs <= length) {
17834d6c458bSopenharmony_ci          byteOffset = length - byteOffsetAbs;
17844d6c458bSopenharmony_ci        } else {
17854d6c458bSopenharmony_ci          byteOffset = 0;
17864d6c458bSopenharmony_ci        }
17874d6c458bSopenharmony_ci      }
17884d6c458bSopenharmony_ci    }
17894d6c458bSopenharmony_ci    return this.indexOf(value, byteOffset, encoding) !== -1;
17904d6c458bSopenharmony_ci  }
17914d6c458bSopenharmony_ci
17924d6c458bSopenharmony_ci  reverseBits(dealNum: number): Buffer {
17934d6c458bSopenharmony_ci    const len: number = this.length;
17944d6c458bSopenharmony_ci    const dealLen: number = dealNum;
17954d6c458bSopenharmony_ci    for (let i = 0; i < len / dealLen; i++) {
17964d6c458bSopenharmony_ci      let times: number = 0;
17974d6c458bSopenharmony_ci      let startIndex: number = dealLen * i;
17984d6c458bSopenharmony_ci      let endIndex: number = startIndex + dealLen - 1;
17994d6c458bSopenharmony_ci      while (times < dealLen / twoBytes) {
18004d6c458bSopenharmony_ci        let tmp = this[startIndex + times];
18014d6c458bSopenharmony_ci        this[startIndex + times] = this[endIndex - times];
18024d6c458bSopenharmony_ci        this[endIndex - times] = tmp;
18034d6c458bSopenharmony_ci        times++;
18044d6c458bSopenharmony_ci      }
18054d6c458bSopenharmony_ci    }
18064d6c458bSopenharmony_ci    return this;
18074d6c458bSopenharmony_ci  }
18084d6c458bSopenharmony_ci
18094d6c458bSopenharmony_ci  swap16(): Buffer {
18104d6c458bSopenharmony_ci    const len = this.length;
18114d6c458bSopenharmony_ci    const dealLen: number = twoBytes;
18124d6c458bSopenharmony_ci    if (len % dealLen !== 0) {
18134d6c458bSopenharmony_ci      throw bufferSizeError('16-bits');
18144d6c458bSopenharmony_ci    }
18154d6c458bSopenharmony_ci    return this.reverseBits(dealLen);
18164d6c458bSopenharmony_ci  }
18174d6c458bSopenharmony_ci
18184d6c458bSopenharmony_ci  swap32(): Buffer {
18194d6c458bSopenharmony_ci    const len = this.length;
18204d6c458bSopenharmony_ci    const dealLen: number = 4; // Process every 4 bits
18214d6c458bSopenharmony_ci    if (len % dealLen !== 0) {
18224d6c458bSopenharmony_ci      throw bufferSizeError('32-bits');
18234d6c458bSopenharmony_ci    }
18244d6c458bSopenharmony_ci    return this.reverseBits(dealLen);
18254d6c458bSopenharmony_ci  }
18264d6c458bSopenharmony_ci
18274d6c458bSopenharmony_ci  swap64(): Buffer {
18284d6c458bSopenharmony_ci    const len = this.length;
18294d6c458bSopenharmony_ci    const dealLen: number = eightBytes;
18304d6c458bSopenharmony_ci    if (len % dealLen !== 0) {
18314d6c458bSopenharmony_ci      throw bufferSizeError('64-bits');
18324d6c458bSopenharmony_ci    }
18334d6c458bSopenharmony_ci    return this.reverseBits(dealLen);
18344d6c458bSopenharmony_ci  }
18354d6c458bSopenharmony_ci
18364d6c458bSopenharmony_ci  keys(): IterableIterator<number> {
18374d6c458bSopenharmony_ci    return this[bufferSymbol].getBufferData().keys();
18384d6c458bSopenharmony_ci  }
18394d6c458bSopenharmony_ci
18404d6c458bSopenharmony_ci  values(): IterableIterator<number> {
18414d6c458bSopenharmony_ci    return this[bufferSymbol].getBufferData().values();
18424d6c458bSopenharmony_ci  }
18434d6c458bSopenharmony_ci
18444d6c458bSopenharmony_ci  entries(): IterableIterator<[number, number]> {
18454d6c458bSopenharmony_ci    return this[bufferSymbol].getBufferData().entries();
18464d6c458bSopenharmony_ci  }
18474d6c458bSopenharmony_ci
18484d6c458bSopenharmony_ci  [Symbol.iterator](): IterableIterator<[number, number]> {
18494d6c458bSopenharmony_ci    return this[bufferSymbol].getBufferData().entries();
18504d6c458bSopenharmony_ci  }
18514d6c458bSopenharmony_ci}
18524d6c458bSopenharmony_ci
18534d6c458bSopenharmony_cifunction typeError(param: unknown, paramName: string, excludedTypes: string[]): BusinessError {
18544d6c458bSopenharmony_ci  let msg = new ErrorMessage(errorMap.typeError, paramName).setTypeInfo(excludedTypes, param).getString();
18554d6c458bSopenharmony_ci  return new BusinessError(msg, errorMap.typeError);
18564d6c458bSopenharmony_ci}
18574d6c458bSopenharmony_ci
18584d6c458bSopenharmony_cifunction typeErrorForEncoding(param: unknown, paramName: string): BusinessError {
18594d6c458bSopenharmony_ci  let msg = new ErrorMessage(errorMap.typeError, paramName).setEncodingTypeInfo(['BufferEncoding'], param).getString();
18604d6c458bSopenharmony_ci  return new BusinessError(msg, errorMap.typeError);
18614d6c458bSopenharmony_ci}
18624d6c458bSopenharmony_ci
18634d6c458bSopenharmony_cifunction typeErrorForProperty(typeName: string): BusinessError {
18644d6c458bSopenharmony_ci  let msg = new ErrorMessage(errorMap.typeErrorForProperty).setProperty(typeName).getString();
18654d6c458bSopenharmony_ci  return new BusinessError(msg, errorMap.typeErrorForProperty);
18664d6c458bSopenharmony_ci}
18674d6c458bSopenharmony_ci
18684d6c458bSopenharmony_cifunction typeErrorForSize(param: unknown, paramName: string, excludedTypes: string[]): BusinessError {
18694d6c458bSopenharmony_ci  let msg = new ErrorMessage(errorMap.typeError, paramName).setSizeTypeInfo(excludedTypes, param).getString();
18704d6c458bSopenharmony_ci  return new BusinessError(msg, errorMap.typeError);
18714d6c458bSopenharmony_ci}
18724d6c458bSopenharmony_ci
18734d6c458bSopenharmony_cifunction rangeError(paramName: string, rangeLeft: string | bigint | number, rangeRight: string | bigint | number,
18744d6c458bSopenharmony_ci  receivedValue: number | bigint): BusinessError {
18754d6c458bSopenharmony_ci  let msg =
18764d6c458bSopenharmony_ci    new ErrorMessage(errorMap.rangeError, paramName).setRangeInfo(rangeLeft, rangeRight, receivedValue).getString();
18774d6c458bSopenharmony_ci  return new BusinessError(msg, errorMap.rangeError);
18784d6c458bSopenharmony_ci}
18794d6c458bSopenharmony_ci
18804d6c458bSopenharmony_cifunction rangeLeftError(paramName: string, rangeLeft: number, receivedValue: number): BusinessError {
18814d6c458bSopenharmony_ci  let msg = new ErrorMessage(errorMap.rangeError, paramName).setRangeLeftInfo(rangeLeft, receivedValue).getString();
18824d6c458bSopenharmony_ci  return new BusinessError(msg, errorMap.rangeError);
18834d6c458bSopenharmony_ci}
18844d6c458bSopenharmony_ci
18854d6c458bSopenharmony_cifunction bufferSizeError(size: string): BusinessError {
18864d6c458bSopenharmony_ci  let msg = new ErrorMessage(errorMap.bufferSizeError).setSizeInfo(size).getString();
18874d6c458bSopenharmony_ci  return new BusinessError(msg, errorMap.bufferSizeError);
18884d6c458bSopenharmony_ci}
18894d6c458bSopenharmony_ci
18904d6c458bSopenharmony_cifunction typeErrorCheck(param: unknown, types: string[], paramName: string): void {
18914d6c458bSopenharmony_ci  let typeName = getTypeName(param);
18924d6c458bSopenharmony_ci  if (!types.includes(typeName)) {
18934d6c458bSopenharmony_ci    throw typeError(param, paramName, types);
18944d6c458bSopenharmony_ci  }
18954d6c458bSopenharmony_ci}
18964d6c458bSopenharmony_ci
18974d6c458bSopenharmony_cifunction sizeErrorCheck(param: unknown, paramName: string, types: string[],
18984d6c458bSopenharmony_ci  rangeLeft: number, rangeRight: number): void {
18994d6c458bSopenharmony_ci  let typeName = getTypeName(param);
19004d6c458bSopenharmony_ci  if (!types.includes(typeName)) {
19014d6c458bSopenharmony_ci    throw typeErrorForSize(param, paramName, types);
19024d6c458bSopenharmony_ci  }
19034d6c458bSopenharmony_ci  if (Number(param) < rangeLeft || Number(param) > rangeRight) {
19044d6c458bSopenharmony_ci    let typeString = types.join(', ');
19054d6c458bSopenharmony_ci    typeString = typeString.replace(',', ' or');
19064d6c458bSopenharmony_ci    let msg = 'Parameter error. The type of "' + paramName + '" must be ' + typeString +
19074d6c458bSopenharmony_ci      ' and the value cannot be negative. Received value is: ' + Number(param).toString();
19084d6c458bSopenharmony_ci    throw new BusinessError(msg, errorMap.typeError);
19094d6c458bSopenharmony_ci  }
19104d6c458bSopenharmony_ci}
19114d6c458bSopenharmony_ci
19124d6c458bSopenharmony_cifunction encodingTypeErrorCheck(encoding: string): string {
19134d6c458bSopenharmony_ci  const normalizedEncoding = normalizeEncoding(encoding);
19144d6c458bSopenharmony_ci  if (normalizedEncoding === undefined) {
19154d6c458bSopenharmony_ci    throw typeErrorForEncoding(encoding, 'encoding');
19164d6c458bSopenharmony_ci  }
19174d6c458bSopenharmony_ci  return normalizedEncoding;
19184d6c458bSopenharmony_ci}
19194d6c458bSopenharmony_ci
19204d6c458bSopenharmony_cifunction rangeErrorCheck(param: number | bigint, paramName: string, rangeLeft: bigint | number,
19214d6c458bSopenharmony_ci  rangeRight: bigint | number, rangeLeftExpr: string = '', rangeRightExpr: string = ''): void {
19224d6c458bSopenharmony_ci  let left : bigint | number;
19234d6c458bSopenharmony_ci  let right : bigint | number;
19244d6c458bSopenharmony_ci  if (Number.isInteger(rangeLeft) && Number.isInteger(rangeRight)) {
19254d6c458bSopenharmony_ci    left= BigInt(rangeLeft);
19264d6c458bSopenharmony_ci    right = BigInt(rangeRight);
19274d6c458bSopenharmony_ci  } else {
19284d6c458bSopenharmony_ci    left = rangeLeft;
19294d6c458bSopenharmony_ci    right = rangeRight;
19304d6c458bSopenharmony_ci  }
19314d6c458bSopenharmony_ci  if (param < left || param > right) {
19324d6c458bSopenharmony_ci    throw rangeError(paramName, rangeLeftExpr === '' ? rangeLeft : rangeLeftExpr,
19334d6c458bSopenharmony_ci      rangeRightExpr === '' ? rangeRight : rangeRightExpr, param);
19344d6c458bSopenharmony_ci  }
19354d6c458bSopenharmony_ci}
19364d6c458bSopenharmony_ci
19374d6c458bSopenharmony_cifunction rangeLeftErrorCheck(param: number, paramName: string, rangeLeft: number): void {
19384d6c458bSopenharmony_ci  if (param < rangeLeft) {
19394d6c458bSopenharmony_ci    throw rangeLeftError(paramName, rangeLeft, param);
19404d6c458bSopenharmony_ci  }
19414d6c458bSopenharmony_ci}
19424d6c458bSopenharmony_ci
19434d6c458bSopenharmony_cifunction concat(list: Buffer[] | Uint8Array[], totalLength?: number): Buffer {
19444d6c458bSopenharmony_ci  typeErrorCheck(list, ['Array'], 'list');
19454d6c458bSopenharmony_ci  if (!(typeof totalLength === 'number' || typeof totalLength === 'undefined' || 'null')) {
19464d6c458bSopenharmony_ci    throw typeError(totalLength, 'totalLength', ['number']);
19474d6c458bSopenharmony_ci  }
19484d6c458bSopenharmony_ci  if (list.length === 0) {
19494d6c458bSopenharmony_ci    return new Buffer(0);
19504d6c458bSopenharmony_ci  }
19514d6c458bSopenharmony_ci  if (!totalLength) {
19524d6c458bSopenharmony_ci    totalLength = 0;
19534d6c458bSopenharmony_ci    for (let i = 0, len = list.length; i < len; i++) {
19544d6c458bSopenharmony_ci      let buf = list[i];
19554d6c458bSopenharmony_ci      if (buf instanceof Uint8Array || buf instanceof Buffer) {
19564d6c458bSopenharmony_ci        totalLength += list[i].length;
19574d6c458bSopenharmony_ci      }
19584d6c458bSopenharmony_ci    }
19594d6c458bSopenharmony_ci  }
19604d6c458bSopenharmony_ci
19614d6c458bSopenharmony_ci  rangeErrorCheck(totalLength, 'totalLength', 0, UINT32MAX);
19624d6c458bSopenharmony_ci
19634d6c458bSopenharmony_ci  let buffer = allocUninitializedFromPool(totalLength);
19644d6c458bSopenharmony_ci  let offset = 0;
19654d6c458bSopenharmony_ci  for (let i = 0, len = list.length; i < len; i++) {
19664d6c458bSopenharmony_ci    const buf = list[i];
19674d6c458bSopenharmony_ci    if (buf instanceof Uint8Array) {
19684d6c458bSopenharmony_ci      buf.forEach((val) => buffer[offset++] = val);
19694d6c458bSopenharmony_ci    } else if (buf instanceof Buffer) {
19704d6c458bSopenharmony_ci      buf.copy(buffer, offset);
19714d6c458bSopenharmony_ci      offset += buf.length;
19724d6c458bSopenharmony_ci    }
19734d6c458bSopenharmony_ci  }
19744d6c458bSopenharmony_ci  return buffer;
19754d6c458bSopenharmony_ci}
19764d6c458bSopenharmony_ci
19774d6c458bSopenharmony_cifunction alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer {
19784d6c458bSopenharmony_ci  sizeErrorCheck(size, 'size', ['number'], 0, MAX_LENGTH);
19794d6c458bSopenharmony_ci  const buf = new Buffer(size);
19804d6c458bSopenharmony_ci  buf.fill(0);
19814d6c458bSopenharmony_ci  if (arguments.length === twoBytes && fill !== undefined && fill !== 0) {
19824d6c458bSopenharmony_ci    buf.fill(fill);
19834d6c458bSopenharmony_ci  } else if (arguments.length === 3) { // 3 is array->maxIndex
19844d6c458bSopenharmony_ci    if (encoding === undefined || encoding === null) {
19854d6c458bSopenharmony_ci      encoding = 'utf-8';
19864d6c458bSopenharmony_ci    }
19874d6c458bSopenharmony_ci    typeErrorCheck(encoding, ['string'], 'encoding');
19884d6c458bSopenharmony_ci    if (fill !== undefined && fill !== 0) {
19894d6c458bSopenharmony_ci      buf.fill(fill, undefined, undefined, encoding);
19904d6c458bSopenharmony_ci    }
19914d6c458bSopenharmony_ci  }
19924d6c458bSopenharmony_ci  return buf;
19934d6c458bSopenharmony_ci}
19944d6c458bSopenharmony_ci
19954d6c458bSopenharmony_cifunction allocUninitializedFromPool(size: number): Buffer {
19964d6c458bSopenharmony_ci  sizeErrorCheck(size, 'size', ['number'], 0, MAX_LENGTH);
19974d6c458bSopenharmony_ci  if (!pool) {
19984d6c458bSopenharmony_ci    createPool();
19994d6c458bSopenharmony_ci  }
20004d6c458bSopenharmony_ci  if (size < (poolSize >>> 1)) {
20014d6c458bSopenharmony_ci    if (size > (poolSize - poolOffset)) {
20024d6c458bSopenharmony_ci      createPool();
20034d6c458bSopenharmony_ci    }
20044d6c458bSopenharmony_ci    const b = new Buffer(pool, poolOffset, size);
20054d6c458bSopenharmony_ci    poolOffset += size;
20064d6c458bSopenharmony_ci    alignPool();
20074d6c458bSopenharmony_ci    return b;
20084d6c458bSopenharmony_ci  }
20094d6c458bSopenharmony_ci  return new Buffer(size);
20104d6c458bSopenharmony_ci}
20114d6c458bSopenharmony_ci
20124d6c458bSopenharmony_cifunction allocUninitialized(size: number): Buffer {
20134d6c458bSopenharmony_ci  sizeErrorCheck(size, 'size', ['number'], 0, MAX_LENGTH);
20144d6c458bSopenharmony_ci  const buf = new Buffer(size);
20154d6c458bSopenharmony_ci  return buf;
20164d6c458bSopenharmony_ci}
20174d6c458bSopenharmony_ci
20184d6c458bSopenharmony_cifunction normalizeEncoding(enc: string): string | undefined {
20194d6c458bSopenharmony_ci  enc = enc.toLowerCase();
20204d6c458bSopenharmony_ci  if (bufferEncoding.includes(enc)) {
20214d6c458bSopenharmony_ci    if (enc === 'ucs2' || enc === 'ucs-2' || enc === 'utf-16le') {
20224d6c458bSopenharmony_ci      enc = 'utf16le';
20234d6c458bSopenharmony_ci    }
20244d6c458bSopenharmony_ci    if (enc === 'utf-8') {
20254d6c458bSopenharmony_ci      enc = 'utf8';
20264d6c458bSopenharmony_ci    }
20274d6c458bSopenharmony_ci    return enc;
20284d6c458bSopenharmony_ci  } else {
20294d6c458bSopenharmony_ci    return undefined;
20304d6c458bSopenharmony_ci  }
20314d6c458bSopenharmony_ci}
20324d6c458bSopenharmony_ci
20334d6c458bSopenharmony_cifunction from(value: Buffer | Uint8Array | ArrayBuffer | SharedArrayBuffer | string | object | Array<number>,
20344d6c458bSopenharmony_ci  offsetOrEncoding?: number | string, length?: number): Buffer {
20354d6c458bSopenharmony_ci  if (value === null || value === undefined) {
20364d6c458bSopenharmony_ci    throw typeError(value, 'value', ['Buffer', 'ArrayBuffer', 'Array', 'Array-like', 'string', 'object']);
20374d6c458bSopenharmony_ci  }
20384d6c458bSopenharmony_ci  if (value instanceof ArrayBuffer || value instanceof SharedArrayBuffer) {
20394d6c458bSopenharmony_ci    return createBufferFromArrayBuffer(value, offsetOrEncoding, length);
20404d6c458bSopenharmony_ci  }
20414d6c458bSopenharmony_ci  if (value instanceof Buffer || value instanceof Uint8Array) {
20424d6c458bSopenharmony_ci    return new Buffer(value);
20434d6c458bSopenharmony_ci  }
20444d6c458bSopenharmony_ci  if (value instanceof Array) {
20454d6c458bSopenharmony_ci    return createBufferFromArray(value);
20464d6c458bSopenharmony_ci  }
20474d6c458bSopenharmony_ci  let encoding = checkEncodeing(value, offsetOrEncoding);
20484d6c458bSopenharmony_ci  if (typeof value === 'string') {
20494d6c458bSopenharmony_ci    return fromString(value, encoding);
20504d6c458bSopenharmony_ci  }
20514d6c458bSopenharmony_ci  if (typeof value === 'object' && value !== null) {
20524d6c458bSopenharmony_ci    const valueOf = value.valueOf && value.valueOf();
20534d6c458bSopenharmony_ci    if (valueOf != null && valueOf !== value &&
20544d6c458bSopenharmony_ci      (typeof valueOf === 'string' || typeof valueOf === 'object')) {
20554d6c458bSopenharmony_ci      return from(valueOf, offsetOrEncoding, length);
20564d6c458bSopenharmony_ci    }
20574d6c458bSopenharmony_ci    if (typeof value[Symbol.toPrimitive] === 'function') {
20584d6c458bSopenharmony_ci      const primitive = value[Symbol.toPrimitive]('string');
20594d6c458bSopenharmony_ci      if (typeof primitive === 'string') {
20604d6c458bSopenharmony_ci        return fromString(primitive, encoding);
20614d6c458bSopenharmony_ci      }
20624d6c458bSopenharmony_ci    }
20634d6c458bSopenharmony_ci  }
20644d6c458bSopenharmony_ci  throw typeError(value, 'value', ['Buffer', 'ArrayBuffer', 'Array', 'Array-like']);
20654d6c458bSopenharmony_ci}
20664d6c458bSopenharmony_ci
20674d6c458bSopenharmony_cifunction checkEncodeing(value: string | object, offsetOrEncoding: string | number | undefined): string {
20684d6c458bSopenharmony_ci  if (typeof value === 'string' || typeof value[Symbol.toPrimitive] === 'function') {
20694d6c458bSopenharmony_ci    offsetOrEncoding = offsetOrEncoding ? offsetOrEncoding : 'utf8';
20704d6c458bSopenharmony_ci    if (typeof offsetOrEncoding === 'number') {
20714d6c458bSopenharmony_ci      offsetOrEncoding = 'utf8';
20724d6c458bSopenharmony_ci    }
20734d6c458bSopenharmony_ci    return encodingTypeErrorCheck(offsetOrEncoding);
20744d6c458bSopenharmony_ci  }
20754d6c458bSopenharmony_ci  return '';
20764d6c458bSopenharmony_ci}
20774d6c458bSopenharmony_ci
20784d6c458bSopenharmony_cifunction createBufferFromArrayBuffer(value: ArrayBuffer | SharedArrayBuffer,
20794d6c458bSopenharmony_ci  offsetOrEncoding?: number | string, length?: number): Buffer {
20804d6c458bSopenharmony_ci  offsetOrEncoding = isNaN(Number(offsetOrEncoding)) ? 0 : Number(offsetOrEncoding);
20814d6c458bSopenharmony_ci  const maxLength: number = value.byteLength - offsetOrEncoding;
20824d6c458bSopenharmony_ci  if (length === undefined) {
20834d6c458bSopenharmony_ci    length = maxLength;
20844d6c458bSopenharmony_ci  } else {
20854d6c458bSopenharmony_ci    length = isNaN(Number(length)) ? 0 : Number(length);
20864d6c458bSopenharmony_ci  }
20874d6c458bSopenharmony_ci  rangeErrorCheck(offsetOrEncoding, 'byteOffset', 0, value.byteLength);
20884d6c458bSopenharmony_ci  rangeErrorCheck(length, 'length', 0, maxLength);
20894d6c458bSopenharmony_ci  return new Buffer(value, offsetOrEncoding, length);
20904d6c458bSopenharmony_ci}
20914d6c458bSopenharmony_ci
20924d6c458bSopenharmony_cifunction createBufferFromArray(value: Array<number>): Buffer {
20934d6c458bSopenharmony_ci  if (value.length <= 0) {
20944d6c458bSopenharmony_ci    return new Buffer(0);
20954d6c458bSopenharmony_ci  }
20964d6c458bSopenharmony_ci  const buffer = allocUninitializedFromPool(value.length);
20974d6c458bSopenharmony_ci  buffer[bufferSymbol].setArray(value);
20984d6c458bSopenharmony_ci  return buffer;
20994d6c458bSopenharmony_ci}
21004d6c458bSopenharmony_ci
21014d6c458bSopenharmony_cifunction hexStrtoNumbers(hex: string): Array<number> {
21024d6c458bSopenharmony_ci  let arr = hex.split('');
21034d6c458bSopenharmony_ci  let nums: Array<number> = [];
21044d6c458bSopenharmony_ci  for (let i = 0, len = arr.length; i < len / twoBytes; i++) {
21054d6c458bSopenharmony_ci    let tmp = '0x' + arr[i * twoBytes] + arr[i * twoBytes + 1];
21064d6c458bSopenharmony_ci    let hexNum = Number(tmp);
21074d6c458bSopenharmony_ci    if (isNaN(hexNum)) {
21084d6c458bSopenharmony_ci      if (i === 0) {
21094d6c458bSopenharmony_ci        throw new Error(`The argument 'value' is invalid. Received "${hex}"`);
21104d6c458bSopenharmony_ci      }
21114d6c458bSopenharmony_ci      break;
21124d6c458bSopenharmony_ci    }
21134d6c458bSopenharmony_ci    nums[i] = Number(tmp);
21144d6c458bSopenharmony_ci  }
21154d6c458bSopenharmony_ci  return nums;
21164d6c458bSopenharmony_ci}
21174d6c458bSopenharmony_ci
21184d6c458bSopenharmony_cifunction fromString(value: string, encoding: string): Buffer {
21194d6c458bSopenharmony_ci  if (encoding === 'base64') {
21204d6c458bSopenharmony_ci    value = value.replace(/[\r\n]/g, '');
21214d6c458bSopenharmony_ci  }
21224d6c458bSopenharmony_ci  let enc = normalizeEncoding(encoding);
21234d6c458bSopenharmony_ci  if (!enc) {
21244d6c458bSopenharmony_ci    throw typeErrorForEncoding(encoding, 'encoding');
21254d6c458bSopenharmony_ci  }
21264d6c458bSopenharmony_ci  let size = byteLength(value, enc);
21274d6c458bSopenharmony_ci  let buffer = allocUninitializedFromPool(size);
21284d6c458bSopenharmony_ci  buffer[bufferSymbol].fromString(value, enc, size);
21294d6c458bSopenharmony_ci  buffer[lengthSymbol] = buffer[bufferSymbol].getLength();
21304d6c458bSopenharmony_ci  return buffer;
21314d6c458bSopenharmony_ci}
21324d6c458bSopenharmony_ci
21334d6c458bSopenharmony_cifunction isTypedArray(self: unknown): boolean {
21344d6c458bSopenharmony_ci  let typeArr = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,
21354d6c458bSopenharmony_ci    Int32Array, Uint32Array, Float32Array, Float64Array];
21364d6c458bSopenharmony_ci  for (let i = 0, len = typeArr.length; i < len; i++) {
21374d6c458bSopenharmony_ci    if (self instanceof typeArr[i]) {
21384d6c458bSopenharmony_ci      return true;
21394d6c458bSopenharmony_ci    }
21404d6c458bSopenharmony_ci  }
21414d6c458bSopenharmony_ci  return false;
21424d6c458bSopenharmony_ci}
21434d6c458bSopenharmony_ci
21444d6c458bSopenharmony_cifunction isBuffer(obj: Object): boolean {
21454d6c458bSopenharmony_ci  return obj instanceof Buffer;
21464d6c458bSopenharmony_ci}
21474d6c458bSopenharmony_ci
21484d6c458bSopenharmony_cifunction isEncoding(encoding: string): boolean {
21494d6c458bSopenharmony_ci  if (typeof encoding !== 'string' || encoding.length === 0) {
21504d6c458bSopenharmony_ci    return false;
21514d6c458bSopenharmony_ci  }
21524d6c458bSopenharmony_ci  return getEncodingByType(encoding) ? true : false;
21534d6c458bSopenharmony_ci}
21544d6c458bSopenharmony_ci
21554d6c458bSopenharmony_cifunction byteLength(string: string | BackingType, encoding: string = 'utf8'): number {
21564d6c458bSopenharmony_ci  if (typeof string === 'string' || isTypedArray(string) || string instanceof DataView ||
21574d6c458bSopenharmony_ci      string instanceof ArrayBuffer || string instanceof SharedArrayBuffer || string instanceof Buffer) {
21584d6c458bSopenharmony_ci    if (string instanceof Buffer) {
21594d6c458bSopenharmony_ci      return string.length;
21604d6c458bSopenharmony_ci    } else if (typeof string === 'string') {
21614d6c458bSopenharmony_ci      if (string.length === 0) {
21624d6c458bSopenharmony_ci        return 0;
21634d6c458bSopenharmony_ci      }
21644d6c458bSopenharmony_ci      if (encoding === null) {
21654d6c458bSopenharmony_ci        encoding = 'utf8';
21664d6c458bSopenharmony_ci      }
21674d6c458bSopenharmony_ci      let encodRes = getEncodingByType(encoding);
21684d6c458bSopenharmony_ci      if (!encodRes) {
21694d6c458bSopenharmony_ci        return getUtf8ByteLength(string);
21704d6c458bSopenharmony_ci      }
21714d6c458bSopenharmony_ci      return encodRes.byteLength(string);
21724d6c458bSopenharmony_ci    } else {
21734d6c458bSopenharmony_ci      return string.byteLength;
21744d6c458bSopenharmony_ci    }
21754d6c458bSopenharmony_ci  } else {
21764d6c458bSopenharmony_ci    throw typeError(string, 'string', ['string', 'Buffer', 'ArrayBuffer']);
21774d6c458bSopenharmony_ci  }
21784d6c458bSopenharmony_ci}
21794d6c458bSopenharmony_ci
21804d6c458bSopenharmony_cifunction transcode(source: Buffer | Uint8Array, fromEnc: string, toEnc: string): Buffer {
21814d6c458bSopenharmony_ci  typeErrorCheck(source, ['Buffer', 'Uint8Array'], 'source');
21824d6c458bSopenharmony_ci  typeErrorCheck(fromEnc, ['string'], 'fromEnc');
21834d6c458bSopenharmony_ci  typeErrorCheck(toEnc, ['string'], 'toEnc');
21844d6c458bSopenharmony_ci  let from = source.toString(fromEnc);
21854d6c458bSopenharmony_ci  return fromString(from, toEnc);
21864d6c458bSopenharmony_ci}
21874d6c458bSopenharmony_ci
21884d6c458bSopenharmony_cifunction toUtf8(self: Buffer, start: number, end: number): string {
21894d6c458bSopenharmony_ci  return self[bufferSymbol].toUtf8(start, end);
21904d6c458bSopenharmony_ci}
21914d6c458bSopenharmony_ci
21924d6c458bSopenharmony_cifunction toAscii(self: Buffer, start: number, end: number): string {
21934d6c458bSopenharmony_ci  let bufData = self[bufferSymbol].getBufferData();
21944d6c458bSopenharmony_ci  let val = '';
21954d6c458bSopenharmony_ci  for (let i = start; i < end; i++) {
21964d6c458bSopenharmony_ci    val += String.fromCharCode(+bufData[i] & 0x7F); // 0x7F : get the lower 15-bits
21974d6c458bSopenharmony_ci  }
21984d6c458bSopenharmony_ci  return val;
21994d6c458bSopenharmony_ci}
22004d6c458bSopenharmony_ci
22014d6c458bSopenharmony_cifunction toBinary(self: Buffer, start: number, end: number): string {
22024d6c458bSopenharmony_ci  let bufData = self[bufferSymbol].getBufferData();
22034d6c458bSopenharmony_ci  let val = '';
22044d6c458bSopenharmony_ci  for (let i = start; i < end; i++) {
22054d6c458bSopenharmony_ci    val += String.fromCharCode(+bufData[i]);
22064d6c458bSopenharmony_ci  }
22074d6c458bSopenharmony_ci  return val;
22084d6c458bSopenharmony_ci}
22094d6c458bSopenharmony_ci
22104d6c458bSopenharmony_cifunction toHex(self: Buffer, start: number, end: number): string {
22114d6c458bSopenharmony_ci  let bufData = self[bufferSymbol].getBufferData();
22124d6c458bSopenharmony_ci  let str = '';
22134d6c458bSopenharmony_ci  for (let i = start, len = end; i < len; i++) {
22144d6c458bSopenharmony_ci    let tmpstr = Number(bufData[i]).toString(16); // 16 : 16 decimal
22154d6c458bSopenharmony_ci    tmpstr = (tmpstr.length === 1) ? `0${tmpstr}` : tmpstr;
22164d6c458bSopenharmony_ci    str += tmpstr;
22174d6c458bSopenharmony_ci  }
22184d6c458bSopenharmony_ci  return str;
22194d6c458bSopenharmony_ci}
22204d6c458bSopenharmony_ci
22214d6c458bSopenharmony_cifunction toUtf16LE(self: Buffer, start: number, end: number): string {
22224d6c458bSopenharmony_ci  let bufData: Array<number> = self[bufferSymbol].getBufferData();
22234d6c458bSopenharmony_ci  let val = '';
22244d6c458bSopenharmony_ci  for (let i = start; i + 1 < end; i += 2) { // 2 is array->NextIndex
22254d6c458bSopenharmony_ci    val += String.fromCodePoint((bufData[i + 1] << eightBytes) + (bufData[i]));
22264d6c458bSopenharmony_ci  }
22274d6c458bSopenharmony_ci  return val;
22284d6c458bSopenharmony_ci}
22294d6c458bSopenharmony_ci
22304d6c458bSopenharmony_cifunction toBase64(self: Buffer, start: number, end: number): string {
22314d6c458bSopenharmony_ci  let str = self[bufferSymbol].toBase64(start, end);
22324d6c458bSopenharmony_ci  return str;
22334d6c458bSopenharmony_ci}
22344d6c458bSopenharmony_ci
22354d6c458bSopenharmony_cifunction toBase64Url(self: Buffer, start: number, end: number): string {
22364d6c458bSopenharmony_ci  let str = self[bufferSymbol].toBase64Url(start, end);
22374d6c458bSopenharmony_ci  return str;
22384d6c458bSopenharmony_ci}
22394d6c458bSopenharmony_ci
22404d6c458bSopenharmony_cifunction getEncodingByType(type: string): {
22414d6c458bSopenharmony_ci  byteLength: (str: string) => number;
22424d6c458bSopenharmony_ci  toString: (self: Buffer, start: number, end: number) => string;
22434d6c458bSopenharmony_ci} | undefined {
22444d6c458bSopenharmony_ci  type = type.toLowerCase();
22454d6c458bSopenharmony_ci  switch (type) {
22464d6c458bSopenharmony_ci    case 'utf8':
22474d6c458bSopenharmony_ci    case 'utf-8':
22484d6c458bSopenharmony_ci      return {
22494d6c458bSopenharmony_ci        byteLength: getUtf8ByteLength,
22504d6c458bSopenharmony_ci        toString: toUtf8
22514d6c458bSopenharmony_ci      };
22524d6c458bSopenharmony_ci    case 'ucs2':
22534d6c458bSopenharmony_ci    case 'ucs-2':
22544d6c458bSopenharmony_ci      return {
22554d6c458bSopenharmony_ci        byteLength: (str: string) => str.length * twoBytes, // 2 : 2 times of ascii
22564d6c458bSopenharmony_ci        toString: toUtf16LE
22574d6c458bSopenharmony_ci      };
22584d6c458bSopenharmony_ci    case 'ascii':
22594d6c458bSopenharmony_ci      return {
22604d6c458bSopenharmony_ci        byteLength: (str: string) => str.length,
22614d6c458bSopenharmony_ci        toString: toAscii
22624d6c458bSopenharmony_ci      };
22634d6c458bSopenharmony_ci    case 'binary':
22644d6c458bSopenharmony_ci    case 'latin1':
22654d6c458bSopenharmony_ci      return {
22664d6c458bSopenharmony_ci        byteLength: (str: string) => str.length,
22674d6c458bSopenharmony_ci        toString: toBinary
22684d6c458bSopenharmony_ci      };
22694d6c458bSopenharmony_ci    case 'utf16le':
22704d6c458bSopenharmony_ci    case 'utf-16le':
22714d6c458bSopenharmony_ci      return {
22724d6c458bSopenharmony_ci        byteLength: (str: string) => str.length * twoBytes,
22734d6c458bSopenharmony_ci        toString: toUtf16LE
22744d6c458bSopenharmony_ci      };
22754d6c458bSopenharmony_ci    case 'base64':
22764d6c458bSopenharmony_ci      return {
22774d6c458bSopenharmony_ci        byteLength: getBase64ByteLength,
22784d6c458bSopenharmony_ci        toString: toBase64
22794d6c458bSopenharmony_ci      };
22804d6c458bSopenharmony_ci    case 'base64url':
22814d6c458bSopenharmony_ci      return {
22824d6c458bSopenharmony_ci        byteLength: getBase64ByteLength,
22834d6c458bSopenharmony_ci        toString: toBase64Url
22844d6c458bSopenharmony_ci      };
22854d6c458bSopenharmony_ci    case 'hex':
22864d6c458bSopenharmony_ci      return {
22874d6c458bSopenharmony_ci        byteLength: (str: string) => str.length >>> 1, // 1 : one-half
22884d6c458bSopenharmony_ci        toString: toHex
22894d6c458bSopenharmony_ci      };
22904d6c458bSopenharmony_ci    default:
22914d6c458bSopenharmony_ci      return undefined;
22924d6c458bSopenharmony_ci  }
22934d6c458bSopenharmony_ci}
22944d6c458bSopenharmony_ci
22954d6c458bSopenharmony_cifunction getUtf8ByteLength(str: string): number {
22964d6c458bSopenharmony_ci  return internalBuffer.utf8ByteLength(str);
22974d6c458bSopenharmony_ci}
22984d6c458bSopenharmony_ci
22994d6c458bSopenharmony_cifunction getBase64ByteLength(str: string): number {
23004d6c458bSopenharmony_ci  let bytes = str.length;
23014d6c458bSopenharmony_ci  let pos = 0;
23024d6c458bSopenharmony_ci  while (bytes > 1 && (pos = str.indexOf('=', pos)) !== -1) { // Find '=' in str and calculate the length of str
23034d6c458bSopenharmony_ci    bytes--;
23044d6c458bSopenharmony_ci    pos++;
23054d6c458bSopenharmony_ci  }
23064d6c458bSopenharmony_ci  return (bytes * threeBytes) >>> twoBytes;
23074d6c458bSopenharmony_ci}
23084d6c458bSopenharmony_ci
23094d6c458bSopenharmony_cifunction compare(buf1: Buffer | Uint8Array, buf2: Buffer | Uint8Array): 1 | 0 | -1 {
23104d6c458bSopenharmony_ci  if (!(buf1 instanceof Buffer) && !(buf1 instanceof Uint8Array)) {
23114d6c458bSopenharmony_ci    throw new BusinessError(new ErrorMessage(errorMap.typeError, 'buf1').setTypeInfo(['Buffer', 'Uint8Array'],
23124d6c458bSopenharmony_ci      getTypeName(buf1)).getString(), errorMap.typeError);
23134d6c458bSopenharmony_ci  }
23144d6c458bSopenharmony_ci  if (!(buf2 instanceof Buffer) && !(buf2 instanceof Uint8Array)) {
23154d6c458bSopenharmony_ci    throw new BusinessError(new ErrorMessage(errorMap.typeError, 'buf2').setTypeInfo(['Buffer', 'Uint8Array'],
23164d6c458bSopenharmony_ci      getTypeName(buf2)).getString(), errorMap.typeError);
23174d6c458bSopenharmony_ci  }
23184d6c458bSopenharmony_ci
23194d6c458bSopenharmony_ci  let bufData1: Array<number> | Uint8Array;
23204d6c458bSopenharmony_ci  let bufData2: Array<number> | Uint8Array;
23214d6c458bSopenharmony_ci  if (buf1 instanceof Buffer) {
23224d6c458bSopenharmony_ci    bufData1 = buf1[bufferSymbol].getBufferData();
23234d6c458bSopenharmony_ci  } else {
23244d6c458bSopenharmony_ci    bufData1 = buf1;
23254d6c458bSopenharmony_ci  }
23264d6c458bSopenharmony_ci  if (buf2 instanceof Buffer) {
23274d6c458bSopenharmony_ci    bufData2 = buf2[bufferSymbol].getBufferData();
23284d6c458bSopenharmony_ci  } else {
23294d6c458bSopenharmony_ci    bufData2 = buf2;
23304d6c458bSopenharmony_ci  }
23314d6c458bSopenharmony_ci  let length1: number = bufData1.length;
23324d6c458bSopenharmony_ci  let length2: number = bufData2.length;
23334d6c458bSopenharmony_ci  let length: number = length1 > length2 ? length2 : length1;
23344d6c458bSopenharmony_ci  for (let i = 0; i < length; i++) {
23354d6c458bSopenharmony_ci    let value1 = +bufData1[i];
23364d6c458bSopenharmony_ci    let value2 = +bufData2[i];
23374d6c458bSopenharmony_ci    if (value1 > value2) {
23384d6c458bSopenharmony_ci      return 1;
23394d6c458bSopenharmony_ci    } else if (value1 < value2) {
23404d6c458bSopenharmony_ci      return -1;
23414d6c458bSopenharmony_ci    }
23424d6c458bSopenharmony_ci  }
23434d6c458bSopenharmony_ci  if (length1 > length2) {
23444d6c458bSopenharmony_ci    return 1;
23454d6c458bSopenharmony_ci  } else if (length1 < length2) {
23464d6c458bSopenharmony_ci    return -1;
23474d6c458bSopenharmony_ci  }
23484d6c458bSopenharmony_ci  return 0;
23494d6c458bSopenharmony_ci}
23504d6c458bSopenharmony_ci
23514d6c458bSopenharmony_ciexport default {
23524d6c458bSopenharmony_ci  Buffer,
23534d6c458bSopenharmony_ci  Blob,
23544d6c458bSopenharmony_ci  from,
23554d6c458bSopenharmony_ci  alloc,
23564d6c458bSopenharmony_ci  allocUninitializedFromPool,
23574d6c458bSopenharmony_ci  allocUninitialized,
23584d6c458bSopenharmony_ci  byteLength,
23594d6c458bSopenharmony_ci  isBuffer,
23604d6c458bSopenharmony_ci  isEncoding,
23614d6c458bSopenharmony_ci  compare,
23624d6c458bSopenharmony_ci  concat,
23634d6c458bSopenharmony_ci  transcode
23644d6c458bSopenharmony_ci};
2365