From 4300bb47bc2896011fe11832e794af2da9795616 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Mon, 18 May 2015 02:25:59 -0400 Subject: [PATCH] DataBuffer: * Removed some debug lines * Added FILE *interfacing functions: ** Added peek_from() functions ** Added pop_from() functions ** Added copy_to() functions ** Added push_to() functions --- Jupiter/DataBuffer.cpp | 68 ++++++++++++++++++++++++++++++++++++++--- Jupiter/DataBuffer.h | 48 +++++++++++++++++++++++++++++ Release/Jupiter.lib | Bin 259348 -> 263014 bytes 3 files changed, 112 insertions(+), 4 deletions(-) diff --git a/Jupiter/DataBuffer.cpp b/Jupiter/DataBuffer.cpp index ee90371..f696be0 100644 --- a/Jupiter/DataBuffer.cpp +++ b/Jupiter/DataBuffer.cpp @@ -74,13 +74,73 @@ Jupiter::DataBuffer::~DataBuffer() void Jupiter::DataBuffer::push(const uint8_t *data, size_t size_) { Jupiter::DataBuffer::secure(size_); - fputs("Pushing: \"", stdout); while (size_-- != 0) - { - fputc(*data, stdout); *Jupiter::DataBuffer::end++ = *data++; +} + +void Jupiter::DataBuffer::peek_from(FILE *file) +{ + fpos_t pos; + fgetpos(file, &pos); + Jupiter::DataBuffer::pop_from(file); + fsetpos(file, &pos); +} + +void Jupiter::DataBuffer::peek_from(FILE *file, size_t size_) +{ + fpos_t pos; + fgetpos(file, &pos); + Jupiter::DataBuffer::pop_from(file, size_); + fsetpos(file, &pos); +} + +void Jupiter::DataBuffer::pop_from(FILE *file) +{ + size_t size_; + fread(&size_, sizeof(size_t), 1, file); + Jupiter::DataBuffer::pop_from(file, size_); +} + +void Jupiter::DataBuffer::pop_from(FILE *file, size_t size_) +{ + Jupiter::DataBuffer::secure(size_); + int chr; + while (size_-- != 0) + { + chr = fgetc(file); + if (chr == EOF) + break; + *Jupiter::DataBuffer::end++ = static_cast(chr); } - puts("\""); +} + +void Jupiter::DataBuffer::copy_to(FILE *file) +{ + fwrite(std::addressof(Jupiter::DataBuffer::size()), sizeof(size_t), 1, file); + Jupiter::DataBuffer::copy_to(file, Jupiter::DataBuffer::size()); +} + +void Jupiter::DataBuffer::copy_to(FILE *file, size_t size_) +{ + fwrite(Jupiter::DataBuffer::head, sizeof(uint8_t), size_, file); +} + +void Jupiter::DataBuffer::copy_to(FILE *file, size_t index, size_t size_) +{ + fwrite(Jupiter::DataBuffer::head + index, sizeof(uint8_t), size_, file); +} + +void Jupiter::DataBuffer::push_to(FILE *file) +{ + Jupiter::DataBuffer::copy_to(file); + Jupiter::DataBuffer::head = Jupiter::DataBuffer::base; + Jupiter::DataBuffer::end = Jupiter::DataBuffer::head; +} + +void Jupiter::DataBuffer::push_to(FILE *file, size_t size_) +{ + Jupiter::DataBuffer::copy_to(file, size_); + Jupiter::DataBuffer::head += size_; } size_t Jupiter::DataBuffer::shrink() diff --git a/Jupiter/DataBuffer.h b/Jupiter/DataBuffer.h index d7ddfab..9fdb087 100644 --- a/Jupiter/DataBuffer.h +++ b/Jupiter/DataBuffer.h @@ -141,6 +141,54 @@ namespace Jupiter */ void push(const uint8_t *data, size_t size); + /** + * @brief Peeks a DataBuffer from a file, and appends it to the buffer. + * + * @param file FILE to peek from + */ + void peek_from(FILE *file); + + /** + * @brief Peeks data from a file, and pushes it to the buffer. + * + * @param file FILE to peek from + * @param size Number of octets to peek + */ + void peek_from(FILE *file, size_t size); + + /** + * @brief Pops a DataBuffer from a file, and appends it to the buffer. + * + * @param file FILE to pop from + */ + void pop_from(FILE *file); + + /** + * @brief Pops data from a file, and pushes it to the buffer. + * + * @param file FILE to pop from + * @param size Number of octets to pop + */ + void pop_from(FILE *file, size_t size); + + /** + * @brief Copies the buffer to a file. + * + * @param file FILE to copy to + */ + void copy_to(FILE *file); + + /** + * @brief Copies data from the buffer to a file. + * + * @param file FILE to copy to + * @param size Number of octets to copy + */ + void copy_to(FILE *file, size_t size); + void copy_to(FILE *file, size_t index, size_t size); + void push_to(FILE *file); + void push_to(FILE *file, size_t size); + /** * @brief Shrinks the buffer to the smallest possible size. * diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index d152c03f9c0ca74db042fdf0e6d5f5a850467fd6..d455bb3d3856e7616cc50e41d7e1842dd7316667 100644 GIT binary patch delta 35439 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