c0299e1868
I re-indented the source code using indent with the following options: indent -kr -bad -bap -nut -i8 -l80 -psl -sob -ss -ncs There are now _no_ tabs in the source files, and all indentation is eight spaces. Lines are 80 characters long, and the procedure type is on it's own line. Read the indent manual for more information about what each option means.
88 lines
3.1 KiB
C
88 lines
3.1 KiB
C
/* $Id: vector.h,v 1.7 2005-08-15 03:54:31 rjkaes Exp $
|
|
*
|
|
* A vector implementation. The vector can be of an arbritrary length, and
|
|
* the data for each entry is an lump of data (the size is stored in the
|
|
* vector.)
|
|
*
|
|
* Copyright (C) 2002 Robert James Kaes (rjkaes@users.sourceforge.net)
|
|
*
|
|
* 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 2 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, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef _VECTOR_H
|
|
#define _VECTOR_H
|
|
|
|
/* Allow the use in C++ code. */
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* We're using a typedef here to "hide" the implementation details of the
|
|
* vector. Sure, it's a pointer, but the struct is hidden in the C file.
|
|
* So, just use the vector_t like it's a cookie. :)
|
|
*/
|
|
typedef struct vector_s *vector_t;
|
|
|
|
/*
|
|
* vector_create() takes no arguments.
|
|
* vector_delete() is self explanatory.
|
|
*/
|
|
extern vector_t vector_create(void);
|
|
extern int vector_delete(vector_t vector);
|
|
|
|
/*
|
|
* When you insert a piece of data into the vector, the data will be
|
|
* duplicated, so you must free your copy if it was created on the heap.
|
|
* The data must be non-NULL and the length must be greater than zero.
|
|
*
|
|
* Returns: negative on error
|
|
* 0 upon successful insert.
|
|
*/
|
|
extern int vector_append(vector_t vector, void *data, ssize_t len);
|
|
extern int vector_prepend(vector_t vector, void *data, ssize_t len);
|
|
|
|
/*
|
|
* A pointer to the data at position "pos" (zero based) is returned and the
|
|
* size pointer contains the length of the data stored.
|
|
*
|
|
* The pointer points to the actual data in the vector, so you have
|
|
* the power to modify the data, but do it responsibly since the
|
|
* library doesn't take any steps to prevent you from messing up the
|
|
* vector. (A better rule is, don't modify the data since you'll
|
|
* likely mess up the "length" parameter of the data.) However, DON'T
|
|
* try to realloc or free the data; doing so will break the vector.
|
|
*
|
|
* If "size" is NULL the size of the data is not returned.
|
|
*
|
|
* Returns: NULL on error
|
|
* valid pointer to data
|
|
*/
|
|
extern void *vector_getentry(vector_t vector, size_t pos,
|
|
size_t * size);
|
|
|
|
/*
|
|
* Returns the number of enteries (or the length) of the vector.
|
|
*
|
|
* Returns: negative if vector is not valid
|
|
* positive length of vector otherwise
|
|
*/
|
|
extern ssize_t vector_length(vector_t vector);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif /* C++ */
|
|
#endif /* _VECTOR_H */
|