source: roaraudio/include/libroar/memmgr.h @ 4958:2d8a28f3d87f

Last change on this file since 4958:2d8a28f3d87f was 4958:2d8a28f3d87f, checked in by phi, 13 years ago

Added simple memmgr (memory Manager) code.

File size: 3.8 KB
Line 
1//memmgr.h:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2009-2011
5 *
6 *  This file is part of libroar a part of RoarAudio,
7 *  a cross-platform sound system for both, home and professional use.
8 *  See README for details.
9 *
10 *  This file is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 3
12 *  as published by the Free Software Foundation.
13 *
14 *  libroar 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
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this software; see the file COPYING.  If not, write to
21 *  the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 *  Boston, MA 02110-1301, USA.
23 *
24 *  NOTE for everyone want's to change something and send patches:
25 *  read README and HACKING! There a addition information on
26 *  the license of this document you need to read before you send
27 *  any patches.
28 *
29 *  NOTE for uses of non-GPL (LGPL,...) software using libesd, libartsc
30 *  or libpulse*:
31 *  The libs libroaresd, libroararts and libroarpulse link this lib
32 *  and are therefore GPL. Because of this it may be illigal to use
33 *  them with any software that uses libesd, libartsc or libpulse*.
34 */
35
36#ifndef _LIBROARMEMMGR_H_
37#define _LIBROARMEMMGR_H_
38
39#include "libroar.h"
40
41#ifndef ROAR_USE_MEMMGR
42#if !defined(ROAR_HAVE_MALLOC) || !defined(ROAR_HAVE_CALLOC) || !defined(ROAR_HAVE_REALLOC) || !defined(ROAR_HAVE_FREE)
43#define ROAR_USE_MEMMGR
44#endif
45#endif
46
47#ifdef ROAR_USE_MEMMGR
48// those functions are currently not implemeted:
49void * roar_mm_calloc(size_t nmemb, size_t size);
50void * roar_mm_malloc(size_t size);
51int    roar_mm_free(void *ptr);
52void * roar_mm_realloc(void *ptr, size_t size);
53
54/*
55 * TODO: we need some functions to control the pre-alloc
56 *       of memory.
57 */
58
59#else
60#define roar_mm_calloc(nmemb, size) calloc((nmemb), (size))
61#define roar_mm_malloc(size)        malloc((size))
62#define roar_mm_free(ptr)           free((ptr))
63#define roar_mm_realloc(ptr, size)  realloc((ptr), (size))
64#endif
65
66
67// memory locking:
68
69#if defined(ROAR_HAVE_MLOCK) && defined(__linux__)
70#define roar_mm_mlock(addr, len) mlock((addr), (len))
71#elif defined(ROAR_TARGET_MICROCONTROLLER)
72#define roar_mm_mlock(addr, len) 0
73#else
74int roar_mm_mlock(const void *addr, size_t len);
75#endif
76
77#if defined(ROAR_HAVE_MUNLOCK) && defined(__linux__)
78#define roar_mm_munlock(addr, len) munlock((addr), (len))
79#elif defined(ROAR_TARGET_MICROCONTROLLER)
80#define roar_mm_munlock(addr, len) 0
81#else
82int roar_mm_munlock(const void *addr, size_t len);
83#endif
84
85#if defined(ROAR_HAVE_MLOCKALL)
86#define roar_mm_mlockall(flags) mlockall((flags))
87#elif defined(ROAR_TARGET_MICROCONTROLLER)
88#define roar_mm_mlockall(flags) 0
89#else
90#define roar_mm_mlockall(flags) (-1)
91#endif
92
93#if defined(ROAR_HAVE_MUNLOCKALL)
94#define roar_mm_munlockall() munlockall()
95#elif defined(ROAR_TARGET_MICROCONTROLLER)
96#define roar_mm_munlockall() 0
97#else
98#define roar_mm_munlockall() (-1)
99#endif
100
101// for compatibility with old versions:
102#define ROAR_MLOCK _ROAR_MLOCK
103
104// aux functions:
105void * roar_mm_memdup(const void * s, size_t len);
106
107// string functions:
108#ifndef ROAR_HAVE_STRLEN
109ssize_t roar_mm_strlen(const char *s);
110#else
111#define roar_mm_strlen(str) strlen((str))
112#endif
113
114ssize_t roar_mm_strnlen(const char *s, size_t maxlen);
115
116#if defined(ROAR_USE_MEMMGR) || !defined(ROAR_HAVE_STRDUP)
117char * roar_mm_strdup(const char *s);
118#else
119#define roar_mm_strdup(str)         strdup((str))
120#endif
121
122#if defined(ROAR_USE_MEMMGR) || !defined(ROAR_HAVE_STRNDUP)
123char *roar_mm_strndup(const char *s, size_t n);
124#else
125#define roar_mm_strndup(str, size)         strdup((str), (size))
126#endif
127
128#endif
129
130//ll
Note: See TracBrowser for help on using the repository browser.