Skip to content

Commit 3f7615a

Browse files
committed
reactor(core/memory): simplify
1 parent 96a0633 commit 3f7615a

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

src/common/asObservable.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import type { Subject } from 'rxjs'
2+
3+
export type AsObservable<T extends Subject<unknown>> = Omit<T, 'next' | 'error' | 'complete'>
4+
5+
export function asObservable<T extends Subject<unknown>>(subject: T): AsObservable<T> {
6+
return subject
7+
}

src/core/memory/memory.ts

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { inject } from 'di-wise'
2-
import { filter, map, type Observable } from 'rxjs'
2+
import { BehaviorSubject, filter, map, type Observable } from 'rxjs'
3+
4+
import { asObservable } from '@/common/asObservable'
35

46
import { Bus } from '../bus/bus'
57

@@ -15,12 +17,15 @@ export interface MemoryOperation {
1517
}
1618

1719
export class Memory {
18-
private readonly buffer = new Uint8Array(0x100)
20+
private _buffer$ = new BehaviorSubject(new Uint8Array(0x100))
21+
readonly buffer$ = asObservable(this._buffer$)
1922

20-
private dataChangeHandlers = new Set<() => void>()
23+
private get buffer() {
24+
return this._buffer$.getValue()
25+
}
2126

2227
private notifyDataChange = () => {
23-
this.dataChangeHandlers.forEach((handler) => handler())
28+
this._buffer$.next(this.buffer)
2429
}
2530

2631
readonly read$: Observable<MemoryOperation>
@@ -63,15 +68,6 @@ export class Memory {
6368
}
6469
}
6570

66-
getData = (): number[] => {
67-
return Array.from(this.buffer)
68-
}
69-
70-
subscribe = (onDataChange: (() => void)): (() => void) => {
71-
this.dataChangeHandlers.add(onDataChange)
72-
return () => this.dataChangeHandlers.delete(onDataChange)
73-
}
74-
7571
load(data: ArrayLike<number>, offset: number): void {
7672
this.buffer.set(data, offset)
7773
this.notifyDataChange()

0 commit comments

Comments
 (0)