예제 #1
0
            internal nuint Read(Native.SDL_RWops *_, void *ptr, nuint size, nuint maxnum)
            {
                uint numberRead   = 0;
                var  sizeNumber   = (uint)size;
                var  maxNumNumber = (uint)maxnum;
                var  bytePointer  = (byte *)ptr;
                var  byteIndex    = 0;

                bool InBounds() => _index + sizeNumber < _array.Length;

                if (_isClosed || !InBounds())
                {
                    return(0);
                }

                while (maxNumNumber > 0 && InBounds())
                {
                    maxNumNumber--;
                    numberRead++;

                    for (var index = 0; index < sizeNumber; index++)
                    {
                        bytePointer[byteIndex++] = _array[_index++];
                    }
                }

                return(numberRead);
            }
예제 #2
0
            internal long Seek(Native.SDL_RWops *_, long offset, SeekType whence)
            {
                var newIndex = _index;

                switch (whence)
                {
                case SeekType.Set:
                    newIndex = (int)offset;
                    break;

                case SeekType.Current:
                    newIndex += (int)offset;
                    break;

                case SeekType.End:
                    newIndex = _array.Length + (int)offset;
                    break;
                }

                if (newIndex < 0 || newIndex >= _array.Length)
                {
                    return(-1);
                }

                _index = newIndex;
                return(_index);
            }
예제 #3
0
 internal int Close(Native.SDL_RWops *_)
 {
     if (_isClosed)
     {
         return(-1);
     }
     _isClosed = true;
     return(0);
 }
예제 #4
0
 internal static nuint Write(Native.SDL_RWops *_1, void *_2, nuint _3, nuint _4) => 0;
예제 #5
0
 public long Size(Native.SDL_RWops *_) => _isClosed ? -1 : _array.Length;
예제 #6
0
#pragma warning disable IDE1006, RCS1163
            internal UIntPtr Write(Native.SDL_RWops *_1, void *_2, UIntPtr _3, UIntPtr _4) => UIntPtr.Zero;