mbed OS5

Fork of UIPEthernet by Zoltan Hudak

Committer:
hudakz
Date:
Thu Nov 20 21:26:54 2014 +0000
Revision:
1:01c2344f98a3
Parent:
uitility/mempool.h@0:5350a66d5279
rev. 01

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:5350a66d5279 1 /*
hudakz 0:5350a66d5279 2 mempool.h - sleek implementation of a memory pool
hudakz 0:5350a66d5279 3 Copyright (c) 2013 Norbert Truchsess <norbert.truchsess@t-online.de>
hudakz 0:5350a66d5279 4 All rights reserved.
hudakz 0:5350a66d5279 5
hudakz 0:5350a66d5279 6 This program is free software: you can redistribute it and/or modify
hudakz 0:5350a66d5279 7 it under the terms of the GNU General Public License as published by
hudakz 0:5350a66d5279 8 the Free Software Foundation, either version 3 of the License, or
hudakz 0:5350a66d5279 9 (at your option) any later version.
hudakz 0:5350a66d5279 10
hudakz 0:5350a66d5279 11 This program is distributed in the hope that it will be useful,
hudakz 0:5350a66d5279 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
hudakz 0:5350a66d5279 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
hudakz 0:5350a66d5279 14 GNU General Public License for more details.
hudakz 0:5350a66d5279 15
hudakz 0:5350a66d5279 16 You should have received a copy of the GNU General Public License
hudakz 0:5350a66d5279 17 along with this program. If not, see <http://www.gnu.org/licenses/>.
hudakz 0:5350a66d5279 18 */
hudakz 0:5350a66d5279 19 #ifndef MEMPOOL_H
hudakz 0:5350a66d5279 20 #define MEMPOOL_H
hudakz 0:5350a66d5279 21
hudakz 0:5350a66d5279 22 #include <inttypes.h>
hudakz 0:5350a66d5279 23
hudakz 0:5350a66d5279 24 #define POOLSTART 0
hudakz 0:5350a66d5279 25 #define NOBLOCK 0
hudakz 0:5350a66d5279 26
hudakz 0:5350a66d5279 27 #include "mempool_conf.h"
hudakz 0:5350a66d5279 28
hudakz 0:5350a66d5279 29 //#ifdef MEMBLOCK_MV
hudakz 0:5350a66d5279 30
hudakz 0:5350a66d5279 31 //#define memblock_mv_cb(dest,src,size) MEMBLOCK_MV(dest,src,size)
hudakz 0:5350a66d5279 32 //#endif
hudakz 0:5350a66d5279 33 #ifdef MEMBLOCK_ALLOC
hudakz 0:5350a66d5279 34 #define memblock_alloc_cb(address, size) MEMBLOCK_ALLOC(address, size)
hudakz 0:5350a66d5279 35 #endif
hudakz 0:5350a66d5279 36 #ifdef MEMBLOCK_FREE
hudakz 0:5350a66d5279 37 #define memblock_free_cb(address, size) MEMBLOCK_FREE(address, size)
hudakz 0:5350a66d5279 38 #endif
hudakz 0:5350a66d5279 39 struct memblock
hudakz 0:5350a66d5279 40 {
hudakz 0:5350a66d5279 41 memaddress begin;
hudakz 0:5350a66d5279 42 memaddress size;
hudakz 0:5350a66d5279 43 memhandle nextblock;
hudakz 0:5350a66d5279 44 };
hudakz 0:5350a66d5279 45
hudakz 0:5350a66d5279 46 class MemoryPool
hudakz 0:5350a66d5279 47 {
hudakz 0:5350a66d5279 48 #ifdef MEMPOOLTEST_H
hudakz 0:5350a66d5279 49 friend class MemoryPoolTest;
hudakz 0:5350a66d5279 50 #endif
hudakz 0:5350a66d5279 51 protected:
hudakz 0:5350a66d5279 52 memaddress poolsize;
hudakz 0:5350a66d5279 53 struct memblock blocks[NUM_MEMBLOCKS + 1];
hudakz 0:5350a66d5279 54 #ifdef MEMBLOCK_MV
hudakz 0:5350a66d5279 55 virtual void memblock_mv_cb(memaddress dest, memaddress src, memaddress size) = 0;
hudakz 0:5350a66d5279 56 #endif
hudakz 0:5350a66d5279 57 public:
hudakz 0:5350a66d5279 58 MemoryPool(memaddress start, memaddress size);
hudakz 0:5350a66d5279 59 memhandle allocBlock(memaddress);
hudakz 0:5350a66d5279 60 void freeBlock(memhandle);
hudakz 0:5350a66d5279 61 void resizeBlock(memhandle handle, memaddress position);
hudakz 0:5350a66d5279 62 void resizeBlock(memhandle handle, memaddress position, memaddress size);
hudakz 0:5350a66d5279 63 memaddress blockSize(memhandle);
hudakz 0:5350a66d5279 64 };
hudakz 0:5350a66d5279 65 #endif