/*
elmo - ELectronic Mail Operator
Copyright (C) 2003, 2004 rzyjontko
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; version 2.
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.
----------------------------------------------------------------------
rmime.c
*/
/****************************************************************************
* IMPLEMENTATION HEADERS
****************************************************************************/
#include <stdlib.h>
#include "mime.h"
#include "rarray.h"
#include "rmime.h"
#include "memchunk.h"
/****************************************************************************
* IMPLEMENTATION PRIVATE DEFINITIONS / ENUMERATIONS / SIMPLE TYPEDEFS
****************************************************************************/
/****************************************************************************
* IMPLEMENTATION PRIVATE CLASS PROTOTYPES / EXTERNAL CLASS REFERENCES
****************************************************************************/
/****************************************************************************
* IMPLEMENTATION PRIVATE STRUCTURES / UTILITY CLASSES
****************************************************************************/
/****************************************************************************
* IMPLEMENTATION REQUIRED EXTERNAL REFERENCES (AVOID)
****************************************************************************/
/****************************************************************************
* IMPLEMENTATION PRIVATE DATA
****************************************************************************/
/****************************************************************************
* INTERFACE DATA
****************************************************************************/
/****************************************************************************
* IMPLEMENTATION PRIVATE FUNCTION PROTOTYPES
****************************************************************************/
/****************************************************************************
* IMPLEMENTATION PRIVATE FUNCTIONS
****************************************************************************/
/****************************************************************************
* INTERFACE FUNCTIONS
****************************************************************************/
rmime_t *
rmime_create_size (size_t size)
{
return (rmime_t *) rarray_create_size (size);
}
rmime_t *
rmime_create (void)
{
return (rmime_t *) rarray_create ();
}
void
rmime_destroy (rmime_t *ptr)
{
mime_t **mime;
if (ptr == NULL)
return;
for (mime = ptr->array; *mime; mime++){
mime_destroy (*mime);
}
rarray_destroy ((rarray_t *) ptr);
}
void
rmime_add (rmime_t *ptr, mime_t *p)
{
rarray_add ((rarray_t *) ptr, p);
}
void
rmime_remove (rmime_t *ptr, unsigned index)
{
rarray_remove ((rarray_t *) ptr, index);
}
void
rmime_shrink (rmime_t *ptr)
{
rarray_shrink ((rarray_t *) ptr);
}
rmime_t *
rmime_join (rmime_t *x, rmime_t *y)
{
return (rmime_t *) rarray_join ((rarray_t *) x, (rarray_t *) y);
}
void
rmime_dump (memchunk_t *memchunk, rmime_t *ptr)
{
int i;
int zero = 0;
if (ptr == NULL){
memchunk_intdump (memchunk, zero);
return;
}
memchunk_intdump (memchunk, ptr->count);
for (i = 0; i < ptr->count; i++)
mime_dump (memchunk, ptr->array[i]);
}
rmime_t *
rmime_read (memchunk_t *memchunk)
{
int i;
int size = memchunk_intget (memchunk);
rmime_t *result;
if (size == 0)
return NULL;
result = rmime_create_size (size + 1);
for (i = 0; i < size; i++){
mime_t *mime = mime_create ();
mime_read (memchunk, mime);
rmime_add (result, mime);
}
return result;
}
/****************************************************************************
* INTERFACE CLASS BODIES
****************************************************************************/
/****************************************************************************
*
* END MODULE rmime.c
*
****************************************************************************/
syntax highlighted by Code2HTML, v. 0.9.1