nv-buf-big-slab 1.1.2

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.

Potentially problematic release.


This version of nv-buf-big-slab might be problematic. Click here for more details.

package/ctor.js ADDED
@@ -0,0 +1,153 @@
1
+ const {get_byt_from_cls,set_nth_byte,calc_prepad_sz,get_cls_from_dump_fst_byte} = require("nv-facutil-slct-ta");
2
+ const {
3
+ LOAD_HINT_SZ ,
4
+ LOAD_HINT_CLS_BYT_IDX ,
5
+ LOAD_HINT_PRE_PAD_SZ_IDX,
6
+
7
+ CTRL_HEAD_CNT,SLAB_ARY_LEN_IDX,
8
+ SLAB_STRIDE_V,
9
+ slab_ctrl_bits_start_idx,
10
+ slab_mx_cnt_idx,
11
+ slab_used_cnt_idx,
12
+ slab_cursor_idx,
13
+ slab_sz_idx,
14
+ slab_algn_idx,
15
+ PTR_HEAD_CNT,DATA_PTR_IDX,
16
+ DATA_LOAD_HINT_SZ,
17
+ } = require("./const");
18
+
19
+ const _util = require("./util");
20
+
21
+ const init_meta = (u8a,TACLS,padsz)=>{
22
+ var clsbyt = get_byt_from_cls(TACLS);
23
+ u8a[LOAD_HINT_CLS_BYT_IDX] = clsbyt;
24
+ u8a[LOAD_HINT_PRE_PAD_SZ_IDX] = padsz;
25
+ }
26
+
27
+ const store_data_load_hint = (dv,cfg,offset)=>{
28
+ var N = (BigInt(cfg.data_sz)<<8n)| (BigInt(cfg.data_algn)<<4n) | BigInt(cfg.pad_bfr_data_sz);
29
+ if(cfg.data_inline) {} else {N=-N;}
30
+ dv.setBigInt64(offset,N,true);
31
+ }
32
+
33
+ const creat_tas_with_ab_and_aligned_offset = (ab,offset,cfg)=>{
34
+ var dv = new DataView(ab);
35
+ //////cpsz = LOAD_HINT_SZ + pad_bfr_ctrl_sz + ctrl_sz + LOAD_HINT_SZ + pad_bfr_ptr_sz + ptr_sz +DATA_LOAD_HINT_SZ
36
+ {
37
+ ctrl_load_hint = new Uint8Array(ab,offset,LOAD_HINT_SZ); init_meta(ctrl_load_hint,cfg.CTRL_TACLS,cfg.pad_bfr_ctrl_sz);
38
+ offset += LOAD_HINT_SZ;
39
+ pad_bfr_ctrl = new Uint8Array(ab,offset,cfg.pad_bfr_ctrl_sz);
40
+ offset += cfg.pad_bfr_ctrl_sz
41
+ ctrl_ta = new cfg.CTRL_TACLS(ab,offset, cfg.ctrl_sz/cfg.CTRL_TACLS.BYTES_PER_ELEMENT);
42
+ ctrl_ta[SLAB_ARY_LEN_IDX] = cfg.slab_ary.length;
43
+ ctrl_vw = ctrl_ta.subarray(CTRL_HEAD_CNT);
44
+ offset += cfg.ctrl_sz;
45
+ ptr_load_hint = new Uint8Array(ab,offset,LOAD_HINT_SZ); init_meta(ptr_load_hint,cfg.PTR_TACLS,cfg.pad_bfr_ptr_sz);
46
+ offset += LOAD_HINT_SZ;
47
+ pad_bfr_ptr = new Uint8Array(ab,offset,cfg.pad_bfr_ptr_sz);
48
+ offset += cfg.pad_bfr_ptr_sz;
49
+
50
+ ptr_ta = new cfg.PTR_TACLS(ab,offset,cfg.ptr_sz/cfg.PTR_TACLS.BYTES_PER_ELEMENT);
51
+ ptr_ta[DATA_PTR_IDX] = cfg.data_ptr;
52
+ ptr_vw = ptr_ta.subarray(PTR_HEAD_CNT);
53
+ offset += cfg.ptr_sz;
54
+ store_data_load_hint(dv,cfg,offset);
55
+ offset += DATA_LOAD_HINT_SZ;
56
+ }
57
+ var rslt = {
58
+ ctrl_load_hint,pad_bfr_ctrl,ctrl_ta,ctrl_vw,
59
+ ptr_load_hint,pad_bfr_ptr,ptr_ta,ptr_vw,
60
+ }
61
+ return [rslt,offset]
62
+ }
63
+
64
+ const creat_tas = (
65
+ underlying ,
66
+ cfg,
67
+ data,
68
+ )=> {
69
+ var ctrl_load_hint;
70
+ var pad_bfr_ctrl;
71
+ var ctrl_ta;
72
+ var ctrl_vw;
73
+ var ptr_load_hint;
74
+ var pad_bfr_ptr;
75
+ var ptr_ta;
76
+ var ptr_vw;
77
+ ////-------------------------------------
78
+ var ab = underlying.src; var offset = underlying.offset;
79
+ var data_inline = data.inline;
80
+ var ta;
81
+ if(ab === null) {
82
+ if(!data.inline) {
83
+ ab = new ArrayBuffer(cfg.cpsz);
84
+ } else {
85
+ ab = new ArrayBuffer(cfg.cpdsz);
86
+ }
87
+ offset = 0;
88
+ } else {
89
+ if(!data.inline) {
90
+ offset += calc_prepad_sz(offset,cfg.cpalgn);
91
+ var diff = ab.byteLength - offset;
92
+ if(diff < cfg.cpsz) {
93
+ throw(new Error(`ab.byteLength(${ab.byteLength}) MUST >= ${offset + cfg.cpsz}`))
94
+ }
95
+ } else {
96
+ offset += calc_prepad_sz(offset,cfg.cpdalgn);
97
+ var diff = ab.byteLength - offset;
98
+ if(diff < cfg.cpdsz) {
99
+ throw(new Error(`ab.byteLength(${ab.byteLength}) MUST >= ${offset + cfg.cpdsz}`))
100
+ }
101
+ }
102
+ }
103
+
104
+ ////
105
+ var [rslt,offset] = creat_tas_with_ab_and_aligned_offset(ab,offset,cfg);
106
+
107
+ if(!data.inline) {
108
+
109
+ } else {
110
+ //cpdsz = LOAD_HINT_SZ + pad_bfr_ctrl_sz + ctrl_sz + LOAD_HINT_SZ + pad_bfr_ptr_sz + ptr_sz + DATA_LOAD_HINT_SZ + pad_bfr_data_sz + data_sz
111
+ rslt.pad_bfr_data = new Uint8Array(ab,offset,cfg.pad_bfr_data_sz);
112
+ offset += cfg.pad_bfr_data_sz;
113
+ cfg.data_ptr = offset;
114
+ _util.__updt_data_si_if_data_ptr_match_align(cfg.slab_ary,offset);
115
+ rslt.data = new Uint8Array(ab,offset, cfg.data_sz);
116
+ offset += cfg.data_sz;
117
+ }
118
+ if(ab.byteLength>=offset) {
119
+ return rslt;
120
+ } else {
121
+ throw(`underlying.src.byteLength(${ab.byteLength}) MUST >= ${offset}`);
122
+ }
123
+ }
124
+
125
+
126
+ const init_vws = (
127
+ cfg,
128
+ ctrl_entries,
129
+ ptr_vw,
130
+ )=>{
131
+ var slab_ary = cfg.slab_ary;
132
+ var slab_ary_len = slab_ary.length;
133
+ for(let id=0;id<slab_ary_len;++id) {
134
+ var one_cfg = slab_ary[id];
135
+ ctrl_entries[id*SLAB_STRIDE_V+slab_ctrl_bits_start_idx] = one_cfg.ctrl_bits_start;
136
+ ctrl_entries[id*SLAB_STRIDE_V+slab_mx_cnt_idx] = one_cfg.mx_cnt;
137
+ ctrl_entries[id*SLAB_STRIDE_V+slab_used_cnt_idx] = 0;
138
+ ctrl_entries[id*SLAB_STRIDE_V+slab_cursor_idx] = 0;
139
+ ctrl_entries[id*SLAB_STRIDE_V+slab_sz_idx] = one_cfg.slab_sz;
140
+ ctrl_entries[id*SLAB_STRIDE_V+slab_algn_idx] = one_cfg.slab_algn;
141
+ ptr_vw[id] = one_cfg.data_si;
142
+ }
143
+ }
144
+
145
+ const read_tacls = (u8a,offset)=>get_cls_from_dump_fst_byte(u8a[offset]);
146
+
147
+ module.exports = {
148
+ init_meta,
149
+ store_data_load_hint,
150
+ creat_tas,creat_tas_with_ab_and_aligned_offset,
151
+ init_vws,
152
+ read_tacls,
153
+ }
package/getter.js ADDED
@@ -0,0 +1,165 @@
1
+ const {get_cls_from_dump_fst_byte} = require("nv-facutil-slct-ta");
2
+ const {
3
+ LOAD_HINT_SZ ,
4
+ LOAD_HINT_CLS_BYT_IDX ,
5
+ LOAD_HINT_PRE_PAD_SZ_IDX,
6
+ CTRL_HEAD_CNT,SLAB_ARY_LEN_IDX,
7
+ SLAB_STRIDE_V,
8
+ slab_ctrl_bits_start_idx,
9
+ slab_mx_cnt_idx,
10
+ slab_used_cnt_idx,
11
+ slab_cursor_idx,
12
+ slab_sz_idx,
13
+ slab_algn_idx,
14
+ PTR_HEAD_CNT, DATA_PTR_IDX,
15
+ } = require("./const");
16
+
17
+ const {read_slab_ary_from_tas} = require("./util");
18
+
19
+ function _underlying_ab() {return this.ctrl_load_hint.buffer;}
20
+ function _underlying_sz() {
21
+ return this.ctrl_load_hint.byteLength + this._underlying_pad_sz_bfr_ctrl + this.ctrl_ta.byteLength +
22
+ this.ptr_load_hint.byteLength + this._underlying_pad_sz_bfr_ptr + this.ptr_ta.byteLength;
23
+ }
24
+
25
+
26
+ function _underlying_ctrl_cls() {return get_cls_from_dump_fst_byte(this.ctrl_load_hint[LOAD_HINT_CLS_BYT_IDX])}
27
+ function _underlying_pad_sz_bfr_ctrl() {return this.ctrl_load_hint[LOAD_HINT_PRE_PAD_SZ_IDX];}
28
+ function _underlying_ptr_cls() {return get_cls_from_dump_fst_byte(this.ptr_load_hint[LOAD_HINT_CLS_BYT_IDX])}
29
+ function _underlying_pad_sz_bfr_ptr() {return this.ptr_load_hint[LOAD_HINT_PRE_PAD_SZ_IDX];}
30
+
31
+ function _underlying() {
32
+ return {
33
+ // ===== 基础 =====
34
+ ab: this._underlying_ab,
35
+ sz: this._underlying_sz,
36
+
37
+ // ===== ctrl 区 =====
38
+ ctrl: {
39
+ pool_cnt: this.pool_cnt,
40
+ pad_sz: this._underlying_pad_sz_bfr_ctrl,
41
+ cls: this._underlying_ctrl_cls,
42
+
43
+ },
44
+
45
+ // ===== ptr 区 =====
46
+ ptr: {
47
+ data_ptr: this.data_ptr,
48
+ pad_sz: this._underlying_pad_sz_bfr_ptr,
49
+ cls: this._underlying_ptr_cls,
50
+ },
51
+ }
52
+ }
53
+
54
+
55
+ function _pad_bfr_ctrl() {return new Uint8Array(this.underlying_ab,this.ctrl_load_hint.byteOffset+LOAD_HINT_SZ,this.underlying_pad_sz_bfr_ctrl);}
56
+
57
+ function ctrl_algn() {return this.CTRL_TACLS.BYTES_PER_ELEMENT;}
58
+ // CTRL_LOAD_HINT | pad-bfr-ctrl | pool_cnt | <entries> | <ctrl_bits> | PTR_LOAD_HINT | pad-bfr-ptr | data_ptr | <data_sis>| data_info |pad_bfr_data| datas...
59
+ // |--------ctrl-view--------| | ptr-view | |
60
+ // |----------ctrl-ta-------------------| |---------ptr-ta------ | |
61
+ // |-----------ctrlsz-------------------| |---------ptrsz--------| | | datasz
62
+ //|----------------------------------------------------------------------------cpsz----------------------------------------------------|
63
+
64
+ function pool_cnt() {return this.ctrl_ta[SLAB_ARY_LEN_IDX];}
65
+ function ctrl_entries_sz() {return this.CTRL_TACLS.BYTES_PER_ELEMENT*(this.pool_cnt);}
66
+ function ctrl_bits_sz() {return this.ptr_load_hint.byteOffset - this.ctrl_ta.byteOffset - this.CTRL_TACLS.BYTES_PER_ELEMENT*(CTRL_HEAD_CNT + this.pool_cnt);}
67
+ function ctrl_sz() {return this.ptr_load_hint.byteOffset - this.ctrl_ta.byteOffset;}
68
+
69
+
70
+ function slab_ary() {return read_slab_ary_from_tas(this.ctrl_ta,this.ptr_ta);}
71
+
72
+
73
+ function _pad_bfr_ptr() {return new Uint8Array(this.underlying_ab,this.ptr_load_hint.byteOffset+LOAD_HINT_SZ,this._underlying_pad_sz_bfr_ptr);}
74
+ function ptr_algn() {return this.PTR_TACLS.BYTES_PER_ELEMENT;}
75
+ function ptr_entries_sz() {return this.PTR_TACLS.BYTES_PER_ELEMENT*(this.pool_cnt);}
76
+ function ptr_sz() {return this.PTR_TACLS.BYTES_PER_ELEMENT*(PTR_HEAD_CNT + this.pool_cnt);}
77
+
78
+ function data_ptr() {return this.ptr_ta[DATA_PTR_IDX];}
79
+ function data_info() {
80
+ var ab = this._underlying_ab;
81
+ var offset = this.ptr_ta.byteOffset + this.ptr_sz;
82
+ var dv = new DataView(ab);
83
+ var N = dv.getBigInt64(offset,true);
84
+ var inline = false;
85
+ if(N>0n) {inline=true;} else {N=-N;}
86
+ var sz = Number(N >>8n);
87
+ var algn = (N & 0xF0n) >> 4n;
88
+ var pad_bfr_data_sz = N & 0x0Fn;
89
+ return {
90
+ inline,
91
+ sz,
92
+ algn:Number(algn),
93
+ pad_bfr_data_sz:Number(pad_bfr_data_sz)
94
+ }
95
+ }
96
+
97
+ function data_sz() {return this.data_info.sz}
98
+ function data_algn() {return this.data_info.algn}
99
+ function cond_data_inline() {return this.data_info.inline}
100
+ function _pad_bfr_data() {
101
+ if(this.cond_data_inline) {
102
+ var pad_bfr_data_sz = this.data_info.pad_bfr_data_sz;
103
+ var offset = this.ptr_ta.byteOffset + this.ptr_sz + 8;
104
+ return new Uint8Array(this.underlying_ab,offset,offset + pad_bfr_data_sz);
105
+ } else {
106
+ return null;
107
+ }
108
+ }
109
+ function _data_ptr_if_inline() {
110
+ var pad_bfr_data_sz = this.data_info.pad_bfr_data_sz;
111
+ return this.ptr_ta.byteOffset + this.ptr_sz + 8 + pad_bfr_data_sz;
112
+ }
113
+ function _cond_data_ptr_valid() {
114
+ if(this.cond_data_inline) {
115
+ return (this._data_ptr_if_inline === this.data_ptr);
116
+ } else {
117
+ return true;
118
+ }
119
+ }
120
+
121
+ function cpalgn() {return Math.max(this.ctrl_algn,this.ptr_algn)}
122
+ function cpsz() {return LOAD_HINT_SZ + this._underlying_pad_sz_bfr_ctrl + this.ctrl_sz + LOAD_HINT_SZ + this._underlying_pad_sz_bfr_ptr + this.ptr_sz +8;}
123
+
124
+ function cpdalgn() {return Math.max(this.cpalgn,this.data_algn)}
125
+ function cpdsz() {var info = this.data_info;return this.cpsz + info.pad_bfr_data_sz + info.sz;}
126
+
127
+ function stats() {
128
+ var d = {}; var D={};
129
+ var arr = this.slab_ary;
130
+ for(let e of arr) {
131
+ var k = `sz = ${e.slab_sz}`.padEnd(24) + `align = ${e.slab_algn} `.padEnd(8) + "|";
132
+ var v = "|" + ` used_cnt = ${e.used_cnt}`.padEnd(24) + `unused_cnt = ${e.mx_cnt-e.used_cnt}`.padEnd(24);
133
+ if(e.used_cnt<e.mx_cnt) {
134
+ d[k] = v;
135
+ } else {
136
+ D[k] = v;
137
+ }
138
+ }
139
+ return {
140
+ alocable:d,
141
+ unalocable:D,
142
+ };
143
+ }
144
+
145
+ module.exports = {
146
+ _underlying,
147
+ _underlying_ab,_underlying_sz,
148
+ _underlying_ctrl_cls,_underlying_pad_sz_bfr_ctrl,
149
+ _pad_bfr_ctrl,
150
+ ctrl_algn,pool_cnt,ctrl_entries_sz,ctrl_sz,
151
+ _underlying_ptr_cls,_underlying_pad_sz_bfr_ptr,
152
+ _pad_bfr_ptr,
153
+ ptr_algn,ptr_sz,ptr_entries_sz,
154
+ ////
155
+ data_ptr, _data_ptr_if_inline,_cond_data_ptr_valid,
156
+ _pad_bfr_data,
157
+ data_info, data_algn,data_sz, cond_data_inline,
158
+ ////
159
+ slab_ary,
160
+ stats,
161
+ ////
162
+ cpalgn,cpsz,
163
+ cpdalgn,cpdsz,
164
+ }
165
+
package/index.js ADDED
@@ -0,0 +1,261 @@
1
+ const _patch = require("nv-facutil-simple-patch-cls");
2
+ const FRZ = require("nv-facutil-deep-freeze-j");
3
+ const {get_nth_byte,get_cls_from_dump_fst_byte,calc_prepad_sz,read_dv_with_cls, fmt_underlying,fmt_data} = require("nv-facutil-slct-ta");
4
+ const {calc_slab_info,slct_slab} = require("./util");
5
+ const _const = require("./const");
6
+ const _util = require("./util");
7
+ const _ctor = require("./ctor")
8
+
9
+
10
+ const {
11
+ LOAD_HINT_SZ ,
12
+ LOAD_HINT_CLS_BYT_IDX ,
13
+ LOAD_HINT_PRE_PAD_SZ_IDX,
14
+ ////
15
+ CTRL_HEAD_CNT,SLAB_ARY_LEN_IDX,
16
+ SLAB_STRIDE_V,
17
+ slab_ctrl_bits_start_idx,
18
+ slab_mx_cnt_idx,
19
+ slab_used_cnt_idx,
20
+ slab_cursor_idx,
21
+ slab_sz_idx,
22
+ slab_algn_idx,
23
+ PTR_HEAD_CNT, DATA_PTR_IDX,
24
+ } = require("./const");
25
+
26
+ const creat_dflt_cfg = ()=>{
27
+ var cfg = _const.DFLT_CFG();
28
+ return _util.merge_slab_ary(_util.sort_slab_ary(_util.dict_cfg_to_ary_cfg(cfg)));
29
+ }
30
+ const calc_dflt_slab_info =(data_ptr=0)=>calc_slab_info(creat_dflt_cfg(),data_ptr);
31
+
32
+
33
+
34
+ ////
35
+ function Slabs(ctrl_load_hint,ctrl_ta,ptr_load_hint, ptr_ta) {
36
+ var len = ctrl_ta[SLAB_ARY_LEN_IDX];
37
+ _patch.def_ps(this,{
38
+ CTRL_TACLS: ctrl_ta.constructor,
39
+ bit_cnt_per_unit_v: 8 * ctrl_ta.constructor.BYTES_PER_ELEMENT,
40
+ ctrl_load_hint,
41
+ ctrl_ta,
42
+ ctrl_vw: ctrl_ta.subarray(CTRL_HEAD_CNT),
43
+ ctrl_entries: ctrl_ta.subarray(CTRL_HEAD_CNT, CTRL_HEAD_CNT+len),
44
+ PTR_TACLS: ptr_ta.constructor,
45
+ ptr_load_hint,
46
+ ptr_ta,
47
+ ptr_vw: ptr_ta.subarray(PTR_HEAD_CNT),
48
+ });
49
+ }
50
+ const _getters = require("./getter");
51
+ const _mthds = require("./mthd");
52
+ _patch.add_getters(Slabs,_getters);
53
+ _patch.add_mthds(Slabs,_mthds);
54
+ Object.defineProperty(Slabs.prototype,Symbol.toStringTag,{get:function(){return JSON.stringify(this.stats,null,2)}});
55
+
56
+ /////
57
+
58
+ const creat_non_inline_on_aligned_external_ab_aft_calc_cfg =(
59
+ ab,offset,
60
+ cfg,
61
+ data_ptr,
62
+ )=>{
63
+ cfg.data_inline = false;
64
+ cfg.data_ptr = data_ptr;
65
+ const [{ctrl_load_hint,ctrl_ta,ptr_load_hint, ptr_ta,ctrl_vw,ptr_vw},new_offset] = _ctor.creat_tas_with_ab_and_aligned_offset(ab,offset,cfg);
66
+ _ctor.init_vws(cfg,ctrl_vw,ptr_vw);
67
+ return new Slabs(ctrl_load_hint,ctrl_ta,ptr_load_hint, ptr_ta);
68
+ }
69
+
70
+
71
+
72
+ ////
73
+
74
+ const creat_on_external_ab = (
75
+ underlying, // ArrayBuffer | {src:ArrayBuffer,offset:Number}
76
+ cfg = creat_dflt_cfg(),
77
+ data = {ptr:0,inline:false} // Number | {inline:fasle,ptr:Number}
78
+ ) => {
79
+ underlying = fmt_underlying(underlying);
80
+ data = fmt_data(data);
81
+ cfg = _util.calc_slab_info(cfg,data);
82
+ const {ctrl_load_hint,ctrl_ta,ptr_load_hint, ptr_ta,ctrl_vw,ptr_vw} = _ctor.creat_tas(underlying,cfg,data);
83
+ _ctor.init_vws(cfg,ctrl_vw,ptr_vw);
84
+ return new Slabs(ctrl_load_hint,ctrl_ta,ptr_load_hint, ptr_ta);
85
+ }
86
+ const creat = (cfg=creat_dflt_cfg(),data={ptr:0,inline:false})=>creat_on_external_ab(null,cfg,data);
87
+
88
+ const preload = (u8a)=>{
89
+ var offset = 0;
90
+ const CTRL_TACLS = get_cls_from_dump_fst_byte(u8a[offset]); // CLS_BYT
91
+ offset += 1;
92
+ const ctrl_algn = CTRL_TACLS.BYTES_PER_ELEMENT;
93
+ const pad_bfr_ctrl_sz = u8a[offset]; // pad-bfr-ctrl
94
+ offset += 1;
95
+ offset += pad_bfr_ctrl_sz; var ctrl_ta_offset = offset;
96
+ var dv = new DataView(u8a.buffer,u8a.byteOffset,u8a.byteLength);
97
+ const pool_cnt = read_dv_with_cls(dv,CTRL_TACLS,offset,true);
98
+ offset += CTRL_TACLS.BYTES_PER_ELEMENT;
99
+ var total_ctrl_bits_sz = 0;
100
+
101
+ for(let slab_id =0; slab_id<pool_cnt; slab_id++) {
102
+ offset += CTRL_TACLS.BYTES_PER_ELEMENT * SLAB_STRIDE_V;
103
+ var mx_cnt = read_dv_with_cls(dv,CTRL_TACLS, offset + slab_mx_cnt_idx,true);
104
+ total_ctrl_bits_sz += _util.calc_ctrl_bits_sz(mx_cnt,CTRL_TACLS);
105
+ }
106
+ offset += total_ctrl_bits_sz;
107
+ const PTR_TACLS = get_cls_from_dump_fst_byte(u8a[offset]);// CLS_BYT
108
+ offset += 1;
109
+ const ptr_algn = PTR_TACLS.BYTES_PER_ELEMENT;
110
+ const pad_bfr_ptr_sz = u8a[offset]; // pad-bfr-ctrl
111
+ offset += 1;
112
+ offset += pad_bfr_ptr_sz; var ptr_ta_offset = offset;
113
+ const data_ptr = read_dv_with_cls(dv,PTR_TACLS,offset,true);
114
+ offset += PTR_TACLS.BYTES_PER_ELEMENT; var ptr_entries_offset = offset;
115
+ offset += PTR_TACLS.BYTES_PER_ELEMENT *pool_cnt;
116
+ var N = read_dv_with_cls(dv,BigInt64Array,offset,true);
117
+ const data_inline = N >0;
118
+ if(N<0n) {N=-N;}
119
+ const data_sz = Number(N >>8n);
120
+ const data_algn = Number((N & 0xF0n) >> 4n);
121
+ const pad_bfr_data_sz = Number(N&0x0Fn);
122
+ offset += 8;
123
+ const cp_algn = Math.max(ctrl_algn,ptr_algn);
124
+ const cp_sz = offset;
125
+ return {
126
+ offset,
127
+ CTRL_TACLS, ctrl_algn,ctrl_ta_offset,pool_cnt, pad_bfr_ctrl_sz,
128
+ PTR_TACLS, ptr_algn, ptr_ta_offset, data_ptr, pad_bfr_ptr_sz,
129
+ data_inline,data_algn,data_sz,pad_bfr_data_sz,
130
+ cp_algn, cp_sz,
131
+ }
132
+ }
133
+
134
+ const load_non_inline_aft_preload = (u8a,preload_info)=>{
135
+ var abs_offset = u8a.byteOffset;
136
+ let {
137
+ offset,
138
+ CTRL_TACLS, ctrl_algn,ctrl_ta_offset,pool_cnt, pad_bfr_ctrl_sz,
139
+ PTR_TACLS, ptr_algn, ptr_ta_offset, data_ptr, pad_bfr_ptr_sz,
140
+ data_inline,data_algn,data_sz,pad_bfr_data_sz,
141
+ cp_algn, cp_sz,
142
+ } = preload_info;
143
+ const total_sz = offset;
144
+ if(u8a.byteLength < total_sz) {throw(`u8a.byteLength(${u8a.byteLength}) MUST >= ${total_sz}`)}
145
+ if(abs_offset % cp_algn === 0) {
146
+ } else {
147
+ u8a = u8a.slice(0);
148
+ abs_offset = 0;
149
+ }
150
+ {
151
+ var ctrl_load_hint = u8a.subarray(0,LOAD_HINT_SZ);
152
+ var ctrl_ta = new CTRL_TACLS(u8a.buffer,abs_offset + LOAD_HINT_SZ, (ptr_ta_offset- pad_bfr_ptr_sz - LOAD_HINT_SZ - ctrl_ta_offset)/CTRL_TACLS.BYTES_PER_ELEMENT);
153
+ var ptr_load_hint = u8a.subarray(ptr_ta_offset-LOAD_HINT_SZ, ptr_ta_offset);
154
+ var ptr_ta = new PTR_TACLS(u8a.buffer,abs_offset + ptr_ta_offset, PTR_HEAD_CNT + pool_cnt);
155
+ return new Slabs(ctrl_load_hint,ctrl_ta,ptr_load_hint, ptr_ta);
156
+ }
157
+ }
158
+
159
+ const load_inline_aft_preload = (u8a,preload_info)=>{
160
+ var abs_offset = u8a.byteOffset;
161
+ let {
162
+ offset,
163
+ CTRL_TACLS, ctrl_algn,ctrl_ta_offset,pool_cnt, pad_bfr_ctrl_sz,
164
+ PTR_TACLS, ptr_algn, ptr_ta_offset, data_ptr, pad_bfr_ptr_sz,
165
+ data_inline,data_algn,data_sz,pad_bfr_data_sz,
166
+ cp_algn, cp_sz,
167
+ } = preload_info;
168
+ offset += pad_bfr_data_sz; var data_offset = offset;
169
+ const total_sz = offset +data_sz;
170
+ const cpd_algn = Math.max(cp_algn,data_algn);
171
+ if(u8a.byteLength < total_sz) {throw(`u8a.byteLength(${u8a.byteLength}) MUST >= ${total_sz}`)}
172
+ if(abs_offset % cpd_algn === 0) {
173
+ } else {
174
+ u8a = u8a.slice(0);
175
+ abs_offset = 0;
176
+ }
177
+ {
178
+ var ctrl_load_hint = u8a.subarray(0,LOAD_HINT_SZ);
179
+ var ctrl_ta = new CTRL_TACLS(u8a.buffer,abs_offset + LOAD_HINT_SZ, (ptr_ta_offset- pad_bfr_ptr_sz - LOAD_HINT_SZ - ctrl_ta_offset)/CTRL_TACLS.BYTES_PER_ELEMENT);
180
+ var ptr_load_hint = u8a.subarray(ptr_ta_offset-LOAD_HINT_SZ, ptr_ta_offset);
181
+ var ptr_ta = new PTR_TACLS(u8a.buffer,abs_offset + ptr_ta_offset, PTR_HEAD_CNT + pool_cnt);
182
+ // 修正指针
183
+ ptr_ta[DATA_PTR_IDX] = abs_offset + data_offset;
184
+ var ptr_vw = ptr_ta.subarray(PTR_HEAD_CNT);
185
+ var diff = ptr_ta[DATA_PTR_IDX] - data_ptr;
186
+ for(let slab_id=0;slab_id<pool_cnt;++slab_id) {ptr_vw[slab_id] += diff;}
187
+ return new Slabs(ctrl_load_hint,ctrl_ta,ptr_load_hint, ptr_ta);
188
+ }
189
+ }
190
+
191
+ const load = (u8a)=> {
192
+ const preload_info = preload(u8a);
193
+ if(inline) {
194
+ return load_inline_aft_preload(u8a,preload_info);
195
+ } else {
196
+ return load_non_inline_aft_preload(u8a,preload_info);
197
+ }
198
+ }
199
+
200
+
201
+
202
+ class Buf {
203
+ slabs;
204
+ data;
205
+ constructor(slabs,u8a) {
206
+ this.slabs = slabs;
207
+ this.data = data;
208
+ Object.seal(this);
209
+ }
210
+ dump() {return this.slabs.dump()}
211
+ aloc(sz,algn=1) {
212
+ var [ei,si] = this.slabs.aloc(sz,algn);
213
+ return this.data.subarray(si,ei);
214
+ }
215
+ dloc(u8a) {
216
+ if(u8a.buffer === this.data.buffer) {
217
+ var si = u8a.byteOffset;
218
+ return this.slabs.dloc(si);
219
+ } else {
220
+ return false;
221
+ }
222
+ }
223
+ }
224
+ const _new_buf = (slabs,u8a)=>new Buf(slabs,u8a);
225
+ const new_buf_on_external_ab = (underlying,cfg=creat_dflt_cfg()) => {
226
+ const data = {ptr:0,inline:true};
227
+ cfg = _util.calc_slab_info(cfg,data);
228
+ const rslt = _ctor.creat_tas(underlying,cfg,data);
229
+ const {ctrl_load_hint,ctrl_ta,ptr_load_hint, ptr_ta,ctrl_vw,ptr_vw} = rslt;
230
+ _ctor.init_vws(cfg,ctrl_vw,ptr_vw);
231
+ return _new_buf(new Slabs(ctrl_load_hint,ctrl_ta,ptr_load_hint, ptr_ta),rslt.data);
232
+ }
233
+ const new_buf = (cfg=creat_dflt_cfg())=>new_buf_on_external_ab(null,cfg);
234
+ const load_buf = (u8a)=>{
235
+ var slabs = load(u8a);
236
+ var data_byts = u8a.subarray(slabs._data_ptr_if_inline);
237
+ return _new_buf(slabs,data_byts);
238
+ }
239
+
240
+
241
+ module.exports = creat;
242
+ module.exports.load = load;
243
+ module.exports.creat_on_external_ab = creat_on_external_ab;
244
+ module.exports.creat_dflt_cfg = creat_dflt_cfg;
245
+ module.exports.calc_dflt_slab_info = calc_dflt_slab_info;
246
+ module.exports.creat_non_inline_on_aligned_external_ab_aft_calc_cfg = creat_non_inline_on_aligned_external_ab_aft_calc_cfg;
247
+ module.exports.preload = preload;
248
+ module.exports.load_non_inline_aft_preload = load_non_inline_aft_preload;
249
+ module.exports.load_inline_aft_preload = load_inline_aft_preload;
250
+
251
+ module.exports.new_buf = new_buf;
252
+ module.exports.load_buf = load_buf;
253
+ module.exports.new_buf_on_external_ab = new_buf_on_external_ab;
254
+ _patch.def_ps(module.exports,{
255
+ Slabs,
256
+ Buf,
257
+ _util,
258
+ _const,
259
+ });
260
+
261
+