sig
  type t = Sdlrwops.t
  external from_mem : bytes -> Sdl.RWops.t = "caml_SDL_RWFromMem"
  external from_const_mem : string -> Sdl.RWops.t = "caml_SDL_RWFromConstMem"
  external from_file : filename:string -> mode:string -> Sdl.RWops.t
    = "caml_SDL_RWFromFile"
  type input = [ `Buffer of bytes | `Filename of string | `String of string ]
  val from_input :
    [< `Buffer of bytes | `Filename of string | `String of string ] ->
    Sdl.RWops.t
  val from_input_opt :
    [> `Buffer of bytes | `Filename of string | `String of string ] ->
    Sdl.RWops.t option
  external alloc : unit -> Sdl.RWops.t = "caml_SDL_AllocRW"
  external free : Sdl.RWops.t -> unit = "caml_SDL_FreeRW"
  external close : Sdl.RWops.t -> unit = "caml_SDL_CloseRW"
  external size : Sdl.RWops.t -> int64 = "caml_SDL_RWsize"
  type seek = Sdlrwops.seek = SEEK_SET | SEEK_CUR | SEEK_END
  external seek : Sdl.RWops.t -> offset:int64 -> Sdl.RWops.seek -> int64
    = "caml_SDL_RWseek"
  external tell : Sdl.RWops.t -> int64 = "caml_SDL_RWtell"
  type uint8 = int
  type uint16 = int
  type uint32 = int32
  type uint64 = int64
  external readU8 : Sdl.RWops.t -> Sdl.RWops.uint8 = "caml_SDL_ReadU8"
  external writeU8 : Sdl.RWops.t -> Sdl.RWops.uint8 -> unit
    = "caml_SDL_WriteU8"
  module BigEndian = Sdlrwops.BigEndian
  module LittleEndian = Sdlrwops.LittleEndian
end