efl_io_copier: expose pending_size and add debug to done_get.
authorGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Wed, 7 Dec 2016 19:31:48 +0000 (17:31 -0200)
committerGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Thu, 8 Dec 2016 13:40:45 +0000 (11:40 -0200)
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.

src/lib/ecore/efl_io_copier.c
src/lib/ecore/efl_io_copier.eo

index c92a8efca0a0be4eade871be6e98740f73a3c322..78d14f1fe296b68aa7c9738e91cac5e334342ba9 100644 (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;
 }
 
index 36ad6248434b2e5f5809099a8620f7dcffbffdcc..23198e8fc19bbcf6a68505636ad6840b1c611dbe 100644 (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.