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); }
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); }
internal int Close(Native.SDL_RWops *_) { if (_isClosed) { return(-1); } _isClosed = true; return(0); }
internal static nuint Write(Native.SDL_RWops *_1, void *_2, nuint _3, nuint _4) => 0;
public long Size(Native.SDL_RWops *_) => _isClosed ? -1 : _array.Length;
#pragma warning disable IDE1006, RCS1163 internal UIntPtr Write(Native.SDL_RWops *_1, void *_2, UIntPtr _3, UIntPtr _4) => UIntPtr.Zero;