1
1

more efficient allocation algorithm for buffer.c

git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@170 7dcaeef0-15fb-0310-b436-a5af3365683c
Этот коммит содержится в:
Aris Adamantiadis 2008-06-16 23:19:29 +00:00
родитель 77603dbc5a
Коммит 1fce8c72e7

Просмотреть файл

@ -52,6 +52,18 @@ void buffer_free(BUFFER *buffer){
free(buffer); free(buffer);
} }
static void realloc_buffer(BUFFER *buffer,int needed){
int smallest=1;
// find the smallest power of two which is greater or equal to needed
while(smallest<=needed)
smallest <<= 1;
needed=smallest;
// printf("buffer %p : realloc(%x,%d)=",buffer,buffer->data,needed);
buffer->data=realloc(buffer->data,needed);
// printf("%p\n",buffer->data);
buffer->allocated=needed;
}
/* \internal /* \internal
* \brief reinitialize a buffer * \brief reinitialize a buffer
* \param buffer buffer * \param buffer buffer
@ -60,15 +72,11 @@ void buffer_reinit(BUFFER *buffer){
memset(buffer->data,0,buffer->used); memset(buffer->data,0,buffer->used);
buffer->used=0; buffer->used=0;
buffer->pos=0; buffer->pos=0;
if(buffer->allocated > 127){
realloc_buffer(buffer,127);
}
} }
static void realloc_buffer(BUFFER *buffer,int needed){
needed=(needed+0x7f) & ~0x7f;
// printf("buffer %p : realloc(%x,%d)=",buffer,buffer->data,needed);
buffer->data=realloc(buffer->data,needed);
// printf("%p\n",buffer->data);
buffer->allocated=needed;
}
/** \internal /** \internal
* \brief add data at tail of the buffer * \brief add data at tail of the buffer
* \param buffer buffer * \param buffer buffer