reduced line number of functions
This commit is contained in:
parent
9b263c63e0
commit
3701a20d22
34
src/darray.c
34
src/darray.c
@ -3,7 +3,7 @@
|
|||||||
* \brief Implémentation des fonctions pour le type \ref darray_t
|
* \brief Implémentation des fonctions pour le type \ref darray_t
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <darray.h>
|
#include "darray.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
@ -40,12 +40,28 @@ darray_t *darrayNew(size_t element_size) {
|
|||||||
* \param elem Élément que l’on souhaite insérer
|
* \param elem Élément que l’on souhaite insérer
|
||||||
*/
|
*/
|
||||||
void darrayInsert(darray_t *self, void *pos, void *elem) {
|
void darrayInsert(darray_t *self, void *pos, void *elem) {
|
||||||
void *new_array;
|
|
||||||
char *itr;
|
char *itr;
|
||||||
unsigned long pos_aux;
|
long pos_aux;
|
||||||
size_t size;
|
|
||||||
pos_aux = (char *)pos - (char *)self->begin;
|
pos_aux = (char *)pos - (char *)self->begin;
|
||||||
if (darraySize(self) >= self->capacity) {
|
if (darraySize(self) >= self->capacity) {
|
||||||
|
darrayExtend(self);
|
||||||
|
}
|
||||||
|
itr = (char *)self->begin + pos_aux;
|
||||||
|
memmove(itr + self->element_size, itr, (unsigned long)((char *)self->end - itr));
|
||||||
|
memcpy(itr, elem, self->element_size);
|
||||||
|
self->end = (char *)self->end + self->element_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Étend la capacité d'un \ref darray_t en réallouant sa mémoire, multipliant
|
||||||
|
* sa capacité par deux. Si la réallocation mémoire ne réussit pas, le
|
||||||
|
* programme s’arrête immédiatement, renvoyant la valeur de \ref PTR_ERROR
|
||||||
|
*
|
||||||
|
* \param self L'objet darray_t à étendre
|
||||||
|
*/
|
||||||
|
void darrayExtend(darray_t *self) {
|
||||||
|
void *new_array;
|
||||||
|
size_t size;
|
||||||
size = darraySize(self);
|
size = darraySize(self);
|
||||||
new_array =
|
new_array =
|
||||||
realloc(self->begin, (darraySize(self) + 1) * self->element_size);
|
realloc(self->begin, (darraySize(self) + 1) * self->element_size);
|
||||||
@ -57,12 +73,6 @@ void darrayInsert(darray_t *self, void *pos, void *elem) {
|
|||||||
self->begin = new_array;
|
self->begin = new_array;
|
||||||
++self->capacity;
|
++self->capacity;
|
||||||
self->end = (char *)self->begin + size * self->element_size;
|
self->end = (char *)self->begin + size * self->element_size;
|
||||||
}
|
|
||||||
|
|
||||||
itr = (char *)self->begin + pos_aux;
|
|
||||||
memmove(itr + self->element_size, itr, (char *)self->end - itr);
|
|
||||||
memcpy(itr, elem, self->element_size);
|
|
||||||
self->end = (char *)self->end + self->element_size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -76,7 +86,7 @@ void darrayInsert(darray_t *self, void *pos, void *elem) {
|
|||||||
*/
|
*/
|
||||||
void darrayErase(darray_t *self, void *pos) {
|
void darrayErase(darray_t *self, void *pos) {
|
||||||
memmove(pos, (char *)pos + self->element_size,
|
memmove(pos, (char *)pos + self->element_size,
|
||||||
((char *)self->end - self->element_size) - (char *)pos);
|
(unsigned long)(((char *)self->end - self->element_size) - (char *)pos));
|
||||||
self->end = (char *)self->end - self->element_size;
|
self->end = (char *)self->end - self->element_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,7 +130,7 @@ void darrayDelete(darray_t *self) {
|
|||||||
* \return Nombre d’éléments contenus dans `self`
|
* \return Nombre d’éléments contenus dans `self`
|
||||||
*/
|
*/
|
||||||
size_t darraySize(darray_t *self) {
|
size_t darraySize(darray_t *self) {
|
||||||
return ((char *)self->end - (char *)self->begin) / self->element_size;
|
return (size_t)((char *)self->end - (char *)self->begin) / self->element_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,6 +25,9 @@ typedef struct darray_s {
|
|||||||
/// \brief Créé un nouvel objet \ref darray_t vide
|
/// \brief Créé un nouvel objet \ref darray_t vide
|
||||||
darray_t *darrayNew(size_t element_size);
|
darray_t *darrayNew(size_t element_size);
|
||||||
|
|
||||||
|
/// \brief Augmente la capacité d'un \ref darray_t
|
||||||
|
void darrayExtend(darray_t *self);
|
||||||
|
|
||||||
/// \brief Insère un élément à l’endroit pointé dans un \ref darray_t
|
/// \brief Insère un élément à l’endroit pointé dans un \ref darray_t
|
||||||
void darrayInsert(darray_t *self, void *pos, void *elem);
|
void darrayInsert(darray_t *self, void *pos, void *elem);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user