|
Quash Shell
0.1
A simple yet powerfull shell program
|
Double ended queue generators specialized to any given type. More...
#include <assert.h>#include <stdbool.h>#include <stdio.h>#include <stdlib.h>Go to the source code of this file.
Classes | |
| struct | Example |
| A data structure generated by IMPLEMENT_DEQUE_STRUCT() to store the state of a deque. More... | |
Macros | |
| #define | IMPLEMENT_DEQUE_STRUCT(struct_name, type) |
| Generates a structure for use with Double Ended Queues. More... | |
| #define | PROTOTYPE_DEQUE(struct_name, type) |
| Generates prototypes for functions that manipulate Double Ended Queue structures. More... | |
| #define | IMPLEMENT_DEQUE(struct_name, type) |
| Generates a malloc based set of functions for use with a structure generated by IMPLEMENT_DEQUE_STRUCT() More... | |
Typedefs | |
| typedef char | Type |
| An example type used for example purposes only. | |
| typedef struct Example | Example |
| This way you do not have to type "struct Example" each time you wish to refer to an Example structure. | |
Functions | |
| Example | new_Example (size_t) |
| Create a new, fully initialized deque structure. More... | |
| Example | new_destructable_Example (size_t, void(*)(Type)) |
| Create a new, fully initialized deque structure with a destructor that is applied to every element when the destroy_Example() function is called. More... | |
| void | destroy_Example (Example *) |
| Destroy the deque structure freeing memory if necessary. More... | |
| void | empty_Example (Example *) |
| Quickly empties the deque structure calling a destructor on each element in the deque if a destructor was specified. More... | |
| bool | is_empty_Example (Example *) |
| Checks if the deque is empty. More... | |
| size_t | length_Example (Example *) |
| Query the number of elements in the deque. More... | |
| Type * | as_array_Example (Example *, size_t *) |
| Extract an array based off the deque. More... | |
| void | apply_Example (Example *, void(*)(Type)) |
| Calls the function func on every element in the deque. More... | |
| void | push_front_Example (Example *, Type) |
| Insert an element to the front of the deque. More... | |
| void | push_back_Example (Example *, Type) |
| Insert an element to the back of the deque. More... | |
| Type | pop_front_Example (Example *) |
| Remove an element from the front of the deque. More... | |
| Type | pop_back_Example (Example *) |
| Remove an element from the back of the deque. More... | |
| Type | peek_front_Example (Example *) |
| Get a copy of the element at the front of the deque. More... | |
| Type | peek_back_Example (Example *) |
| Remove an element from the back of the deque. More... | |
| void | update_front_Example (Example *, Type) |
| Change the element at the front of the deque to be a copy of element If a destructor is presesnt, then call the destructor on the value of the element that is being replaced. More... | |
| void | update_back_Example (Example *, Type) |
| Change the element at the back of the deque to be a copy of element. If a destructor is presesnt, then call the destructor on the value of the element that is being replaced. More... | |
| void | update_and_destroy_front_Example (Example *, Type) |
| Change the element at the front of the deque to be a copy of element. If a destructor is presesnt, then call the destructor on the element that is being replaced. More... | |
| void | update_and_destroy_back_Example (Example *, Type) |
| Change the element at the back of the deque to be a copy of element. If a destructor is presesnt, then call the destructor on the element that is being replaced. More... | |
Double ended queue generators specialized to any given type.
| #define IMPLEMENT_DEQUE | ( | struct_name, | |
| type | |||
| ) |
Generates a malloc based set of functions for use with a structure generated by IMPLEMENT_DEQUE_STRUCT()
| struct_name | The name of the structure |
| type | The name of the type of elements stored in the struct_name structure |
| #define IMPLEMENT_DEQUE_STRUCT | ( | struct_name, | |
| type | |||
| ) |
Generates a structure for use with Double Ended Queues.
Follow this call with either PROTOTYPE_DEQUE() (if in a header file) or IMPLEMENT_DEQUE() to generate the functions that correspond to this structure. The structure fields should not be manually changed at any time. Instead use one of the generated functions from the aforementioned macros.
| struct_name | The name of the structure |
| type | The name of the type of elements stored in the struct_name structure |
| #define PROTOTYPE_DEQUE | ( | struct_name, | |
| type | |||
| ) |
Generates prototypes for functions that manipulate Double Ended Queue structures.
This is intended for use in a header file or anywhere you need a forward declaration of these functions. This does not actually implement these functions.
| struct_name | The name of the structure |
| type | The name of the type of elements stored in the struct_name structure |
Calls the function func on every element in the deque.
| deq | A pointer to the deque to apply the function func to |
| func | A pointer to a function that takes an element of type |
Extract an array based off the deque.
| deq | in A pointer to the deque to extract an array from | |
| [out] | len | A pointer to an size_t value. This value will be set to the current length of the deque returned from the length_Example() function. If knowing the length of the array is unnecessary then NULL may be passed as this parameter. |
| void destroy_Example | ( | Example * | deq | ) |
Destroy the deque structure freeing memory if necessary.
| deq | A pointer to the deque to destory |
| void empty_Example | ( | Example * | deq | ) |
Quickly empties the deque structure calling a destructor on each element in the deque if a destructor was specified.
| deq | A pointer to the deque to empty |
| bool is_empty_Example | ( | Example * | deq | ) |
Checks if the deque is empty.
| deq | A pointer to the deque to check if empty |
| size_t length_Example | ( | Example * | deq | ) |
Query the number of elements in the deque.
| deq | A pointer to the deque to calculate the length of |
Create a new, fully initialized deque structure with a destructor that is applied to every element when the destroy_Example() function is called.
Specifying the destructor is useful to not have to manually iterate over the deque destroying any malloc'd memory in each element.
| init_cap | Initial capacity of the deque |
| destructor | A function that is run on each element in the deque when destroy_Example() is called |
| Example new_Example | ( | size_t | init_cap | ) |
Create a new, fully initialized deque structure.
| init_cap | Initial capacity of the deque |
Change the element at the back of the deque to be a copy of element. If a destructor is presesnt, then call the destructor on the element that is being replaced.
| deq | A pointer to the deque to update |
| element | The element to copy into the current last element in the deque |
Change the element at the back of the deque to be a copy of element. If a destructor is presesnt, then call the destructor on the value of the element that is being replaced.
Change the element at the back of the deque to be a copy of element. This will NOT call the destructor on the old element. This is useful for simply replacing a few fields.
| deq | A pointer to the deque to update |
| element | The element to copy into the current last element in the deque |
Change the element at the front of the deque to be a copy of element If a destructor is presesnt, then call the destructor on the value of the element that is being replaced.
Change the element at the front of the deque to be a copy of element. This will NOT call the destructor on the old element. This is useful for simply replacing a few fields.
| deq | A pointer to the deque to update |
| element | The element to update the first element to |
1.8.11