annotate liboctave/oct-alloc.h @ 9636:74be4b7273e4 ss-3-3-50

update version info for snapshot
author John W. Eaton <jwe@octave.org>
date Sat, 12 Sep 2009 06:55:13 -0400
parents a1dbe9d80eee
children 4c0cdbe0acca
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
7017
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
3 Copyright (C) 1996, 1997, 1998, 2002, 2003, 2005, 2006, 2007
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
4 John W. Eaton
2475
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
5
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
7
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
8 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
9 under the terms of the GNU General Public License as published by the
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6108
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6108
diff changeset
11 option) any later version.
2475
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
12
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
13 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
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
15 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
16 for more details.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
17
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6108
diff changeset
19 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6108
diff changeset
20 <http://www.gnu.org/licenses/>.
2475
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
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
24 #if !defined (octave_oct_alloc_h)
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
25 #define octave_oct_alloc_h 1
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
26
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
27 class
6108
143b556ce725 [project @ 2006-10-27 01:45:54 by jwe]
jwe
parents: 5307
diff changeset
28 OCTAVE_API
2475
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
29 octave_allocator
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 public:
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
32
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
33 octave_allocator (size_t item_sz, int grow_sz = 256)
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
34 : head (0), grow_size (grow_sz),
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
35 item_size (item_sz > sizeof (link *) ? item_sz : sizeof (link *))
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
36 { }
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
37
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
38 // 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
39 // the free list.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
40 void *alloc (size_t size);
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
41
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
42 // Put objects back on the free list.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
43 void free (void *p, size_t size);
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 private:
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
46
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
47 // Structure for internal free list management.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
48 struct link { link *next; };
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
49
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
50 // Front of the free list.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
51 link *head;
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
52
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
53 // 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
54 int grow_size;
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
55
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
56 // 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
57 // the size of list*, the size of list*.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
58 size_t item_size;
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
59
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
60 // How to grow the free list.
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
61 bool grow (void);
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
62 };
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
63
4352
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
64 #if defined (HAVE_PLACEMENT_DELETE)
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
65 #define DECLARE_OCTAVE_ALLOCATOR_PLACEMENT_DELETE \
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
66 void operator delete (void *p, void *) \
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
67 { ::operator delete (p, static_cast<void*> (0)); }
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
68 #else
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
69 #define DECLARE_OCTAVE_ALLOCATOR_PLACEMENT_DELETE \
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
70 void operator delete (void *p, void *) \
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
71 { ::operator delete (p); }
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
72 #endif
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
73
3219
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
74 #define DECLARE_OCTAVE_ALLOCATOR \
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
75 public: \
4219
23d06c9e1edd [project @ 2002-12-06 21:29:17 by jwe]
jwe
parents: 3219
diff changeset
76 void *operator new (size_t size, void *p) \
23d06c9e1edd [project @ 2002-12-06 21:29:17 by jwe]
jwe
parents: 3219
diff changeset
77 { return ::operator new (size, p); } \
4352
80b83de0aa2a [project @ 2003-02-21 20:01:38 by jwe]
jwe
parents: 4281
diff changeset
78 DECLARE_OCTAVE_ALLOCATOR_PLACEMENT_DELETE \
3219
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
79 void *operator new (size_t size) { return allocator.alloc (size); } \
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
80 void operator delete (void *p, size_t size) { allocator.free (p, size); } \
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
81 private: \
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
82 static octave_allocator allocator;
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
83
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
84 #define DEFINE_OCTAVE_ALLOCATOR(t) \
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
85 octave_allocator t::allocator (sizeof (t))
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
86
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
87 #define DEFINE_OCTAVE_ALLOCATOR2(t, s) \
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
88 octave_allocator t::allocator (sizeof (t), s)
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 2847
diff changeset
89
2475
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
90 #endif
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
91
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
92 /*
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
93 ;;; Local Variables: ***
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
94 ;;; mode: C++ ***
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
95 ;;; End: ***
1d7925d6bede [project @ 1996-11-07 04:36:00 by jwe]
jwe
parents:
diff changeset
96 */