@nxtedition/shared 1.2.0 → 1.2.1

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.
Files changed (2) hide show
  1. package/index.js +28 -57
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -68,17 +68,26 @@ export function writer({ sharedState, sharedBuffer }) {
68
68
  let writePos = 0
69
69
  let flushing = null
70
70
 
71
- function acquire(len) {
72
- if (!len) {
73
- return Buffer.alloc(0)
71
+ function tryWrite(...raw) {
72
+ if (Array.isArray(raw[0])) {
73
+ raw = raw[0]
74
+ }
75
+
76
+ if (!raw.length) {
77
+ return true
74
78
  }
75
79
 
76
80
  readPos = Atomics.load(state, READ_INDEX)
77
81
 
78
- assert(len < size / 2)
82
+ let maxLen = 4
83
+ for (const buf of raw) {
84
+ maxLen += buf.byteLength ?? buf.length * 3
85
+ }
86
+
87
+ assert(maxLen < size / 2)
79
88
 
80
- if (size - writePos < len + 4) {
81
- if (readPos < len + 4) {
89
+ if (size - writePos < maxLen + 4) {
90
+ if (readPos < maxLen + 4) {
82
91
  return false
83
92
  }
84
93
 
@@ -87,64 +96,31 @@ export function writer({ sharedState, sharedBuffer }) {
87
96
  } else {
88
97
  const available = writePos >= readPos ? size - writePos : readPos - writePos
89
98
 
90
- if (available < len + 4) {
99
+ if (available < maxLen + 4) {
91
100
  return false
92
101
  }
93
102
  }
94
103
 
95
- return buffer.subarray(writePos + 4, writePos + 4 + len)
96
- }
97
-
98
- function acquireSync (len) {
99
- while (true) {
100
- const buf = acquire(len)
101
- if (buf) {
102
- return buf
103
- }
104
- Atomics.wait(state, READ_INDEX, readPos)
105
- }
106
- }
107
-
108
- function release(len) {
109
- buffer.writeInt32LE(len, writePos)
110
- writePos += 4 + len
111
-
112
- Atomics.store(state, WRITE_INDEX, writePos)
113
- Atomics.notify(state, WRITE_INDEX)
114
- }
104
+ const lenPos = writePos
105
+ writePos += 4
115
106
 
116
- function tryWrite(...raw) {
117
- if (Array.isArray(raw[0])) {
118
- raw = raw[0]
119
- }
120
-
121
- if (!raw.length) {
122
- return true
123
- }
124
-
125
- let maxLen = 4
126
- for (const buf of raw) {
127
- maxLen += buf.byteLength ?? buf.length * 3
128
- }
129
-
130
- const dst = acquire(maxLen)
131
- if (!dst) {
132
- return false
133
- }
134
-
135
- let pos = 0
136
107
  for (const buf of raw) {
137
108
  if (typeof buf === 'string') {
138
- pos += buffer.write(buf, pos)
109
+ writePos += buffer.write(buf, writePos)
139
110
  } else {
140
- buffer.set(buf, pos)
141
- pos += buf.byteLength
111
+ buffer.set(buf, writePos)
112
+ writePos += buf.byteLength
142
113
  }
143
114
  }
144
115
 
145
- assert(pos <= maxLen)
116
+ const len = writePos - lenPos
146
117
 
147
- release(pos)
118
+ assert(len <= maxLen)
119
+
120
+ buffer.writeInt32LE(len, lenPos)
121
+
122
+ Atomics.store(state, WRITE_INDEX, writePos)
123
+ Atomics.notify(state, WRITE_INDEX)
148
124
 
149
125
  return true
150
126
  }
@@ -173,10 +149,5 @@ export function writer({ sharedState, sharedBuffer }) {
173
149
  return (flushing ??= flush())
174
150
  }
175
151
 
176
- write.acquireSync = acquireSync
177
- write.acquire = acquire
178
- write.release = release
179
- write.flush = flush
180
-
181
152
  return write
182
153
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/shared",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Ring Buffer for NodeJS cross Worker communication",
5
5
  "main": "index.js",
6
6
  "repository": {