diff options
Diffstat (limited to 'H64E-2/h64e-model.c')
-rw-r--r-- | H64E-2/h64e-model.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/H64E-2/h64e-model.c b/H64E-2/h64e-model.c index bfdfca2..b794f52 100644 --- a/H64E-2/h64e-model.c +++ b/H64E-2/h64e-model.c @@ -7,3 +7,90 @@ // #include "h64e-model.h" + +int h64e_si_init(H64E_stream_in *in, ssize_t size) +{ + in->size = size; + in->cur_size = 0; + in->buf = malloc(size); + return 0; +} + +//return amount of copied bytes +int h64e_si_data_in(H64E_stream_in *in, uint8_t *data, size_t size) +{ + ssize_t start = in->cur_size; + ssize_t end = start+size; + ssize_t len = 0; + if (end > in->size) + { + end = in->size; + } + + len = end-start; + + memcpy(in->buf, data, len); + + return (int)len; +} + +int h64e_si_data_out(H64E_stream_in *in, uint8_t *data, size_t size) +{ + ssize_t len=0; + + if (size<in->cur_size) + { + len = size; + } else { + len = in->cur_size; + } + + memcpy(data,in->buf,len); + memmove(in->buf,in->buf[len],len); + in->cur_size -= len; + + return len; +} + +int h64e_so_init(H64E_stream_out *out, ssize_t size) +{ + out->size = size; + out->cur_size = 0; + out->buf = malloc(size); + return 0; +} + +int h64e_so_data_in(H64E_stream_in *out, uint8_t *data, size_t size) +{ + ssize_t start = out->cur_size; + ssize_t end = start+size; + ssize_t len = 0; + if (end > out->size) + { + end = out->size; + } + + len = end-start; + + memcpy(out->buf, data, len); + + return (int)len; +} + +int h64e_so_data_out(H64E_stream_in *out, uint8_t *data, size_t size) +{ + ssize_t len=0; + + if (size<out->cur_size) + { + len = size; + } else { + len = out->cur_size; + } + + memcpy(data,out->buf,len); + memmove(out->buf,out->buf[len],len); + out->cur_size -= len; + + return len; +} |