Branch data Line data Source code
1 : : /* RAII wrapper around obstack.
2 : : Copyright (C) 2024-2025 Free Software Foundation, Inc.
3 : : Contributed by David Malcolm <dmalcolm@redhat.com>.
4 : :
5 : : This file is part of GCC.
6 : :
7 : : GCC is free software; you can redistribute it and/or modify it
8 : : under the terms of the GNU General Public License as published by
9 : : the Free Software Foundation; either version 3, or (at your option)
10 : : any later version.
11 : :
12 : : GCC is distributed in the hope that it will be useful, but
13 : : WITHOUT ANY WARRANTY; without even the implied warranty of
14 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 : : General Public License for more details.
16 : :
17 : : You should have received a copy of the GNU General Public License
18 : : along with GCC; see the file COPYING3. If not see
19 : : <http://www.gnu.org/licenses/>. */
20 : :
21 : : #ifndef GCC_AUTO_OBSTACK_H
22 : : #define GCC_AUTO_OBSTACK_H
23 : :
24 : : /* RAII wrapper around obstack. */
25 : :
26 : : struct auto_obstack
27 : : {
28 : 4 : auto_obstack ()
29 : 4 : {
30 : 4 : obstack_init (&m_obstack);
31 : 4 : }
32 : :
33 : 4 : ~auto_obstack ()
34 : : {
35 : 4 : obstack_free (&m_obstack, NULL);
36 : 4 : }
37 : :
38 : 4 : operator obstack & () { return m_obstack; }
39 : :
40 : : void grow (const void *src, size_t length)
41 : : {
42 : : obstack_grow (&m_obstack, src, length);
43 : : }
44 : :
45 : : void *object_base () const
46 : : {
47 : : return m_obstack.object_base;
48 : : }
49 : :
50 : : size_t object_size () const
51 : : {
52 : : return obstack_object_size (&m_obstack);
53 : : }
54 : :
55 : : obstack m_obstack;
56 : : };
57 : :
58 : : #endif /* GCC_AUTO_OBSTACK_H */
|