Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
module Fox
#
# A stream is a way to serialize data and objects into a byte stream.
# Each item of data that is saved or loaded from the stream may be byte-swapped,
# thus allowing little-endian machines to read data produced on big endian ones
# and vice-versa.
# Data is serialized exactly as-is. There are no tags or other markers
# inserted into the stream; thus, the stream may be used to save or load arbitrary
# binary data.
# Objects derived from FXObjects may be serialized also; whenever a reference to an
# object is serialized, a table is consulted to determine if the same object has
# been encountered previously; if not, the object is added to the table and then
# its contents are serialized. If the object has been encountered before, only a
# reference to the object is serialized.
# When loading back a serialized object, new instances are constructed using
# the default constructor, and subsequently the object's contents are loaded.
# A special container object may be passed in which is placed in the table
# as if it had been encountered before; this will cause only references to this
# object to be saved. The container object is typically the top-level document
# object which manages all objects contained by it. Additional objects may be
# added using addObject(); these will not be actually saved or loaded.
#
# === Stream status codes
#
# +FXStreamOK+:: OK
# +FXStreamEnd+:: Try read past end of stream
# +FXStreamFull+:: Filled up stream buffer or disk full
# +FXStreamNoWrite+:: Unable to open for write
# +FXStreamNoRead+:: Unable to open for read
# +FXStreamFormat+:: Stream format error
# +FXStreamUnknown+:: Trying to read unknown class
# +FXStreamAlloc+:: Alloc failed
# +FXStreamFailure+:: General failure
#
# === Stream data flow direction
#
# +FXStreamDead+:: Unopened stream
# +FXStreamSave+:: Saving stuff to stream
# +FXStreamLoad+:: Loading stuff from stream
#
# === Stream seeking
#
# +FXFromStart+:: Seek from start position
# +FXFromCurrent+:: Seek from current position
# +FXFromEnd+:: Seek from end position
#
class FXStream
# Stream status [Integer]
attr_reader :status
# Stream direction, one of +FXStreamSave+, +FXStreamLoad+ or +FXStreamDead+.
attr_reader :direction
# Parent object [FXObject]
attr_reader :container
# Available buffer space
attr_accessor :space
# Stream position (an offset from the beginning of the stream) [Integer]
attr_accessor :position
#
# Construct stream with given container object. The container object
# is an object that will itself not be saved to or loaded from the stream,
# but which may be referenced by other objects. These references will be
# properly saved and restored.
#
# ==== Parameters:
#
# +cont+:: the container object, or +nil+ if there is none [FXObject].
#
def initialize(cont=nil) # :yields: theStream
end
#
# Open stream for reading or for writing.
# An initial buffer size may be given, which must be at least 16 bytes.
# If _data_ is not +nil+, it is expected to point to an external data buffer
# of length _size_; otherwise the stream will use an internally managed buffer.
# Returns +true+ on success, +false+ otherwise.
#
# ==== Parameters:
#
# +save_or_load+:: access mode, either +FXStreamSave+ or +FXStreamLoad+ [Integer]
# +size+:: initial buffer size [Integer]
# +data+:: external data buffer (if any) [String]
#
def open(save_or_load, size=8192, data=nil); end
#
# Close stream; returns +true+ if OK.
#
def close(); end
#
# Flush buffer
#
def flush(); end
#
# Get available buffer space
#
def getSpace(); end
#
# Set available buffer space
#
def setSpace(sp); end
#
# Return +true+ if at end of file or error.
#
def eof?; end
#
# Set status code, where _err_ is one of the stream status
# codes listed above.
#
def error=(err); end
# Set the byte-swapped flag to +true+ or +false+.
def bytesSwapped=(swapBytes); end
# Returns +true+ if bytes are swapped for this stream
def bytesSwapped?; end
#
# Set stream to big endian mode if +true+. Byte swapping will
# be enabled if the machine native byte order is not equal to
# the desired byte order.
#
def bigEndian=(big); end
#
# Return +true+ if big endian mode.
#
def bigEndian?; end
end
end