147926302SCameron Smith #include <stdio.h> 247926302SCameron Smith #include <stdlib.h> 3*56813794SCameron Smith #include <cassert> 4d7abaf6cSCameron Smith #include "streamio.h" 547926302SCameron Smith #include "phio_stream.h" 647926302SCameron Smith #include "phio_posix.h" 747926302SCameron Smith #include "phio_base.h" 8d7abaf6cSCameron Smith 940b3285dSBenjamin Matthews grstream geomRestartStream; 1040b3285dSBenjamin Matthews rstream restartStream; 11a486e66cSCameron Smith 1247926302SCameron Smith static struct phio_ops stream_ops = { 13ecf8d2a9SCameron Smith stream_openfile, 1447926302SCameron Smith stream_closefile, 15a486e66cSCameron Smith stream_readheader, 16ea868eb1SCameron Smith stream_writeheader, 17a486e66cSCameron Smith stream_readdatablock, 18ea868eb1SCameron Smith stream_writedatablock, 1947926302SCameron Smith stream_constructname 2047926302SCameron Smith }; 2147926302SCameron Smith 22*56813794SCameron Smith void streamio_read_r(phio_fp* f, RStream* rs) { 23*56813794SCameron Smith assert(f); 24*56813794SCameron Smith assert(rs); 25*56813794SCameron Smith stream_fp sf = (stream_fp) *f; 26*56813794SCameron Smith sf->mode = 'r'; 27*56813794SCameron Smith } 28*56813794SCameron Smith 29ecf8d2a9SCameron Smith void streamio_setup_read(phio_fp* f, GRStream* grs) { 3047926302SCameron Smith *f = (phio_fp) malloc(sizeof(struct streamio_file)); 3147926302SCameron Smith stream_fp sf = (stream_fp) *f; 32ecf8d2a9SCameron Smith sf->ops = &stream_ops; 33ecf8d2a9SCameron Smith sf->mode = 'r'; 3447926302SCameron Smith sf->grs = grs; 35ecf8d2a9SCameron Smith sf->rs = NULL; 36d7abaf6cSCameron Smith } 3747926302SCameron Smith 38ecf8d2a9SCameron Smith void streamio_setup_write(phio_fp* f, RStream* rs) { 3947926302SCameron Smith *f = (phio_fp) malloc(sizeof(struct streamio_file)); 4047926302SCameron Smith stream_fp sf = (stream_fp) *f; 41ecf8d2a9SCameron Smith sf->ops = &stream_ops; 42ecf8d2a9SCameron Smith sf->mode = 'w'; 43ecf8d2a9SCameron Smith sf->grs = NULL; 4447926302SCameron Smith sf->rs = rs; 45d7abaf6cSCameron Smith } 46a486e66cSCameron Smith 47a486e66cSCameron Smith void streamio_set_gr(grstream grs) { 48a486e66cSCameron Smith geomRestartStream = grs; 49a486e66cSCameron Smith } 50a486e66cSCameron Smith 51a486e66cSCameron Smith grstream streamio_get_gr() { 52a486e66cSCameron Smith return geomRestartStream; 53a486e66cSCameron Smith } 54ea868eb1SCameron Smith 55ea868eb1SCameron Smith void streamio_set_r(rstream rs) { 56ea868eb1SCameron Smith restartStream = rs; 57ea868eb1SCameron Smith } 58ea868eb1SCameron Smith 59ea868eb1SCameron Smith rstream streamio_get_r() { 60ea868eb1SCameron Smith return restartStream; 61ea868eb1SCameron Smith } 62