abstract class SF::InputStream

Overview

Abstract class for custom file input streams

This class allows users to define their own file input sources from which SFML can load resources.

SFML resource classes like SF::Texture and SF::SoundBuffer provide load_from_file and load_from_memory functions, which read data from conventional sources. However, if you have data coming from a different source (over a network, embedded, encrypted, compressed, etc) you can derive your own class from SF::InputStream and load SFML resources with their load_from_stream function.

Usage example:

# custom stream class that reads from inside a zip file
class ZipStream < SF::InputStream
  def initialize(archive : String)
  end

  def open(filename : String)
  end

  def read(data : Slice) : Int64
  end

  def seek(position : Int) : Int64
  end

  def tell : Int64
  end

  def size : Int64
  end

  # [...]
end

# now you can load textures...
stream = ZipStream.new("resources.zip")
stream.open("images/img.png")
texture = SF::Texture.from_stream(stream)

# musics...
stream = ZipStream.new("resources.zip")
stream.open("musics/msc.ogg")
music = SF::Music.from_stream(stream)

# etc.

Direct Known Subclasses

Defined in:

system/obj.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new #

[View source]

Instance Method Detail

def finalize #

[View source]
abstract def read(data : Slice) : Int64 #

Read data from the stream

After reading, the stream's reading position must be advanced by the amount of bytes read.

  • data - Buffer where to copy the read data

Returns: The number of bytes actually read, or -1 on error


[View source]
abstract def seek(position : Int) : Int64 #

Change the current reading position

  • position - The position to seek to, from the beginning

Returns: The position actually sought to, or -1 on error


[View source]
abstract def size : Int64 #

Return the size of the stream

Returns: The total number of bytes available in the stream, or -1 on error


[View source]
abstract def tell : Int64 #

Get the current reading position in the stream

Returns: The current position, or -1 on error.


[View source]