forked from enlightenment/efl
165 lines
5.9 KiB
Plaintext
165 lines
5.9 KiB
Plaintext
class @beta Efl.Io.Buffer extends Efl.Object
|
|
implements Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer, Efl.Io.Sizer, Efl.Io.Positioner {
|
|
[[Generic In-memory buffer of data to be used as I/O.
|
|
|
|
This class offers both input and output, which can be used at
|
|
the same time since @Efl.Io.Reader.read and @Efl.Io.Writer.write
|
|
use different offsets/position internally.
|
|
|
|
One can get temporary direct access to internal buffer with
|
|
@.slice or steal the buffer with @.binbuf_steal.
|
|
|
|
A fixed sized buffer can be implemented by setting @.limit
|
|
followed by @.preallocate
|
|
]]
|
|
|
|
methods {
|
|
preallocate {
|
|
[[Immediately pre-allocate a buffer of at least a given size.]]
|
|
params {
|
|
@in size: size; [[Amount of bytes to pre-allocate.]]
|
|
}
|
|
}
|
|
|
|
adopt_readonly {
|
|
[[Adopt a read-only slice as buffer's backing store.
|
|
|
|
The slice memory will not be copied and must remain
|
|
alive during the buffer's lifetime. Usually this is
|
|
guaranteed by some global static-const memory or some
|
|
parent object and this buffer being a view of that -- be
|
|
aware of parent memory remaining alive, such as
|
|
"slice,changed" events.
|
|
]]
|
|
params {
|
|
@in slice: const(Eina.Slice); [[Slice to adopt as read-only]]
|
|
}
|
|
}
|
|
|
|
adopt_readwrite {
|
|
[[Adopt a read-write slice as buffer's backing store.
|
|
|
|
The slice memory will not be copied and must remain
|
|
alive during the buffer's lifetime. Usually this is
|
|
guaranteed by some global static memory or some
|
|
parent object and this buffer being a view of that -- be
|
|
aware of parent memory remaining alive, such as
|
|
"slice,changed" events.
|
|
|
|
The memory will be disposed using free() and reallocated
|
|
using realloc().
|
|
]]
|
|
params {
|
|
@in slice: Eina.Rw_Slice; [[Slice to adopt as read-write]]
|
|
}
|
|
}
|
|
|
|
@property limit {
|
|
[[Limit how big the buffer can grow.
|
|
|
|
This affects both @.preallocate and how buffer grows
|
|
when @Efl.Io.Writer.write is called.
|
|
|
|
If you want a buffer of an exact size always set the
|
|
limit before any further calls that can expand it.
|
|
]]
|
|
get { }
|
|
set {
|
|
[[Constructor-only property to set buffer limit. 0 is unlimited]]
|
|
}
|
|
values {
|
|
size: size; [[Defines a maximum buffer size, or 0 to allow unlimited amount of bytes]]
|
|
}
|
|
}
|
|
|
|
@property position_read {
|
|
[[The position used by @Efl.Io.Reader.read.
|
|
|
|
Note that @Efl.Io.Positioner.seek or
|
|
@Efl.Io.Positioner.position.set will affect this property
|
|
and @.position_write.
|
|
|
|
@Efl.Io.Positioner.position.get will return the greatest
|
|
of @.position_read and @.position_write.
|
|
]]
|
|
get { }
|
|
set {
|
|
return: bool (false); [[$true if setting the position succeeded, $false otherwise]]
|
|
}
|
|
values {
|
|
position: uint64; [[Position in buffer]]
|
|
}
|
|
}
|
|
|
|
@property position_write {
|
|
[[The position used by @Efl.Io.Writer.write.
|
|
|
|
Note that @Efl.Io.Positioner.seek or
|
|
@Efl.Io.Positioner.position.set will affect this property
|
|
and @.position_read.
|
|
|
|
@Efl.Io.Positioner.position.get will return the greatest
|
|
of @.position_read and @.position_write.
|
|
]]
|
|
get { }
|
|
set {
|
|
return: bool (false); [[$true if setting the position succeeded, $false otherwise]]
|
|
}
|
|
values {
|
|
position: uint64; [[Position in buffer]]
|
|
}
|
|
}
|
|
|
|
@property slice {
|
|
[[Get a temporary access to buffer's internal memory.
|
|
|
|
The memory pointed by slice may be changed by other
|
|
methods of this class. The event "reallocated" will be
|
|
called in those situations.
|
|
]]
|
|
get { }
|
|
values {
|
|
slice: Eina.Slice; [[Slice of the current buffer, may be invalidated if @Efl.Io.Writer.write,
|
|
@Efl.Io.Closer.close or @Efl.Io.Sizer.resize are called.
|
|
It is the full slice, not a partial one starting at current position.]]
|
|
}
|
|
}
|
|
|
|
binbuf_steal {
|
|
[[Steals the internal buffer memory and returns it as a binbuf.
|
|
|
|
The returned memory must be freed with eina_binbuf_free().
|
|
|
|
On failure, for example a read-only backing store was
|
|
adopted with @.adopt_readonly, NULL is returned.
|
|
]]
|
|
return: ptr(Eina.Binbuf) @move @no_unused; [[Binbuf]]
|
|
}
|
|
}
|
|
|
|
events {
|
|
position_read,changed: void; [[Notifies @.position_read changed]]
|
|
position_write,changed: void; [[Notifies @.position_write changed]]
|
|
reallocated: void; [[Notifies the internal buffer was reallocated, thus whatever was returned by @.slice
|
|
becomes invalid.]]
|
|
}
|
|
|
|
implements {
|
|
Efl.Object.finalize;
|
|
Efl.Object.destructor;
|
|
Efl.Io.Reader.read;
|
|
Efl.Io.Reader.can_read { get; set; }
|
|
Efl.Io.Reader.eos { get; set; }
|
|
Efl.Io.Writer.write;
|
|
Efl.Io.Writer.can_write { get; set; }
|
|
Efl.Io.Closer.close;
|
|
Efl.Io.Closer.closed { get; }
|
|
Efl.Io.Closer.close_on_exec { get; set; }
|
|
Efl.Io.Closer.close_on_invalidate { get; set; }
|
|
Efl.Io.Sizer.resize;
|
|
Efl.Io.Sizer.size { get; }
|
|
Efl.Io.Positioner.seek;
|
|
Efl.Io.Positioner.position { get; }
|
|
}
|
|
}
|