From 90879c4b35b8b79fccef24ec94a156e5c8c2940e Mon Sep 17 00:00:00 2001 From: Siddharth Kurella <siddharthkurella@gmail.com> Date: Fri, 5 Oct 2018 10:30:03 -0700 Subject: [PATCH] Flesh out design doc --- DesignDocument.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/DesignDocument.md b/DesignDocument.md index 626498a..9b49686 100644 --- a/DesignDocument.md +++ b/DesignDocument.md @@ -1,6 +1,85 @@ # Project 1 (Zip) Design Document # -------- +#### Part 1: ZIP Files #### + +- Briefly describe the data structures you used, if any, to manage + the ZIP file format structures.<pre> +**TODO**: Answer this question +</pre><br> + +- What approach to reading and writing files from disk did you take? + Why did you choose this approach?<pre> +**TODO**: Answer this question +</pre><br> + +- How does your unzip program find the start of the file data?<pre> +**TODO**: Answer this question +</pre><br> + +- Does your solution have any error handling capabilities? What happens + when a user provides an invalid or non-existant file? + What happens if a file read or write fails?<pre> +**TODO**: Answer this question +</pre><br> + +#### Part 2: Inflating DEFLATE Streams #### + +- How does your program handle reading sequences of bits from the DEFLATE + stream (keeping in mind that they may not be byte-aligned)? + Give an overview of any data structures or abstractions you used, and why. + <pre> +**TODO**: Answer this question +</pre><br> + +- How does your program decompress DEFLATE streams (that may include + both fixed and dynamic blocks)? Provide a brief overview of the program-flow + involved in the decompression. Include the names of important functions and + explain their purpose.<pre> +**TODO**: Answer this question +</pre><br> + +- How did you compute and store dynamic Huffman codes? What data structures + did you use and what is the time complexity of matching a single symbol + in your implementation? (Matching a symbol is the operation of reading some + bits from the stream until a valid code is encountered and then decoding + which symbol the code represents.) + Why did you choose to store them in this way?<pre> +**TODO**: Answer this question +</pre><br> + +- How did you implement repeating already-decompressed bytes when you + encountered an LZ77 length-distance pair? + Could you have implemented it more efficiently or elegantly?<pre> +**TODO**: Answer this question +</pre><br> + +#### Part 3: Compressing files with DEFLATE #### + +- How did you implement an efficient search for possible repetitions when + implementing LZ77 compression? Why did you implement it this way? + Could your implementation be more efficient or elegant?<pre> +**TODO**: Answer this question +</pre><br> + +- How did you implement converting the literal / LZ77 symbols into their + Huffman code equivalents? Why did you implement it this way? + Could your implementation be more efficient or elegant?<pre> +**TODO**: Answer this question +</pre><br> + +#### Part 4: Combining all the pieces #### + +- When it came time to put all the parts of the assignment together, were + there any major architectural issues that needed to be resolved before + everything would work together? Did you need to rework portions of the + previous parts? If so, what could have been done differently to avoid this + in the future?<pre> +**TODO**: Answer this question +</pre><br> + +---- + #### Logistics #### - How much time did each partner spend on the project (in hours)?<pre> **TODO**: Answer this question -- GitLab