Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*******************************************************************************
  2.  *   Copyright (C) 2009 Vasiliy Kosenko                                        *
  3.  *                                                                             *
  4.  *   This program is free software; you can redistribute it and/or modify      *
  5.  *   it under the terms of the GNU General Public License as published by      *
  6.  *   the Free Software Foundation; either version 3 of the License, or         *
  7.  *   (at your option) any later version.                                       *
  8.  *                                                                             *
  9.  *   This program is distributed in the hope that it will be useful,           *
  10.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of            *
  11.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
  12.  *   GNU General Public License for more details.                              *
  13.  *                                                                             *
  14.  *   You should have received a copy of the GNU General Public License         *
  15.  *   along with this program; if not, write to the Free Software               *
  16.  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
  17.  *******************************************************************************/
  18.  
  19. #ifndef _HEAP_H_
  20. #define _HEAP_H_
  21.  
  22. #include "defs.h"
  23.  
  24. #define PAGE_SIZE 0x1000
  25.  
  26. typedef struct MemBlock {
  27.         struct MemBlock *next;
  28.         struct MemBlock *previos;
  29.         unsigned long nblocks;
  30.         unsigned long align;
  31. } MemBlock;
  32.  
  33. typedef struct Heap {
  34.         struct MemBlock *free;
  35.         struct MemBlock *allocated;
  36.         void *(*alloc)(struct Heap *heap, int nbytes);
  37. } Heap;
  38.  
  39. void *halMemAlloc(Heap *wheap, unsigned long n);
  40. void halMemFree(Heap *wheap, void *addr);
  41. MemBlock *halMemBlockAdd(MemBlock *heap, MemBlock *unit, bool optimize);
  42. MemBlock *halMemBlockRemove(MemBlock *unit);
  43.  
  44. void halMemHeapInit(Heap *wheap, void *(*alloc)(Heap *heap, int nbytes), void *st_addr, int size);
  45.  
  46. #endif
  47.