@@ -21,34 +21,41 @@ use crate::{
2121
2222pub struct ReferenceMemory < MemoryError > {
2323 address : u64 ,
24- inner : Arc < dyn MemoryView < Error = MemoryError > > ,
24+ inner : Arc < dyn MemoryView < MemoryError > > ,
2525}
2626
2727impl < MemoryError > ReferenceMemory < MemoryError > {
2828 pub fn address ( & self ) -> u64 {
2929 self . address
3030 }
3131
32- pub fn memory_view ( & self ) -> & Arc < dyn MemoryView < Error = MemoryError > > {
32+ pub fn memory_view ( & self ) -> & Arc < dyn MemoryView < MemoryError > > {
3333 & self . inner
3434 }
3535}
3636
37- impl < MemoryError > MemoryView for ReferenceMemory < MemoryError > {
38- type Error = MemoryError ;
39-
40- fn read_memory ( & self , offset : u64 , buffer : & mut [ u8 ] ) -> Result < ( ) , Self :: Error > {
37+ impl < MemoryError > MemoryView < MemoryError > for ReferenceMemory < MemoryError > {
38+ fn read_memory ( & self , offset : u64 , buffer : & mut [ u8 ] ) -> Result < ( ) , MemoryError > {
4139 self . inner . read_memory ( self . address + offset, buffer)
4240 }
4341}
4442
43+ impl < MemoryError > Clone for ReferenceMemory < MemoryError > {
44+ fn clone ( & self ) -> Self {
45+ Self {
46+ address : self . address ,
47+ inner : self . inner . clone ( ) ,
48+ }
49+ }
50+ }
51+
4552/// A reference to an object living in the underlying memory view.
4653pub struct Reference < T : ?Sized + Viewable , MemoryError : ' static > {
4754 inner : T :: Instance < ReferenceMemory < MemoryError > > ,
4855}
4956
5057impl < T : ?Sized + Viewable , MemoryError : ' static > Reference < T , MemoryError > {
51- pub fn new ( memory : Arc < dyn MemoryView < Error = MemoryError > > , address : u64 ) -> Self {
58+ pub fn new ( memory : Arc < dyn MemoryView < MemoryError > > , address : u64 ) -> Self {
5259 Self {
5360 inner : T :: create_view ( ReferenceMemory {
5461 address,
@@ -62,7 +69,7 @@ impl<T: ?Sized + Viewable, MemoryError: 'static> Reference<T, MemoryError> {
6269 memory. address
6370 }
6471
65- pub fn base_memory ( & self ) -> & Arc < dyn MemoryView < Error = MemoryError > > {
72+ pub fn base_memory ( & self ) -> & Arc < dyn MemoryView < MemoryError > > {
6673 let memory = self . inner . object_memory ( ) ;
6774 & memory. inner
6875 }
@@ -98,3 +105,14 @@ impl<T: Viewable + ?Sized, MemoryError> Deref for Reference<T, MemoryError> {
98105 self . inner . get_accessor ( )
99106 }
100107}
108+
109+ impl < T : Viewable + ?Sized , MemoryError > Clone for Reference < T , MemoryError >
110+ where
111+ T :: Instance < ReferenceMemory < MemoryError > > : Clone ,
112+ {
113+ fn clone ( & self ) -> Self {
114+ Self {
115+ inner : self . inner . clone ( ) ,
116+ }
117+ }
118+ }
0 commit comments