diff --git a/DesignDocument.md b/DesignDocument.md index 626498a6af956d1a6ca1e0f3ad4b741c1c4cf70d..9b49686a074e3ea87036f05065e4f091fa648e71 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