Beispiel #1
0
        public static TManaged?PointerToInstance(TNative *pointer)
        {
            if (pointer == null)
            {
                return(null);
            }

            if (s_instances.TryGetValue((IntPtr)pointer, out var weakRef) &&
                weakRef.TryGetTarget(out var value))
            {
                return(value);
            }

            value = new TManaged
            {
                Pointer = Native.CheckPointer(pointer)
            };
            s_instances[(IntPtr)pointer] = new WeakReference <TManaged>(value);
            return(value);
        }
Beispiel #2
0
 public static TManaged PointerToInstanceNotNull(TNative *pointer) =>
 PointerToInstance(pointer) ?? throw new SdlException();
Beispiel #3
0
 /// <inheritdoc/>
 public virtual void Dispose()
 {
     _       = s_instances.Remove((IntPtr)Pointer);
     Pointer = null;
 }