11import { 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
46import { Bus } from '../bus/bus'
57
@@ -15,12 +17,15 @@ export interface MemoryOperation {
1517}
1618
1719export 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