efl_io_copier: expose pending_size and add debug to done_get.

In some cases the copier isn't done but you know there is not more
data to arrive at it, then you want to know if all pending data was
flushed from the copier's intermediate buffer to the destination, if
so you can call it closed yourself.
This commit is contained in:
Gustavo Sverzut Barbieri 2016-12-07 17:31:48 -02:00
parent bb5f91273c
commit c33ed61e17
2 changed files with 36 additions and 2 deletions

View File

@ -781,9 +781,26 @@ _efl_io_copier_flush(Eo *o, Efl_Io_Copier_Data *pd, Eina_Bool may_block, Eina_Bo
return pd->done;
}
EOLIAN static Eina_Bool
_efl_io_copier_done_get(Eo *o EINA_UNUSED, Efl_Io_Copier_Data *pd)
EOLIAN static size_t
_efl_io_copier_pending_size_get(Eo *o EINA_UNUSED, Efl_Io_Copier_Data *pd)
{
return pd->buf ? eina_binbuf_length_get(pd->buf) : 0;
}
EOLIAN static Eina_Bool
_efl_io_copier_done_get(Eo *o, Efl_Io_Copier_Data *pd)
{
DBG("%p done=%d pending=%zd source={%p %s, eos=%d, closed=%d}, destination={%p %s, closed=%d}",
o, pd->done,
pd->buf ? eina_binbuf_length_get(pd->buf) : 0,
pd->source,
pd->source ? efl_class_name_get(pd->source) : "",
pd->source ? efl_io_reader_eos_get(pd->source) : 1,
pd->source ? (efl_isa(pd->source, EFL_IO_CLOSER_MIXIN) ? efl_io_closer_closed_get(pd->source) : 0) : 1,
pd->destination,
pd->destination ? efl_class_name_get(pd->destination) : "",
pd->destination ? (efl_isa(pd->destination, EFL_IO_CLOSER_MIXIN) ? efl_io_closer_closed_get(pd->destination) : 0) : 1);
return pd->done;
}

View File

@ -313,6 +313,23 @@ class Efl.Io.Copier (Efl.Loop_User, Efl.Io.Closer) {
return: free(own(ptr(Eina.Binbuf)), eina_binbuf_free) @warn_unused; [[Binbuf]]
}
@property pending_size {
[[Returns the size of the pending buffer.
The pending buffer is an intermediate buffer where data
is read from @.source before it's written to
@.destination, if any.
This is the equivalent of the size of returned by
@.binbuf_steal, however it doesn't steal or modify the
buffer at all, just query its internal size.
]]
get { }
values {
size: size; [[The pending buffer size, in bytes.]]
}
}
flush {
[[Forces reading from source and writing to destination.