{"version":3,"file":"_ProtobufWriter.mjs","names":[],"sources":["../../src/internal/_ProtobufWriter.ts"],"sourcesContent":["import { Singleton } from \"@typia/utils\";\n\nimport { _IProtobufWriter } from \"./_IProtobufWriter\";\nimport { _ProtobufSizer } from \"./_ProtobufSizer\";\n\n/// @reference https://github.com/piotr-oles/as-proto/blob/main/packages/as-proto/assembly/internal/FixedWriter.ts\nexport class _ProtobufWriter implements _IProtobufWriter {\n  /** Related sizer */\n  private readonly sizer: _ProtobufSizer;\n\n  /** Current pointer. */\n  private ptr: number;\n\n  /** Protobuf buffer. */\n  private buf: Uint8Array;\n\n  /** DataView for buffer. */\n  private view: DataView;\n\n  /** Index in varlen array from sizer. */\n  private varlenidx: number;\n\n  constructor(sizer: _ProtobufSizer) {\n    this.sizer = sizer;\n    this.buf = new Uint8Array(sizer.len);\n    this.view = new DataView(this.buf.buffer);\n    this.ptr = 0;\n    this.varlenidx = 0;\n  }\n\n  buffer(): Uint8Array {\n    return this.buf;\n  }\n\n  bool(value: boolean): void {\n    this.byte(value ? 1 : 0);\n  }\n\n  byte(value: number): void {\n    this.buf[this.ptr++] = value & 255;\n  }\n\n  int32(value: number): void {\n    if (value < 0) this.int64(value);\n    else this.variant32(value >>> 0);\n  }\n\n  sint32(value: number): void {\n    this.variant32((value << 1) ^ (value >> 31));\n  }\n\n  uint32(value: number): void {\n    this.variant32(value);\n  }\n\n  sint64(value: number | bigint): void {\n    value = BigInt(value);\n    this.variant64((value << BigInt(0x01)) ^ (value >> BigInt(0x3f)));\n  }\n\n  int64(value: number | bigint): void {\n    this.variant64(BigInt(value));\n  }\n\n  uint64(value: number | bigint): void {\n    this.variant64(BigInt(value));\n  }\n\n  float(val: number): void {\n    this.view.setFloat32(this.ptr, val, true);\n    this.ptr += 4;\n  }\n\n  double(val: number): void {\n    this.view.setFloat64(this.ptr, val, true);\n    this.ptr += 8;\n  }\n\n  bytes(value: Uint8Array): void {\n    this.uint32(value.byteLength);\n    for (let i = 0; i < value.byteLength; i++) this.buf[this.ptr++] = value[i]!;\n  }\n\n  string(value: string): void {\n    const len: number = this.varlen(); // use precomputed length\n    this.uint32(len);\n\n    const binary: Uint8Array = utf8.get().encode(value);\n    for (let i = 0; i < binary.byteLength; i++)\n      this.buf[this.ptr++] = binary[i]!;\n  }\n\n  fork(): void {\n    this.uint32(this.varlen()); // use precomputed length\n  }\n\n  ldelim(): void {\n    // nothing to do - all dirty work done by sizer\n  }\n\n  finish(): Uint8Array {\n    return this.buf;\n  }\n\n  reset(): void {\n    this.buf = new Uint8Array(this.sizer.len);\n    this.view = new DataView(this.buf.buffer);\n    this.ptr = 0;\n    this.varlenidx = 0;\n  }\n\n  private variant32(val: number): void {\n    while (val > 0x7f) {\n      this.buf[this.ptr++] = (val & 0x7f) | 0x80;\n      val = val >>> 7;\n    }\n    this.buf[this.ptr++] = val;\n  }\n\n  private variant64(val: bigint): void {\n    val = BigInt.asUintN(64, val);\n    while (val > BigInt(0x7f)) {\n      this.buf[this.ptr++] = Number((val & BigInt(0x7f)) | BigInt(0x80));\n      val = val >> BigInt(0x07);\n    }\n    this.buf[this.ptr++] = Number(val);\n  }\n\n  private varlen(): number {\n    return this.varlenidx >= this.sizer.varlen.length\n      ? 0\n      : this.sizer.varlen[this.varlenidx++]!;\n  }\n}\nconst utf8 = new Singleton(() => new TextEncoder());\n"],"mappings":";;AAMA,IAAa,kBAAb,MAAyD;CAgBvD,YAAY,OAAuB;EACjC,KAAK,QAAQ;EACb,KAAK,MAAM,IAAI,WAAW,MAAM,GAAG;EACnC,KAAK,OAAO,IAAI,SAAS,KAAK,IAAI,MAAM;EACxC,KAAK,MAAM;EACX,KAAK,YAAY;CACnB;CAEA,SAAqB;EACnB,OAAO,KAAK;CACd;CAEA,KAAK,OAAsB;EACzB,KAAK,KAAK,QAAQ,IAAI,CAAC;CACzB;CAEA,KAAK,OAAqB;EACxB,KAAK,IAAI,KAAK,SAAS,QAAQ;CACjC;CAEA,MAAM,OAAqB;EACzB,IAAI,QAAQ,GAAG,KAAK,MAAM,KAAK;OAC1B,KAAK,UAAU,UAAU,CAAC;CACjC;CAEA,OAAO,OAAqB;EAC1B,KAAK,UAAW,SAAS,IAAM,SAAS,EAAG;CAC7C;CAEA,OAAO,OAAqB;EAC1B,KAAK,UAAU,KAAK;CACtB;CAEA,OAAO,OAA8B;EACnC,QAAQ,OAAO,KAAK;EACpB,KAAK,UAAW,SAAS,OAAO,CAAI,IAAM,SAAS,OAAO,EAAI,CAAE;CAClE;CAEA,MAAM,OAA8B;EAClC,KAAK,UAAU,OAAO,KAAK,CAAC;CAC9B;CAEA,OAAO,OAA8B;EACnC,KAAK,UAAU,OAAO,KAAK,CAAC;CAC9B;CAEA,MAAM,KAAmB;EACvB,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,IAAI;EACxC,KAAK,OAAO;CACd;CAEA,OAAO,KAAmB;EACxB,KAAK,KAAK,WAAW,KAAK,KAAK,KAAK,IAAI;EACxC,KAAK,OAAO;CACd;CAEA,MAAM,OAAyB;EAC7B,KAAK,OAAO,MAAM,UAAU;EAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,YAAY,KAAK,KAAK,IAAI,KAAK,SAAS,MAAM;CAC1E;CAEA,OAAO,OAAqB;EAC1B,MAAM,MAAc,KAAK,OAAO;EAChC,KAAK,OAAO,GAAG;EAEf,MAAM,SAAqB,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK;EAClD,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,YAAY,KACrC,KAAK,IAAI,KAAK,SAAS,OAAO;CAClC;CAEA,OAAa;EACX,KAAK,OAAO,KAAK,OAAO,CAAC;CAC3B;CAEA,SAAe,CAEf;CAEA,SAAqB;EACnB,OAAO,KAAK;CACd;CAEA,QAAc;EACZ,KAAK,MAAM,IAAI,WAAW,KAAK,MAAM,GAAG;EACxC,KAAK,OAAO,IAAI,SAAS,KAAK,IAAI,MAAM;EACxC,KAAK,MAAM;EACX,KAAK,YAAY;CACnB;CAEA,UAAkB,KAAmB;EACnC,OAAO,MAAM,KAAM;GACjB,KAAK,IAAI,KAAK,SAAU,MAAM,MAAQ;GACtC,MAAM,QAAQ;EAChB;EACA,KAAK,IAAI,KAAK,SAAS;CACzB;CAEA,UAAkB,KAAmB;EACnC,MAAM,OAAO,QAAQ,IAAI,GAAG;EAC5B,OAAO,MAAM,OAAO,GAAI,GAAG;GACzB,KAAK,IAAI,KAAK,SAAS,OAAQ,MAAM,OAAO,GAAI,IAAK,OAAO,GAAI,CAAC;GACjE,MAAM,OAAO,OAAO,CAAI;EAC1B;EACA,KAAK,IAAI,KAAK,SAAS,OAAO,GAAG;CACnC;CAEA,SAAyB;EACvB,OAAO,KAAK,aAAa,KAAK,MAAM,OAAO,SACvC,IACA,KAAK,MAAM,OAAO,KAAK;CAC7B;AACF;AACA,MAAM,OAAO,IAAI,gBAAgB,IAAI,YAAY,CAAC"}