@naeemo/capnp 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -360,6 +360,25 @@ var StructBuilder = class StructBuilder {
360
360
  segment.setWord(ptrOffset, ptr);
361
361
  }
362
362
  /**
363
+ * 设置数据字段(Uint8Array)
364
+ * @param pointerIndex - 指针索引
365
+ * @param value - Uint8Array 数据
366
+ */
367
+ setData(pointerIndex, value) {
368
+ const ptrOffset = this.wordOffset + this.dataWords + pointerIndex;
369
+ const segment = this.message.getSegment();
370
+ if (value.length === 0) {
371
+ const ptr = encodeListPointer(0, ElementSize.BYTE, 0);
372
+ segment.setWord(ptrOffset, ptr);
373
+ return;
374
+ }
375
+ const wordCount = Math.ceil(value.length / WORD_SIZE);
376
+ const listOffset = segment.allocate(wordCount);
377
+ new Uint8Array(segment.dataView.buffer, listOffset * WORD_SIZE, value.length).set(value);
378
+ const ptr = encodeListPointer(listOffset - ptrOffset - 1, ElementSize.BYTE, value.length);
379
+ segment.setWord(ptrOffset, ptr);
380
+ }
381
+ /**
363
382
  * 初始化嵌套结构
364
383
  */
365
384
  initStruct(pointerIndex, dataWords, pointerCount) {
@@ -795,6 +814,25 @@ var StructReader = class StructReader {
795
814
  return new TextDecoder().decode(bytes);
796
815
  }
797
816
  /**
817
+ * 获取数据字段
818
+ * Data is stored as List(UInt8) without NUL terminator
819
+ * @param pointerIndex - The index of the pointer in the pointer section
820
+ * @returns Uint8Array of the data content, or undefined if null pointer
821
+ */
822
+ getData(pointerIndex) {
823
+ const ptrOffset = this.wordOffset + this.dataWords + pointerIndex;
824
+ const resolved = this.message.resolvePointer(this.segmentIndex, ptrOffset);
825
+ if (!resolved) return void 0;
826
+ const { segmentIndex, wordOffset, pointer } = resolved;
827
+ if (pointer.tag !== PointerTag.LIST) return void 0;
828
+ const listPtr = pointer;
829
+ const segment = this.message.getSegment(segmentIndex);
830
+ const byteLength = listPtr.elementCount;
831
+ if (byteLength === 0) return new Uint8Array(0);
832
+ const bytes = new Uint8Array(segment.dataView.buffer, wordOffset * WORD_SIZE, byteLength);
833
+ return new Uint8Array(bytes);
834
+ }
835
+ /**
798
836
  * 获取嵌套结构
799
837
  */
800
838
  getStruct(pointerIndex, _dataWords, _pointerCount) {