Fix pow <small> and a very stypid bug with dummy srcs(0 equals to tmp0.x)</small...
[mesa.git] / src / mesa / main / mm.c
index 14563b2591c1359c58687ee6321359c59b6f8eb5..0a71c4d8514aad22a3d329c0d02781b295c94705 100644 (file)
  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  *
  */
-/* $XFree86: xc/lib/GL/mesa/src/drv/common/mm.c,v 1.4 2002/10/30 12:51:27 alanh Exp $ */
-
-#include <stdlib.h>
-#include <stdio.h>
 
 #include "mm.h"
 
 
-void mmDumpMemInfo( memHeap_t *heap )
+void
+mmDumpMemInfo(const struct mem_block *heap)
 {
-   TMemBlock *p;
+   const struct mem_block *p;
 
    fprintf(stderr, "Memory heap %p:\n", (void *)heap);
    if (heap == 0) {
       fprintf(stderr, "  heap == 0\n");
    } else {
-      p = (TMemBlock *)heap;
+      p = (struct mem_block *)heap;
       while (p) {
         fprintf(stderr, "  Offset:%08x, Size:%08x, %c%c\n",p->ofs,p->size,
                 p->free ? '.':'U',
@@ -48,34 +45,37 @@ void mmDumpMemInfo( memHeap_t *heap )
    fprintf(stderr, "End of memory blocks\n");
 }
 
-memHeap_t *mmInit(int ofs,
-                 int size)
+struct mem_block *
+mmInit(int ofs, int size)
 {
-   PMemBlock blocks;
+   struct mem_block *blocks;
   
    if (size <= 0) {
       return NULL;
    }
-   blocks = (TMemBlock *) calloc(1,sizeof(TMemBlock));
+   blocks = (struct mem_block *) _mesa_calloc(sizeof(struct mem_block));
    if (blocks) {
       blocks->ofs = ofs;
       blocks->size = size;
       blocks->free = 1;
-      return (memHeap_t *)blocks;
-   } else
+      return (struct mem_block *)blocks;
+   }
+   else {
       return NULL;
+   }
 }
 
 
-static TMemBlock* SliceBlock(TMemBlock *p, 
-                            int startofs, int size, 
-                            int reserved, int alignment)
+static struct mem_block *
+SliceBlock(struct mem_block *p, 
+           int startofs, int size, 
+           int reserved, int alignment)
 {
-   TMemBlock *newblock;
+   struct mem_block *newblock;
 
    /* break left */
    if (startofs > p->ofs) {
-      newblock = (TMemBlock*) calloc(1,sizeof(TMemBlock));
+      newblock = (struct mem_block*) _mesa_calloc(sizeof(struct mem_block));
       if (!newblock)
         return NULL;
       newblock->ofs = startofs;
@@ -89,7 +89,7 @@ static TMemBlock* SliceBlock(TMemBlock *p,
 
    /* break right */
    if (size < p->size) {
-      newblock = (TMemBlock*) calloc(1,sizeof(TMemBlock));
+      newblock = (struct mem_block*) _mesa_calloc(sizeof(struct mem_block));
       if (!newblock)
         return NULL;
       newblock->ofs = startofs + size;
@@ -107,16 +107,18 @@ static TMemBlock* SliceBlock(TMemBlock *p,
    return p;
 }
 
-PMemBlock mmAllocMem( memHeap_t *heap, int size, int align2, int startSearch)
+
+struct mem_block *
+mmAllocMem(struct mem_block *heap, int size, int align2, int startSearch)
 {
-   int mask,startofs,endofs;
-   TMemBlock *p;
+   struct mem_block *p = heap;
+   int mask = (1 << align2)-1;
+   int startofs = 0;
+   int endofs;
 
    if (!heap || align2 < 0 || size <= 0)
       return NULL;
-   mask = (1 << align2)-1;
-   startofs = 0;
-   p = (TMemBlock *)heap;
+
    while (p) {
       if ((p)->free) {
         startofs = (p->ofs + mask) & ~mask;
@@ -136,9 +138,11 @@ PMemBlock mmAllocMem( memHeap_t *heap, int size, int align2, int startSearch)
    return p;
 }
 
-PMemBlock mmFindBlock( memHeap_t *heap, int start)
+
+struct mem_block *
+mmFindBlock(struct mem_block *heap, int start)
 {
-   TMemBlock *p = (TMemBlock *)heap;
+   struct mem_block *p = (struct mem_block *)heap;
 
    while (p) {
       if (p->ofs == start && p->free) 
@@ -151,21 +155,24 @@ PMemBlock mmFindBlock( memHeap_t *heap, int start)
 }
 
 
-static __inline__ int Join2Blocks(TMemBlock *p)
+static int
+Join2Blocks(struct mem_block *p)
 {
+   /* XXX there should be some assertions here */
    if (p->free && p->next && p->next->free) {
-      TMemBlock *q = p->next;
+      struct mem_block *q = p->next;
       p->size += q->size;
       p->next = q->next;
-      free(q);
+      _mesa_free(q);
       return 1;
    }
    return 0;
 }
 
-int mmFreeMem(PMemBlock b)
+int
+mmFreeMem(struct mem_block *b)
 {
-   TMemBlock *p,*prev;
+   struct mem_block *p,*prev;
 
    if (!b)
       return 0;
@@ -196,16 +203,18 @@ int mmFreeMem(PMemBlock b)
 }
 
 
-void mmDestroy(memHeap_t *heap)
+void
+mmDestroy(struct mem_block *heap)
 {
-   TMemBlock *p,*q;
+   struct mem_block *p;
 
    if (!heap)
       return;
-   p = (TMemBlock *)heap;
+
+   p = (struct mem_block *) heap;
    while (p) {
-      q = p->next;
-      free(p);
-      p = q;
+      struct mem_block *next = p->next;
+      _mesa_free(p);
+      p = next;
    }
 }