IKVM11  11
Java SE 11 Virtual Machine for .NET
Loading...
Searching...
No Matches
DirectBufferMemoryManager.cs
Go to the documentation of this file.
1using System;
2using System.Buffers;
3
4using IKVM.Runtime;
6
8{
9
10#if FIRST_PASS == false
11
17 class DirectBufferMemoryManager : MemoryManager<byte>
18 {
19
20 static BufferAccessor bufferAccessor;
21 static BufferAccessor BufferAccessor => JVM.Internal.BaseAccessors.Get(ref bufferAccessor);
22
23 readonly object buffer;
24
28 public DirectBufferMemoryManager(object buffer)
29 {
30 this.buffer = buffer ?? throw new ArgumentNullException(nameof(buffer));
31 }
32
34 public override unsafe Span<byte> GetSpan() => new Span<byte>((byte*)(IntPtr)BufferAccessor.GetAddress(buffer), BufferAccessor.GetCapacity(buffer));
35
37 public override unsafe MemoryHandle Pin(int elementIndex = 0)
38 {
39 if (elementIndex < 0 || elementIndex >= bufferAccessor.GetCapacity(buffer))
40 throw new ArgumentOutOfRangeException(nameof(elementIndex));
41
42 return new MemoryHandle((byte*)(IntPtr)(bufferAccessor.GetAddress(buffer)) + elementIndex);
43 }
44
46 public override void Unpin()
47 {
48
49 }
50
52 protected override void Dispose(bool disposing)
53 {
54 // Java deals with this through the use of a Cleaner
55 // TODO I think we should own this
56 }
57
58 }
59
60#endif
61
62}
Main state of the running JVM.
Provides a MemoryManager<T> implementation backed by a Java DirectBuffer. This is a bit backward beca...
DirectBufferMemoryManager(object buffer)
Initializes a new instance.
override unsafe MemoryHandle Pin(int elementIndex=0)