comparison foosdk/sdk/foobar2000/SDK/completion_notify.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
comparison
equal deleted inserted replaced
0:e9bb126753e7 1:20d02a178406
1 #include "foobar2000-sdk-pch.h"
2 #include "completion_notify.h"
3 #include "main_thread_callback.h"
4
5 void completion_notify::g_signal_completion_async(completion_notify_ptr p_notify,unsigned p_code) {
6 if (p_notify.is_valid()) {
7 fb2k::inMainThread([p_notify, p_code] { p_notify->on_completion(p_code); });
8 }
9 }
10
11 void completion_notify::on_completion_async(unsigned p_code) {
12 g_signal_completion_async(this, p_code);
13 }
14
15
16 completion_notify::ptr completion_notify_receiver::create_or_get_task(unsigned p_id) {
17 completion_notify_orphanable_ptr ptr;
18 if (!m_tasks.query(p_id,ptr)) {
19 ptr = completion_notify_create(this,p_id);
20 m_tasks.set(p_id,ptr);
21 }
22 return ptr;
23 }
24
25 completion_notify_ptr completion_notify_receiver::create_task(unsigned p_id) {
26 completion_notify_orphanable_ptr ptr;
27 if (m_tasks.query(p_id,ptr)) ptr->orphan();
28 ptr = completion_notify_create(this,p_id);
29 m_tasks.set(p_id,ptr);
30 return ptr;
31 }
32
33 bool completion_notify_receiver::have_task(unsigned p_id) const {
34 return m_tasks.have_item(p_id);
35 }
36
37 void completion_notify_receiver::orphan_task(unsigned p_id) {
38 completion_notify_orphanable_ptr ptr;
39 if (m_tasks.query(p_id,ptr)) {
40 ptr->orphan();
41 m_tasks.remove(p_id);
42 }
43 }
44
45 completion_notify_receiver::~completion_notify_receiver() {
46 orphan_all_tasks();
47 }
48
49 void completion_notify_receiver::orphan_all_tasks() {
50 m_tasks.enumerate(orphanfunc);
51 m_tasks.remove_all();
52 }
53
54 namespace {
55 using namespace fb2k;
56
57 class completion_notify_func : public completion_notify {
58 public:
59 void on_completion(unsigned p_code) noexcept override {
60 m_func(p_code);
61 }
62
63 completionNotifyFunc_t m_func;
64 };
65 }
66
67 namespace fb2k {
68
69 completion_notify::ptr makeCompletionNotify( completionNotifyFunc_t func ) {
70 auto n = fb2k::service_new< completion_notify_func >();
71 n->m_func = func;
72 return n;
73 }
74
75 }