Line data Source code
1 : /* RAII wrapper around obstack.
2 : Copyright (C) 2024-2026 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 */
|