- code-documentation improved

This commit is contained in:
Jan Hutter
2005-11-03 19:47:40 +00:00
parent ef23cd28c1
commit dc64bed19d
3 changed files with 110 additions and 43 deletions
+34 -20
View File
@@ -26,36 +26,43 @@
#include "linked_list.h" #include "linked_list.h"
/** /**
* Type of Jobs * Type of Jobs in Job-Queue
*/ */
typedef enum job_type_e job_type_t; typedef enum job_type_e job_type_t;
enum job_type_e{ enum job_type_e{
/** /**
* Job is to process an incoming IKEv2-Message * process an incoming IKEv2-Message
*/ */
INCOMING_PACKET, INCOMING_PACKET,
/** /**
* Job is to retransmit an IKEv2-Message * retransmit an IKEv2-Message
*/ */
RETRANSMIT_REQUEST, RETRANSMIT_REQUEST,
/** /**
* Job is to establish an ike sa as initiator * establish an ike sa as initiator
*/ */
ESTABLISH_IKE_SA ESTABLISH_IKE_SA
/* more job types have to be inserted here */
}; };
/** /**
* @brief Job like it is represented in the job queue * @brief Job as it is stored in the job queue
*
* A job consists of a job-type and an assigned value
*
* The value-type for a specific job is not discussed here
*/ */
typedef struct job_s job_t; typedef struct job_s job_t;
struct job_s{ struct job_s{
/**
* Type of job
*/
job_type_t type; job_type_t type;
/** /**
* Every job has its assigned_data * Every job has its assigned_data based on the job type
*/ */
void * assigned_data; void * assigned_data;
@@ -80,48 +87,55 @@ job_t *job_create(job_type_t type, void *assigned_data);
/** /**
* @brief Job-Queue * @brief Job-Queue
*
* Despite the job-queue is based on a linked_list_t
* all access functions are thread-save implemented
*/ */
typedef struct job_queue_s job_queue_t; typedef struct job_queue_s job_queue_t;
struct job_queue_s { struct job_queue_s {
/** /**
* @brief Returns number of jobs in queue * @brief returns number of jobs in queue
* *
* @param job_queue_t calling object * @param job_queue_t calling object
* @param count integer pointer to store the job count in * @param[out] count integer pointer to store the job count in
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
status_t (*get_count) (job_queue_t *job_queue, int *count); status_t (*get_count) (job_queue_t *job_queue, int *count);
/** /**
* @brief Get the next job from the queue * @brief get the next job from the queue
* *
* If the queue is empty, this function blocks until job can be returned. * If the queue is empty, this function blocks until a job can be returned.
* *
* After using, the returned job has to get destroyed. * After using, the returned job has to get destroyed by the caller.
* *
* @param job_queue_t calling object * @param job_queue_t calling object
* @param job pointer to a job pointer where to job is returned to * @param[out] job pointer to a job pointer where to job is returned to
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
status_t (*get) (job_queue_t *job_queue, job_t **job); status_t (*get) (job_queue_t *job_queue, job_t **job);
/** /**
* @brief Adds a job to the queue * @brief adds a job to the queue
* *
* This function is non blocking * This function is non blocking and adds a job_t to the list.
* The specific job-object has to get destroyed by the thread which
* removes the job.
* *
* @param job_queue_t calling object * @param job_queue_t calling object
* @param job job to add to the queue (job is not copied) * @param[in] job job to add to the queue (job is not copied)
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
status_t (*add) (job_queue_t *job_queue, job_t *job); status_t (*add) (job_queue_t *job_queue, job_t *job);
/** /**
* @brief Destroys a job_queue object * @brief destroys a job_queue object
* *
* @warning Has only to be called if no other thread is accessing the queue * @warning The caller of this function has to make sure
* that no thread is going to add or get a job from the job_queue
* after calling this function.
* *
* @param job_queue_t calling object * @param job_queue_t calling object
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
@@ -130,8 +144,8 @@ struct job_queue_s {
}; };
/** /**
* @brief Creates a job_queue * @brief Creates an empty job_queue
* * *
* @return job_queue_t empty job_queue * @return job_queue_t empty job_queue
*/ */
job_queue_t *job_queue_create(); job_queue_t *job_queue_create();
+28 -7
View File
@@ -34,17 +34,26 @@
static status_t linked_list_element_destroy(linked_list_element_t *linked_list_element) static status_t linked_list_element_destroy(linked_list_element_t *linked_list_element)
{ {
linked_list_element_t * this = linked_list_element; linked_list_element_t * this = linked_list_element;
if (this == NULL)
{
return FAILED;
}
pfree(this); pfree(this);
return SUCCESS; return SUCCESS;
} }
/* /*
* Creates a linked list (documented in header-file) * Creates an empty linked list (described in header-file)
*/ */
linked_list_element_t *linked_list_element_create(void *value) linked_list_element_t *linked_list_element_create(void *value)
{ {
linked_list_element_t *this = alloc_thing(linked_list_element_t, "linked_list_element_t"); linked_list_element_t *this = alloc_thing(linked_list_element_t, "linked_list_element_t");
if (this == NULL)
{
return NULL;
}
this->destroy = linked_list_element_destroy; this->destroy = linked_list_element_destroy;
this->previous=NULL; this->previous=NULL;
@@ -63,6 +72,11 @@ static status_t insert_first(linked_list_t *linked_list, void *item)
linked_list_element_t *element = linked_list_element_create(item); linked_list_element_t *element = linked_list_element_create(item);
if (element == NULL)
{
return FAILED;
}
if (this->count == 0) if (this->count == 0)
{ {
/* first entry in list */ /* first entry in list */
@@ -70,7 +84,8 @@ static status_t insert_first(linked_list_t *linked_list, void *item)
this->last = element; this->last = element;
element->previous = NULL; element->previous = NULL;
element->next = NULL; element->next = NULL;
}else }
else
{ {
if ((this->first == NULL) || (this->last == NULL)) if ((this->first == NULL) || (this->last == NULL))
{ {
@@ -118,7 +133,7 @@ static status_t remove_first(linked_list_t *linked_list, void **item)
this->count--; this->count--;
return (element->destroy(element)); return /element->destroy(element));
} }
/** /**
@@ -152,6 +167,11 @@ static status_t insert_last(linked_list_t *linked_list, void *item)
linked_list_element_t *element = linked_list_element_create(item); linked_list_element_t *element = linked_list_element_create(item);
if (element == NULL)
{
return FAILED;
}
if (this->count == 0) if (this->count == 0)
{ {
/* first entry in list */ /* first entry in list */
@@ -207,7 +227,7 @@ static status_t remove_last(linked_list_t *linked_list, void **item)
this->count--; this->count--;
return element->destroy(element); return (element->destroy(element));
} }
/** /**
@@ -239,10 +259,12 @@ static status_t linked_list_destroy(linked_list_t *linked_list)
{ {
linked_list_t *this = linked_list; linked_list_t *this = linked_list;
/* Delete all list items before deleting list */ /* Remove all list items before destroying list */
while (this->count > 0) while (this->count > 0)
{ {
void * value; void * value;
/* values are not destroyed so memory leaks are possible
* if list is not empty when deleting */
if (this->remove_first(this,&value) != SUCCESS) if (this->remove_first(this,&value) != SUCCESS)
{ {
pfree(this); pfree(this);
@@ -254,8 +276,7 @@ static status_t linked_list_destroy(linked_list_t *linked_list)
} }
/* /*
* * Described in header
* Documented in header
*/ */
linked_list_t *linked_list_create() linked_list_t *linked_list_create()
{ {
+48 -16
View File
@@ -25,16 +25,27 @@
#include "types.h" #include "types.h"
/** /**
* @brief Double Linked List Element type * @brief Element of the linked_list.
*
* This element holds a pointer to the value of the list item itself.
*/ */
typedef struct linked_list_element_s linked_list_element_t; typedef struct linked_list_element_s linked_list_element_t;
struct linked_list_element_s { struct linked_list_element_s {
/**
* previous list element
* NULL if first element in list
*/
linked_list_element_t *previous; linked_list_element_t *previous;
/**
* next list element
* NULL if last element in list
*/
linked_list_element_t *next; linked_list_element_t *next;
/* value of a list item */ /**
* value of a list item
*/
void *value; void *value;
/** /**
@@ -49,7 +60,9 @@ struct linked_list_element_s {
/** /**
* @brief Creates an empty linked list object * @brief Creates an empty linked list object
* *
* @param value value of item * @param[in] value value of item to be set
*
* @warning only the pointer to the value is stored
* *
* @return linked_list_element object * @return linked_list_element object
*/ */
@@ -57,22 +70,38 @@ linked_list_element_t *linked_list_element_create(void *value);
/** /**
* @brief Double Linked List type * @brief Double Linked List (named only as linked list)
*
* @warning Access to an object of this type is not thread-save
*
* @see job_queue_t
* @see event_queue_t
* @see send_queue_t
*/ */
typedef struct linked_list_s linked_list_t; typedef struct linked_list_s linked_list_t;
struct linked_list_s { struct linked_list_s {
/* item count */ /**
* number of items in the list
*/
int count; int count;
/**
* First element in list
* NULL if no elements in list
*/
linked_list_element_t *first; linked_list_element_t *first;
/**
* Last element in list
* NULL if no elements in list
*/
linked_list_element_t *last; linked_list_element_t *last;
/** /**
* @brief inserts a new item at the beginning of the list * @brief inserts a new item at the beginning of the list
* *
* @param linked_list calling object * @param linked_list calling object
* @param item value to insert in list * @param[in] item value to insert in list
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
status_t (*insert_first) (linked_list_t *linked_list, void *item); status_t (*insert_first) (linked_list_t *linked_list, void *item);
@@ -81,16 +110,16 @@ struct linked_list_s {
* @brief removes the first item in the list and returns its value * @brief removes the first item in the list and returns its value
* *
* @param linked_list calling object * @param linked_list calling object
* @param item returned value of first item * @param[in] item returned value of first item
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
status_t (*remove_first) (linked_list_t *linked_list, void **item); status_t (*remove_first) (linked_list_t *linked_list, void **item);
/** /**
* @brief Returns the value of the first list item without removing it * @brief returns the value of the first list item without removing it
* *
* @param linked_list calling object * @param linked_list calling object
* @param item returned value of first item * @param[out] item returned value of first item
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
status_t (*get_first) (linked_list_t *linked_list, void **item); status_t (*get_first) (linked_list_t *linked_list, void **item);
@@ -99,7 +128,7 @@ struct linked_list_s {
* @brief inserts a new item at the end of the list * @brief inserts a new item at the end of the list
* *
* @param linked_list calling object * @param linked_list calling object
* @param item value to insert in list * @param[in] item value to insert into list
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
status_t (*insert_last) (linked_list_t *linked_list, void *item); status_t (*insert_last) (linked_list_t *linked_list, void *item);
@@ -108,7 +137,7 @@ struct linked_list_s {
* @brief removes the last item in the list and returns its value * @brief removes the last item in the list and returns its value
* *
* @param linked_list calling object * @param linked_list calling object
* @param item returned value of last item * @param[out] item returned value of last item
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
status_t (*remove_last) (linked_list_t *linked_list, void **item); status_t (*remove_last) (linked_list_t *linked_list, void **item);
@@ -117,7 +146,7 @@ struct linked_list_s {
* @brief Returns the value of the last list item without removing it * @brief Returns the value of the last list item without removing it
* *
* @param linked_list calling object * @param linked_list calling object
* @param item returned value of last item * @param[out] item returned value of last item
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
status_t (*get_last) (linked_list_t *linked_list, void **item); status_t (*get_last) (linked_list_t *linked_list, void **item);
@@ -125,6 +154,11 @@ struct linked_list_s {
/** /**
* @brief Destroys a linked_list object * @brief Destroys a linked_list object
* *
* @warning all items are removed before deleting the list. The
* associated values are NOT destroyed.
* Destroying an list which is not empty may cause
* memory leaks!
*
* @param linked_list calling object * @param linked_list calling object
* @returns SUCCESS if succeeded, FAILED otherwise * @returns SUCCESS if succeeded, FAILED otherwise
*/ */
@@ -132,9 +166,7 @@ struct linked_list_s {
}; };
/** /**
* @brief * @brief Creates an empty linked list object
*
* Creates an empty linked list object
*/ */
linked_list_t *linked_list_create(void); linked_list_t *linked_list_create(void);