Home | History | Annotate | Download | only in libexif
      1 /*! \file exif-mem.h
      2  *  \brief Define the ExifMem data type and the associated functions.
      3  *  ExifMem defines the memory management functions used within libexif.
      4  */
      5 /* exif-mem.h
      6  *
      7  * Copyright (c) 2003 Lutz Mueller <lutz (at) users.sourceforge.net>
      8  *
      9  * This library is free software; you can redistribute it and/or
     10  * modify it under the terms of the GNU Lesser General Public
     11  * License as published by the Free Software Foundation; either
     12  * version 2 of the License, or (at your option) any later version.
     13  *
     14  * This library is distributed in the hope that it will be useful,
     15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     17  * Lesser General Public License for more details.
     18  *
     19  * You should have received a copy of the GNU Lesser General Public
     20  * License along with this library; if not, write to the
     21  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     22  * Boston, MA  02110-1301  USA.
     23  */
     24 
     25 #ifndef __EXIF_MEM_H__
     26 #define __EXIF_MEM_H__
     27 
     28 #include <libexif/exif-utils.h>
     29 
     30 #ifdef __cplusplus
     31 extern "C" {
     32 #endif /* __cplusplus */
     33 
     34 /*! Should work like calloc()
     35  *
     36  *  \param[in] s the size of the block to allocate.
     37  *  \return the allocated memory and initialized.
     38  */
     39 typedef void * (* ExifMemAllocFunc)   (ExifLong s);
     40 
     41 /*! Should work like realloc()
     42  *
     43  * \param[in] p the pointer to reallocate
     44  * \param[in] s the size of the reallocated block
     45  * \return allocated memory
     46  */
     47 typedef void * (* ExifMemReallocFunc) (void *p, ExifLong s);
     48 
     49 /*! Free method for ExifMem
     50  *
     51  * \param[in] p the pointer to free
     52  * \return the freed pointer
     53  */
     54 typedef void   (* ExifMemFreeFunc)    (void *p);
     55 
     56 /*! ExifMem define a memory allocator */
     57 typedef struct _ExifMem ExifMem;
     58 
     59 /*! Create a new ExifMem
     60  *
     61  * \param[in] a the allocator function
     62  * \param[in] r the reallocator function
     63  * \param[in] f the free function
     64  */
     65 ExifMem *exif_mem_new   (ExifMemAllocFunc a, ExifMemReallocFunc r,
     66 			 ExifMemFreeFunc f);
     67 /*! Refcount an ExifMem
     68  */
     69 void     exif_mem_ref   (ExifMem *);
     70 
     71 /*! Unrefcount an ExifMem.
     72  * If the refcount reaches 0, the ExifMem is freed
     73  */
     74 void     exif_mem_unref (ExifMem *);
     75 
     76 void *exif_mem_alloc   (ExifMem *m, ExifLong s);
     77 void *exif_mem_realloc (ExifMem *m, void *p, ExifLong s);
     78 void  exif_mem_free    (ExifMem *m, void *p);
     79 
     80 /*! Create a new ExifMem with default values for your convenience
     81  *
     82  * \return return a new default ExifMem
     83  */
     84 ExifMem *exif_mem_new_default (void);
     85 
     86 #ifdef __cplusplus
     87 }
     88 #endif /* __cplusplus */
     89 
     90 #endif /* __EXIF_MEM_H__ */
     91