annotate foosdk/sdk/foobar2000/SDK/system_time_keeper.h @ 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 namespace system_time_periods {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 static constexpr t_filetimestamp second = filetimestamp_1second_increment;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 static constexpr t_filetimestamp minute = second * 60;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 static constexpr t_filetimestamp hour = minute * 60;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 static constexpr t_filetimestamp day = hour * 24;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 static constexpr t_filetimestamp week = day * 7;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 class system_time_callback {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 virtual void on_time_changed(t_filetimestamp newVal) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 //! \since 0.9.6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 class system_time_keeper : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 //! The callback object receives an on_changed() call with the current time inside the register_callback() call.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 virtual void register_callback(system_time_callback * callback, t_filetimestamp resolution) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 virtual void unregister_callback(system_time_callback * callback) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 FB2K_MAKE_SERVICE_COREAPI(system_time_keeper)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 class system_time_callback_impl : public system_time_callback {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 system_time_callback_impl() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 ~system_time_callback_impl() {stop_timer();}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 void stop_timer() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 if (m_registered) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 system_time_keeper::get()->unregister_callback(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 m_registered = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 //! You get a on_changed() call inside the initialize_timer() call.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 void initialize_timer(t_filetimestamp period) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 stop_timer();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 system_time_keeper::get()->register_callback(this, period);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 m_registered = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 //! Override me
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 void on_time_changed(t_filetimestamp) override {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 PFC_CLASS_NOT_COPYABLE_EX(system_time_callback_impl)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 bool m_registered = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50