This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
haas:summer2015:data:projects:dln0 [2015/05/29 15:16] – created wedge | haas:summer2015:data:projects:dln0 [2015/06/21 20:51] (current) – [node operation status codes] wedge | ||
---|---|---|---|
Line 16: | Line 16: | ||
In this project, we take our first opportunity to undergo a complete code re-write of node functionality, | In this project, we take our first opportunity to undergo a complete code re-write of node functionality, | ||
- | =====Procedure to Obtain | + | =====Procedure to obtain |
As this is a rewrite, dln0 is not based on any of the code you have written up to this point. As such, the transition process is slightly different: | As this is a rewrite, dln0 is not based on any of the code you have written up to this point. As such, the transition process is slightly different: | ||
<cli> | <cli> | ||
- | lab46: | + | lab46: |
... | ... | ||
</ | </ | ||
Line 39: | Line 39: | ||
#include < | #include < | ||
+ | #include " | ||
+ | // node struct | ||
+ | // | ||
struct node { | struct node { | ||
char | char | ||
Line 45: | Line 48: | ||
struct node *prior; | struct node *prior; | ||
}; | }; | ||
- | typedef struct node Node; | ||
- | Node *mknode(char | + | // function prototypes |
- | Node *cpnode(Node *); | + | // |
- | Node *rmnode(Node *); | + | code_t |
+ | code_t | ||
+ | code_t | ||
#endif | #endif | ||
Line 58: | Line 62: | ||
The node info element has been renamed to " | The node info element has been renamed to " | ||
- | ====In inc/list.h==== | + | ====In inc/data.h==== |
+ | You'll notice that node.h includes a file called data.h; This header will contain predominantly useful #define statements, typedefs, and support function prototypes to make our lives easier. It will see additional content added with future projects. | ||
<code c 1> | <code c 1> | ||
- | # | + | # |
- | # | + | # |
- | #include " | + | // custom types (mostly for shortening typing) |
+ | // | ||
+ | typedef struct | ||
+ | typedef unsigned long long int code_t; // status code data type | ||
+ | typedef unsigned long long int ulli; | ||
+ | typedef | ||
- | # | + | // Status codes for the doubly linked node implementation |
- | # | + | // |
- | # | + | # |
- | # | + | # |
- | # | + | # |
- | # | + | # |
- | # | + | # |
+ | # | ||
+ | # | ||
+ | # | ||
- | struct list { | + | // Function prototypes |
- | Node *first; | + | // |
- | | + | void lscodes(code_t); |
- | }; | + | |
- | typedef struct list List; // because we deserve nice things | + | |
- | + | ||
- | int mklist | + | |
- | int cplist (List *, List **); // duplicate list contents | + | |
- | + | ||
- | int insert (List **, Node *, Node *); // add node before given node | + | |
- | int append (List **, Node *, Node *); // add node after given node | + | |
- | + | ||
- | int display(List *, int); // display list from start to end | + | |
- | int find (List *, int, Node **); // locate node containing value | + | |
#endif | #endif | ||
</ | </ | ||
- | The following changes have taken place: | + | ====node operation status codes==== |
- | + | You'll notice the presence of a set of # | |
- | * **qty** has been removed from the list | + | |
- | * **getpos()**/ | + | |
- | * **searchlist()** has been renamed to **find()** (aesthetic change, to keep function names at 8 characters or less, and now supports resuming (finding additional matches). | + | |
- | * **displayf()/ | + | |
- | + | ||
- | There is now a set of status/ | + | |
- | + | ||
- | ====list operation status codes==== | + | |
- | You'll notice the presence of a set of # | + | |
They are not exclusive- in some cases, multiple states can be applied. The intent is that you will OR together all pertinent states and return that from the function. | They are not exclusive- in some cases, multiple states can be applied. The intent is that you will OR together all pertinent states and return that from the function. | ||
- | * **DLL_SUCCESS** - everything went according to plan, no errors encountered, | + | * **DLN_SUCCESS** - everything went according to plan, no errors encountered, |
- | * **DLL_MALLOC_FAIL** - memory allocation failed (considered in error) | + | * **DLN_MALLOC_FAIL** - memory allocation failed (considered in error) |
- | * **DLL_ALREADY_ALLOC** - memory has already been allocated (considered in error) | + | * **DLN_ALREADY_ALLOC** - memory has already been allocated (considered in error) |
- | * **DLL_NULL** - result is NULL (probably in error) | + | * **DLN_NULL** - result is NULL (probably in error) |
- | * **DLL_EMPTY** - result is an empty list (may or may not be in error) | + | * **DLN_DEFAULT_FAIL** - default state of unimplemented functions |
- | * **DLL_DEFAULT_FAIL** - default state of unimplemented functions (default | + | * **DLN_ERROR** - some error occurred |
- | * **DLL_FAIL** - some error occurred | + | * **DLN_INVALID** - invalid use (NULL pointer) |
+ | * **DLN_RESERVED_CODE** - reserved for future use (not used at present time) | ||
- | For example, in the case of "DLL_MALLOC_FAIL", there are actually a total of three states raised: | + | For example, in the case of "DLN_MALLOC_FAIL", there are actually a total of three states raised: |
- | * DLL_FAIL | + | * DLN_ERROR |
- | * DLL_MALLOC_FAIL | + | * DLN_MALLOC_FAIL |
- | * DLL_NULL | + | * DLN_NULL |
ALL THREE states must be returned from the function in question should such an occurrence take place. | ALL THREE states must be returned from the function in question should such an occurrence take place. | ||
- | ====list library==== | + | |
+ | You'll notice these #defines map to numeric values, and particular ones at that. This is to our supreme advantage: if you understand how numbers work, you should have an easy time of working with these status codes. | ||
+ | ====node library==== | ||
In **src/ | In **src/ | ||
- | |||
- | In **src/ | ||
Figure out what is going on, the connections, | Figure out what is going on, the connections, | ||
Line 129: | Line 123: | ||
Be sure to focus on implementing the functionality from scratch (the more you do this from scratch, vs. referencing old code, the more it will help you). | Be sure to focus on implementing the functionality from scratch (the more you do this from scratch, vs. referencing old code, the more it will help you). | ||
- | ====List library unit tests==== | ||
- | In **unit/ | ||
- | |||
- | * **unit-mklist.c** - unit test for **mklist()** library function | ||
- | * **unit-cplist.c** - unit test for **cplist()** library function | ||
- | * **unit-append.c** - unit test for **append()** library function | ||
- | * **unit-insert.c** - unit test for **insert()** library function | ||
- | * **unit-find.c** - unit test for **find()** library function | ||
- | * **unit-display.c** - unit test for **display()** library function | ||
- | |||
- | Enhancements to these unit tests may be provided via dll0 project updates. | ||
- | |||
- | There are also corresponding **verify-FUNCTION.sh** scripts that will output a " | ||
- | |||
- | These are complete runnable programs (when compiled, and linked against the list library, which is all handled for you by the **Makefile** system in place). | ||
- | |||
- | Of particular importance, I want you to take a close look at: | ||
- | |||
- | * the source code to each of these unit tests | ||
- | * the purpose of these programs is to validate the correct functionality of the respective library functions | ||
- | * follow the logic | ||
- | * make sure you understand what is going on | ||
- | * ask questions to get clarification! | ||
- | * the output from these programs once compiled and ran | ||
- | * analyze the output | ||
- | * make sure you understand what is going on | ||
- | * ask questions to get clarification! | ||
=====Expected Results===== | =====Expected Results===== | ||
Line 164: | Line 131: | ||
<cli> | <cli> | ||
- | lab46: | + | lab46: |
==================================================== | ==================================================== | ||
= Verifying Doubly-Linked Node Functionality | = Verifying Doubly-Linked Node Functionality | ||
==================================================== | ==================================================== | ||
- | | + | [mknode] Total: |
- | [cpnode] Total: | + | |
- | [rmnode] Total: | + | |
==================================================== | ==================================================== | ||
- | [RESULTS] Total: | + | [RESULTS] Total: |
==================================================== | ==================================================== | ||
- | lab46: | + | lab46: |
</ | </ | ||
- | ====list library==== | ||
- | Here is what you should get for list: | ||
- | |||
- | <cli> | ||
- | lab46: | ||
- | ==================================================== | ||
- | = Verifying Doubly-Linked List Functionality | ||
- | ==================================================== | ||
- | [mklist] Total: | ||
- | [cplist] Total: | ||
- | [append] Total: | ||
- | [insert] Total: | ||
- | | ||
- | [find] Total: | ||
- | ==================================================== | ||
- | | ||
- | ==================================================== | ||
- | lab46: | ||
- | </ | ||
- | =====Submission Criteria===== | ||
- | To be successful in this project, the following criteria must be met: | ||
- | * Project must be submit on time, by the posted deadline. | + | =====Submission===== |
- | * Late submissions will lose 25% credit per day, with the submission window closing on the 4th day following the deadline. | + | {{page> |
- | * All code must compile cleanly (no warnings or errors) | + | |
- | * all requested functions must be implemented in the related library | + | |
- | * all requested functionality must conform to stated requirements (either on this project | + | |
- | * Executed programs must display in a manner similar to provided output | + | |
- | * output formatted, where applicable, must match that of project requirements | + | |
- | * Processing must be correct based on input given and output requested | + | |
- | * Output must be correct (i.e. the list visualization, | + | |
- | * Code must be nicely and consistently indented (you may use the **indent** tool) | + | |
- | * Code must be commented | + | |
- | * Any "to be implemented" | + | |
- | * these "to be implemented" | + | |
- | * Sufficient comments explaining the point of provided logic **MUST** be present | + | |
- | * Track/ | + | |
- | * Submit a copy of your source code to me using the **submit** tool (**make submit** will do this) by the deadline. | + |