source: git/factory/mmblock.c @ 9d7aaa

spielwiese
Last change on this file since 9d7aaa was 9d7aaa, checked in by Jens Schmidt <schmidt@…>, 27 years ago
#include <config.h> added git-svn-id: file:///usr/local/Singular/svn/trunk@155 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 1.7 KB
Line 
1/* emacs edit mode for this file is -*- C++ -*- */
2/* $Id: mmblock.c,v 1.1 1997-04-15 09:24:26 schmidt Exp $ */
3
4/*
5$Log: not supported by cvs2svn $
6Revision 1.0  1996/05/17 10:59:48  stobbe
7Initial revision
8
9*/
10
11#define _POSIX_SOURCE 1
12
13#include <config.h>
14
15#include <stdio.h>
16#include <stdlib.h>
17
18#include "memman.h"
19#include "mmprivate.h"
20
21typedef struct memBlock
22{
23    struct memBlock *next;
24    char data[MAXDATA];
25} memBlock;
26
27
28static memBlock * mm_theBlocks = NULL;
29static memBlock * mm_tmpBlocks = NULL;
30static memBlock * mm_normBlocks = NULL;
31
32static status_t mm_blockStatus = MM_NORMAL;
33
34void
35mmInitBlocks( void )
36{
37    mm_theBlocks = mm_tmpBlocks = mm_normBlocks = NULL;
38    mm_blockStatus = MM_NORMAL;
39}
40
41void
42mmMarkBlocks( void )
43{
44    mm_blockStatus = MM_TMP;
45    mm_normBlocks = mm_theBlocks;
46    mm_theBlocks = NULL;
47}
48
49void
50mmSweepBlocks( void )
51{
52    memBlock * dummy;
53
54    while ( mm_tmpBlocks != NULL ) {
55        dummy = mm_tmpBlocks;
56        mm_tmpBlocks = mm_tmpBlocks->next;
57        free( dummy );
58        mm_bytesReal -= sizeof( memBlock );
59    }
60    mmNewPrintMark();
61    mm_tmpBlocks = NULL;
62    mm_theBlocks = mm_normBlocks;
63    mm_blockStatus = MM_NORMAL;
64}
65
66void
67mmSwitchBlocks( void )
68{
69    if ( mm_blockStatus == MM_TMP ) {
70        mm_blockStatus = MM_SWITCHED;
71        mm_tmpBlocks = mm_theBlocks;
72        mm_theBlocks = mm_normBlocks;
73    }
74    else {
75        mm_blockStatus = MM_TMP;
76        mm_normBlocks = mm_theBlocks;
77        mm_theBlocks = mm_tmpBlocks;
78    }
79}
80
81void *
82mmGetBlock( void )
83{
84    memBlock * dummy = (memBlock*)malloc( sizeof( memBlock ) );
85
86    if ( dummy == NULL ) {
87        (void)fprintf( stderr, "\nerror: no more memory\n" );
88        exit(14);
89    }
90    dummy->next = mm_theBlocks;
91    mm_theBlocks = dummy;
92    mm_bytesReal += sizeof( memBlock );
93    return &dummy->data[0];
94}
Note: See TracBrowser for help on using the repository browser.