source: git/factory/mmblock.c @ 2dd068

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