#ifndef _mov_ioutil_h_ #define _mov_ioutil_h_ #include "mov-buffer.h" struct mov_ioutil_t { struct mov_buffer_t io; void* param; int error; }; static inline int mov_buffer_error(const struct mov_ioutil_t* io) { return io->error; } static inline uint64_t mov_buffer_tell(const struct mov_ioutil_t* io) { int64_t v; v = io->io.tell(io->param); if (v < 0) ((struct mov_ioutil_t*)io)->error = -1; return v; } static inline void mov_buffer_seek(const struct mov_ioutil_t* io, int64_t offset) { // if (0 == io->error) ((struct mov_ioutil_t*)io)->error = io->io.seek(io->param, offset); } static inline void mov_buffer_skip(struct mov_ioutil_t* io, uint64_t bytes) { uint64_t offset; if (0 == io->error) { offset = io->io.tell(io->param); io->error = io->io.seek(io->param, offset + bytes); } } static inline void mov_buffer_read(struct mov_ioutil_t* io, void* data, uint64_t bytes) { if (0 == io->error) io->error = io->io.read(io->param, data, bytes); } static inline void mov_buffer_write(const struct mov_ioutil_t* io, const void* data, uint64_t bytes) { if (0 == io->error) ((struct mov_ioutil_t*)io)->error = io->io.write(io->param, data, bytes); } static inline uint8_t mov_buffer_r8(struct mov_ioutil_t* io) { uint8_t v = 0; mov_buffer_read(io, &v, 1); return v; } static inline uint16_t mov_buffer_r16(struct mov_ioutil_t* io) { uint16_t v; v = mov_buffer_r8(io); v = (v << 8) | mov_buffer_r8(io); return v; } static inline uint32_t mov_buffer_r24(struct mov_ioutil_t* io) { uint32_t v; v = mov_buffer_r8(io); v = (v << 16) | mov_buffer_r16(io); return v; } static inline uint32_t mov_buffer_r32(struct mov_ioutil_t* io) { uint32_t v; v = mov_buffer_r16(io); v = (v << 16) | mov_buffer_r16(io); return v; } static inline uint64_t mov_buffer_r64(struct mov_ioutil_t* io) { uint64_t v; v = mov_buffer_r32(io); v = (v << 32) | mov_buffer_r32(io); return v; } static inline void mov_buffer_w8(const struct mov_ioutil_t* io, uint8_t v) { mov_buffer_write(io, &v, 1); } static inline void mov_buffer_w16(const struct mov_ioutil_t* io, uint16_t v) { mov_buffer_w8(io, (uint8_t)(v >> 8)); mov_buffer_w8(io, (uint8_t)v); } static inline void mov_buffer_w24(const struct mov_ioutil_t* io, uint32_t v) { mov_buffer_w16(io, (uint16_t)(v >> 8)); mov_buffer_w8(io, (uint8_t)v); } static inline void mov_buffer_w32(const struct mov_ioutil_t* io, uint32_t v) { mov_buffer_w16(io, (uint16_t)(v >> 16)); mov_buffer_w16(io, (uint16_t)v); } static inline void mov_buffer_w64(const struct mov_ioutil_t* io, uint64_t v) { mov_buffer_w32(io, (uint32_t)(v >> 32)); mov_buffer_w32(io, (uint32_t)v); } #endif /* !_mov_ioutil_h_ */