コード例 #1
0
        public static MemoryGroupSpanCache Create <T>(IMemoryOwner <T>[] memoryOwners)
            where T : struct
        {
            IMemoryOwner <T>     owner0 = memoryOwners[0];
            MemoryGroupSpanCache memoryGroupSpanCache = default;

            if (memoryOwners.Length == 1)
            {
                if (owner0 is SharedArrayPoolBuffer <T> sharedPoolBuffer)
                {
                    memoryGroupSpanCache.Mode        = SpanCacheMode.SingleArray;
                    memoryGroupSpanCache.SingleArray = sharedPoolBuffer.Array;
                }
                else if (owner0 is UnmanagedBuffer <T> unmanagedBuffer)
                {
                    memoryGroupSpanCache.Mode          = SpanCacheMode.SinglePointer;
                    memoryGroupSpanCache.SinglePointer = unmanagedBuffer.Pointer;
                }
            }
            else if (owner0 is UnmanagedBuffer <T> )
            {
                memoryGroupSpanCache.Mode         = SpanCacheMode.MultiPointer;
                memoryGroupSpanCache.MultiPointer = new void *[memoryOwners.Length];
                for (int i = 0; i < memoryOwners.Length; i++)
                {
                    memoryGroupSpanCache.MultiPointer[i] = ((UnmanagedBuffer <T>)memoryOwners[i]).Pointer;
                }
            }

            return(memoryGroupSpanCache);
        }
コード例 #2
0
 public Owned(IMemoryOwner <T>[] memoryOwners, int bufferLength, long totalLength, bool swappable)
     : base(bufferLength, totalLength)
 {
     this.memoryOwners         = memoryOwners;
     this.Swappable            = swappable;
     this.View                 = new MemoryGroupView <T>(this);
     this.memoryGroupSpanCache = MemoryGroupSpanCache.Create(memoryOwners);
 }