[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pdf-devel] List module implementation
From: |
gerel |
Subject: |
[pdf-devel] List module implementation |
Date: |
Sun, 02 Mar 2008 07:30:04 -0300 |
Hi everyone,
Here I have a _first_ implementation for the List module (didn't try it
since we'd need to modify some interfaces before).
BTW, I saw the macro: "#define INLINE inline". But it's not being used (like in
pdf-alloc.c). Should we use that macro or not ?
As always, your comments a MUST :-)
cheers.
--- pdf-list.h ---
/* -*- mode: C -*- Time-stamp: "2008-03-02 06:58:40 gerel"
*
* File: pdf-list.h
* Date: Sat Mar 1 02:14:35 2008
*
* GNU PDF Library - Header file for the List module
*
*/
/* Copyright (C) 2008 Free Software Foundation, Inc. */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PDF_LIST_H
#define PDF_LIST_H
#include <gl_list.h>
/* BEGIN PUBLIC */
/* Data types */
/* This one should go on pdf-types.h */
typedef size_t pdf_size_t;
typedef gl_list_t pdf_list_t;
typedef gl_list_node_t pdf_list_node_t;
typedef gl_list_iterator_t pdf_list_iterator_t;
typedef gl_listelement_equals_fn pdf_list_element_equals_fn_t;
typedef gl_listelement_dispose_fn pdf_list_element_dispose_fn_t;
/* Creation and destruction functions */
pdf_list_t pdf_list_create (pdf_list_element_equals_fn_t
equals_fn, pdf_list_element_dipose_fn_t dispose_fn,
pdf_bool_t allow_duplicates);
pdf_status_t pdf_list_destroy (pdf_list_t list);
/* Property management functions */
pdf_size_t pdf_list_size (pdf_list_t list);
/* Element searching functions */
pdf_list_node_t pdf_list_search (pdf_list_t list, const void* element);
pdf_list_node_t pdf_list_search_from (pdf_list_t list, pdf_size_t start_index,
const void* element);
pdf_list_node_t pdf_list_search_from_to (pdf_list_t list,
pdf_size_t start_index,
pdf_size_t end_index,
const void* element);
pdf_list_node_t pdf_list_next_node (pdf_list_t list, pdf_list_node_t node);
pdf_list_node_t pdf_list_previous_node (pdf_list_t list, pdf_list_node_t node);
pdf_size_t pdf_list_indexof (pdf_list_t list, const void*element);
pdf_size_t pdf_list_indexof_from (pdf_list_t list, pdf_size_t start_index,
const void* element);
pdf_size_t pdf_list_indexof_from_to (pdf_list_t list, pdf_size_t start_index,
pdf_size_t end_index, const void* element);
/* Element setting and getting functions */
void * pdf_list_node_value (pdf_list_t list, pdf_list_node_t node);
void * pdf_list_get_at (pdf_list_t list, pdf_size_t position);
pdf_list_node_t pdf_list_set_at (pdf_list_t list, pdf_size_t position,
const void* element);
/* Element addition and removal functions */
pdf_list_node_t pdf_list_add_first (pdf_list_t list, const void* element);
pdf_list_node_t pdf_list_add_last (pdf_list_t list, const void* element);
pdf_list_node_t pdf_list_add_at (pdf_list_t list, pdf_size_t position,
const void* element);
pdf_status_t pdf_list_remove_node (pdf_list_t list, pdf_list_node_t node);
pdf_status_t pdf_list_remove_at (pdf_list_t list, pdf_size_t position);
pdf_status_t pdf_list_remove (pdf_list_t list, const void * element);
/* Element iterator functions */
pdf_list_iterator_t pdf_list_iterator (pdf_list_t list);
pdf_list_iterator_t pdf_list_iterator_from_to (pdf_list_t list,
pdf_size_t start_index,
pdf_size_t end_index);
pdf_status_t pdf_list_iterator_next (pdf_list_iterator_t *iterator,
const void **element_pointer,
pdf_list_node_t *node_pointer);
pdf_status_t pdf_list_iterator_free (pdf_list_iterator_t *iterator);
/* END PUBLIC */
#endif /* PDF_LIST_H */
/* End of pdf-list.h */
--- EOF pdf-list.h ---
--- pdf-list.c ---
/* -*- mode: C -*- Time-stamp: "2008-03-02 07:03:31 gerel"
*
* File: pdf-list.c
* Date: Sat Mar 1 02:14:35 2008
*
* GNU PDF Library - Implementation of the List module
*
*/
/* Copyright (C) 2008 Free Software Foundation, Inc. */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <pdf-list.h>
/* Creation and destruction functions */
inline pdf_list_t
pdf_list_create (pdf_list_element_equals_fn_t equals_fn,
pdf_list_element_dipose_fn_t dispose_fn,
pdf_bool_t allow_duplicates)
{
return ((pdf_list_t) gl_list_create_empty(GL_LINKED_LIST, equals_fn, NULL,
dispose_fn, allow_duplicates));
}
inline pdf_status_t
pdf_list_destroy (pdf_list_t list)
{
pdf_size_t i, size;
size = gl_list_size (list);
for (i=0; i < size; i++)
gl_list_remove_at (list, i);
gl_list_free (list);
return PDF_OK;
}
/* Property management functions */
inline pdf_size_t
pdf_list_size (pdf_list_t list)
{
return ((pdf_size_t) gl_list_size(list));
}
/* Element searching functions */
inline pdf_list_node_t
pdf_list_search (pdf_list_t list, const void* element)
{
return ((pdf_list_node_t) gl_list_search (list, element));
}
inline pdf_list_node_t
pdf_list_search_from (pdf_list_t list, pdf_size_t start_index,
const void* element)
{
return ((pdf_list_node_t) gl_list_search_from(list, start_index, element));
}
inline pdf_list_node_t
pdf_list_search_from_to (pdf_list_t list, pdf_size_t start_index,
pdf_size_t end_index, const void* element)
{
return ((pdf_list_node_t) gl_list_search_from_to (list, start_index,
end_index, element));
}
inline pdf_list_node_t
pdf_list_next_node (pdf_list_t list, pdf_list_node_t node)
{
return ((pdf_list_node_t) gl_list_next_node (list, node));
}
inline pdf_list_node_t
pdf_list_previous_node (pdf_list_t list, pdf_list_node_t node)
{
return ((pdf_list_node_t) gl_list_previous_ode (list, node));
}
inline pdf_size_t
pdf_list_indexof (pdf_list_t list, const void*element)
{
return ((pdf_size_t) gl_list_indexof (list, element));
}
inline pdf_size_t
pdf_list_indexof_from (pdf_list_t list, pdf_size_t start_index,
const void* element)
{
return ((pdf_size_t) gl_list_indexof_from (list, start_index, element));
}
inline pdf_size_t
pdf_list_indexof_from_to (pdf_list_t list, pdf_size_t start_index,
pdf_size_t end_index, const void* element)
{
return ((pdf_size_t) gl_list_indexof_from_to (list, start_index, end_index,
element));
}
/* Element setting and getting functions */
inline void *
pdf_list_node_value (pdf_list_t list, pdf_list_node_t node)
{
return (gl_list_node_value (list, node));
}
inline void *
pdf_list_get_at (pdf_list_t list, pdf_size_t position)
{
return (gl_list_get_at (list, position));
}
inline pdf_list_node_t
pdf_list_set_at (pdf_list_t list, pdf_size_t position, const void* element)
{
return ((pdf_list_node_t) gl_list_set_at (list, position, element));
}
/* Element addition and removal functions */
inline pdf_list_node_t
pdf_list_add_first (pdf_list_t list, const void* element)
{
return ((pdf_list_node_t) gl_list_add_first (list, element));
}
inline pdf_list_node_t
pdf_list_add_last (pdf_list_t list, const void* element)
{
return ((pdf_list_node_t) gl_list_add_last (list, element));
}
inline pdf_list_node_t
pdf_list_add_at (pdf_list_t list, pdf_size_t position, const void* element)
{
return ((pdf_list_node_t) gl_list_add_at (list, position, element));
}
inline pdf_status_t
pdf_list_remove_node (pdf_list_t list, pdf_list_node_t node)
{
gl_list_remove_node (list, node);
return PDF_OK;
}
inline pdf_status_t
pdf_list_remove_at (pdf_list_t list, pdf_size_t position)
{
pdf_status_t st;
st = PDF_OK;
if (position >= 0 && position < pdf_list_size (list))
gl_list_remove_at (list, position);
else
st = PDF_EINVRANGE;
return st;
}
inline pdf_status_t
pdf_list_remove (pdf_list_t list, const void * element)
{
pdf_status_t st;
st = PDF_OK;
if (!gl_list_remove (list, element))
st = PDF_ENONODE;
return st;
}
/* Element iterator functions */
inline pdf_list_iterator_t
pdf_list_iterator (pdf_list_t list)
{
return ((pdf_list_iterator_t) gl_list_iterator (list));
}
inline pdf_list_iterator_t
pdf_list_iterator_from_to (pdf_list_t list, pdf_size_t start_index,
pdf_size_t end_index)
{
return ((pdf_list_iterator_t) gl_list_iterator_from_to (list, start_index,
end_index));
}
inline pdf_status_t
pdf_list_iterator_next (pdf_list_iterator_t *iterator,
const void **element_pointer,
pdf_list_node_t *node_pointer)
{
pdf_status_t st;
st = PDF_OK;
if (!gl_list_iterator_next (iterator, element_pointer, node_pointer))
st = PDF_ENONODE;
return st;
}
inline pdf_status_t
pdf_list_iterator_free (pdf_list_iterator_t *iterator)
{
gl_list_iterator_free (iterator);
return PDF_OK;
}
/* End of pdf-list.c */
--- EOF pdf-list.c ---
-gerel
- [pdf-devel] List module implementation,
gerel <=