5export module zxfoundation.scoms.kobject.base;
6import zxfoundation.scoms.kobject.types;
7import zxfoundation.sync.qspinlock.core;
8import zxfoundation.base.types;
12namespace zxfoundation::scoms::kobject {
18 kobject::kobject_type type{kobject::kobject_type::none};
19 lifecycle_state state{lifecycle_state::embryo};
23 sync::qspinlock::qspinlock lock{};
26 bobject()
noexcept =
default;
29 [[nodiscard]]
auto transition(lifecycle_state target)
noexcept ->
bool;
32 [[nodiscard]]
auto try_get()
noexcept ->
bool;
35 auto put()
noexcept ->
void;
38 auto initialize(u32 object_id, kobject::kobject_type object_type)
noexcept ->
void;
41 bobject(
const bobject&) =
delete;
42 auto operator=(
const bobject&) =
delete;
43 bobject(bobject&&) =
delete;
44 auto operator=(bobject&&) =
delete;
47 static_assert(
sizeof(bobject) == 24,
"kobject ABI must remain exactly 24 bytes");
48 static_assert(
__builtin_offsetof(bobject, id) == 0);
49 static_assert(
__builtin_offsetof(bobject, type) == 4);
50 static_assert(
__builtin_offsetof(bobject, state) == 5);
51 static_assert(
__builtin_offsetof(bobject, ref) == 8);
52 static_assert(
__builtin_offsetof(bobject, generation) == 12);
53 static_assert(
__builtin_offsetof(bobject, lock) == 16);
55 using bobject_finalizer_fn =
void (*)(bobject&)
noexcept;
58 auto install_bobject_finalizer(bobject_finalizer_fn finalizer)
noexcept ->
void;