annotate liboctave/oct-alloc.h @ 2475:1d7925d6bede

[project @ 1996-11-07 04:36:00 by jwe]
author jwe
date Thu, 07 Nov 1996 04:46:54 +0000
parents
children 8b262e771614
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2475
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
1 /*
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
2
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
3 Copyright (C) 1996 John W. Eaton
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
4
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
6
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
10 later version.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
11
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
15 for more details.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
16
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
20
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
21 */
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
22
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
23 #if !defined (octave_oct_alloc_h)
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
24 #define octave_oct_alloc_h 1
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
25
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
26 class
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
27 octave_allocator
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
28 {
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
29 public:
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
30
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
31 octave_allocator (size_t item_sz, int grow_sz = 256)
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
32 : head (0), grow_size (grow_sz),
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
33 item_size (item_sz > sizeof (link *) ? item_sz : sizeof (link *))
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
34 { }
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
35
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
36 // Get an object from the free list, possibly increasing the size of
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
37 // the free list.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
38 void *alloc (size_t size);
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
39
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
40 // Put objects back on the free list.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
41 void free (void *p, size_t size);
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
42
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
43 private:
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
44
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
45 // Structure for internal free list management.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
46 struct link { link *next; };
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
47
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
48 // Front of the free list.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
49 link *head;
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
50
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
51 // How many objects to get each time we call the global operator new.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
52 int grow_size;
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
53
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
54 // The size of each item on the list (or, if that is smaller than
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
55 // the size of list*, the size of list*.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
56 size_t item_size;
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
57
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
58 // How to grow the free list.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
59 bool grow (void);
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
60 };
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
61
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
62 #endif
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
63
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
64 /*
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
65 ;;; Local Variables: ***
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
66 ;;; mode: C++ ***
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
67 ;;; End: ***
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
68 */