Advertisement
Altair200333

wrapper

Oct 30th, 2021
1,189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.19 KB | None | 0 0
  1.     class PtrAsArrayWrapper<T> : IEnumerable<T> where T : unmanaged
  2.     {
  3.         private LargeIntPtr Ptr { get; set; }
  4.         long _count;
  5.         private unsafe T* data;
  6.         public long Count
  7.         {
  8.             get => _count;
  9.         }
  10.  
  11.         public PtrAsArrayWrapper(LargeIntPtr ptr)
  12.         {
  13.             this.Ptr = ptr;
  14.             _count = ptr.Size / System.Runtime.InteropServices.Marshal.SizeOf(typeof(T));
  15.  
  16.             unsafe
  17.             {
  18.                 data = (T*) Ptr.Ptr.ToPointer();
  19.             }
  20.         }
  21.  
  22.         public T this[long index]
  23.         {
  24.             get
  25.             {
  26.                 unsafe
  27.                 {
  28.                     return *(data + index);
  29.                 }
  30.             }
  31.  
  32.             set
  33.             {
  34.                 unsafe
  35.                 {
  36.                     *(data + index) = value;
  37.                 }
  38.             }
  39.         }
  40.  
  41.  
  42.         public IEnumerator<T> GetEnumerator()
  43.         {
  44.             for (long i = 0; i < Count; i++)
  45.             {
  46.                 yield return this[i];
  47.             }
  48.         }
  49.  
  50.         IEnumerator IEnumerable.GetEnumerator()
  51.         {
  52.             return GetEnumerator();
  53.         }
  54.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement