Contiki-NG
Toggle main menu visibility
Loading...
Searching...
No Matches
memb.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2004, Swedish Institute of Computer Science.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. Neither the name of the Institute nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*
29
* This file is part of the Contiki operating system.
30
*
31
* Author: Adam Dunkels <adam@sics.se>
32
*
33
*/
34
35
/**
36
* \addtogroup mem
37
* @{
38
*/
39
40
41
/**
42
* \defgroup memb memb: Memory block management functions
43
*
44
* The memory block allocation routines provide a simple yet powerful
45
* set of functions for managing a set of memory blocks of fixed
46
* size. A set of memory blocks is statically declared with the
47
* MEMB() macro. Memory blocks are allocated from the declared
48
* memory by the memb_alloc() function, and are deallocated with the
49
* memb_free() function.
50
*
51
* @{
52
*/
53
54
55
/**
56
* \file
57
* Memory block allocation routines.
58
* \author
59
* Adam Dunkels <adam@sics.se>
60
*
61
*/
62
63
#ifndef MEMB_H_
64
#define MEMB_H_
65
66
#include <stdbool.h>
67
#include <stddef.h>
68
#include "
sys/cc.h
"
69
70
/**
71
* Declare a memory block.
72
*
73
* This macro is used to statically declare a block of memory that can
74
* be used by the block allocation functions. The macro statically
75
* declares a C array with a size that matches the specified number of
76
* blocks and their individual sizes.
77
*
78
* Example:
79
\code
80
MEMB(connections, struct connection, 16);
81
\endcode
82
*
83
* \param name The name of the memory block (later used with
84
* memb_init(), memb_alloc() and memb_free()).
85
*
86
* \param structure The name of the struct that the memory block holds
87
*
88
* \param num The total number of memory chunks in the block.
89
*
90
*/
91
#define MEMB(name, structure, num) \
92
static bool CC_CONCAT(name,_memb_used)[num]; \
93
static structure CC_CONCAT(name,_memb_mem)[num]; \
94
static struct memb name = {sizeof(structure), num, \
95
CC_CONCAT(name,_memb_used), \
96
(void *)CC_CONCAT(name,_memb_mem)}
97
98
struct
memb {
99
unsigned
short
size;
100
unsigned
short
num;
101
bool
*used;
102
void
*mem;
103
};
104
105
/**
106
* Initialize a memory block that was declared with MEMB().
107
*
108
* \param m A set of memory blocks previously declared with MEMB().
109
*/
110
void
memb_init
(
struct
memb *m);
111
112
/**
113
* Allocate a memory block from a block of memory declared with MEMB().
114
*
115
* \param m A set of memory blocks previously declared with MEMB().
116
*/
117
void
*
memb_alloc
(
struct
memb *m);
118
119
/**
120
* Deallocate a memory block from a memory block previously declared
121
* with MEMB().
122
*
123
* \param m m A set of memory blocks previously declared with MEMB().
124
*
125
* \param ptr A pointer to the memory block that is to be deallocated.
126
*
127
* \return error code, should be 0 if successfully deallocated or -1 if the
128
* pointer "ptr" did not point to a legal memory block.
129
*/
130
int
memb_free
(
struct
memb *m,
void
*ptr);
131
132
/**
133
* Check if a given address is within a memory area previously
134
* declared with MEMB().
135
*
136
* \param m m A set of memory blocks previously declared with MEMB().
137
*
138
* \param ptr A pointer to the address to check
139
*
140
* \return 1 if the address is part of the memory block; otherwise 0
141
*/
142
int
memb_inmemb
(
struct
memb *m,
void
*ptr);
143
144
/**
145
* Count free memory blocks
146
*
147
* \param m m A set of memory blocks previously declared with MEMB().
148
*
149
* \return the number of free (available) memory blocks
150
*/
151
size_t
memb_numfree
(
struct
memb *m);
152
153
/** @} */
154
/** @} */
155
156
#endif
/* MEMB_H_ */
cc.h
Default definitions of C compiler quirk work-arounds.
memb_free
int memb_free(struct memb *m, void *ptr)
Deallocate a memory block from a memory block previously declared with MEMB().
Definition
memb.c:78
memb_numfree
size_t memb_numfree(struct memb *m)
Count free memory blocks.
Definition
memb.c:108
memb_inmemb
int memb_inmemb(struct memb *m, void *ptr)
Check if a given address is within a memory area previously declared with MEMB().
Definition
memb.c:101
memb_alloc
void * memb_alloc(struct memb *m)
Allocate a memory block from a block of memory declared with MEMB().
Definition
memb.c:59
memb_init
void memb_init(struct memb *m)
Initialize a memory block that was declared with MEMB().
Definition
memb.c:52
os
lib
memb.h
Generated on
for Contiki-NG by
1.17.0