Branch data Line data Source code
1 : : /* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
2 : : // SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
3 : : // SPDX-FileCopyrightText: 2019 Marco Trevisan <marco.trevisan@canonical.com>
4 : :
5 : : #pragma once
6 : :
7 : : #include <config.h>
8 : :
9 : : #include <glib-object.h>
10 : :
11 : : #include <js/TypeDecls.h>
12 : :
13 : : #include "gjs/jsapi-util.h"
14 : : #include "gjs/macros.h"
15 : :
16 : : class JSTracer;
17 : :
18 : : class ObjectBox {
19 : : static void destroy(ObjectBox*);
20 : :
21 : : public:
22 : 35 : using Ptr = GjsAutoPointer<ObjectBox, ObjectBox, ObjectBox::destroy>;
23 : :
24 : : [[nodiscard]] static GType gtype();
25 : :
26 : : GJS_JSAPI_RETURN_CONVENTION
27 : : static ObjectBox::Ptr boxed(JSContext*, JSObject*);
28 : :
29 : : GJS_JSAPI_RETURN_CONVENTION
30 : : static JSObject* object_for_c_ptr(JSContext*, ObjectBox*);
31 : :
32 : : void trace(JSTracer* trc);
33 : :
34 : : private:
35 : : explicit ObjectBox(JSObject*);
36 : :
37 : : static void* boxed_copy(void*);
38 : : static void boxed_free(void*);
39 : :
40 : : struct impl;
41 : : static void destroy_impl(impl*);
42 : 32 : GjsAutoPointer<impl, impl, destroy_impl> m_impl;
43 : : };
|