Mercurial > foo_out_sdl
comparison foosdk/sdk/foobar2000/SDK/config_object_impl.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 |
comparison
equal
deleted
inserted
replaced
| 0:e9bb126753e7 | 1:20d02a178406 |
|---|---|
| 1 #pragma once | |
| 2 | |
| 3 #include "config_object.h" | |
| 4 #include "cfg_var_legacy.h" | |
| 5 //template function bodies from config_object class | |
| 6 | |
| 7 template<class T> | |
| 8 void config_object::get_data_struct_t(T& p_out) { | |
| 9 if (get_data_raw(&p_out,sizeof(T)) != sizeof(T)) throw exception_io_data_truncation(); | |
| 10 } | |
| 11 | |
| 12 template<class T> | |
| 13 void config_object::set_data_struct_t(const T& p_in) { | |
| 14 return set_data_raw(&p_in,sizeof(T)); | |
| 15 } | |
| 16 | |
| 17 template<class T> | |
| 18 void config_object::g_get_data_struct_t(const GUID & p_guid,T & p_out) { | |
| 19 service_ptr_t<config_object> ptr; | |
| 20 if (!g_find(ptr,p_guid)) throw exception_service_not_found(); | |
| 21 return ptr->get_data_struct_t<T>(p_out); | |
| 22 } | |
| 23 | |
| 24 template<class T> | |
| 25 void config_object::g_set_data_struct_t(const GUID & p_guid,const T & p_in) { | |
| 26 service_ptr_t<config_object> ptr; | |
| 27 if (!g_find(ptr,p_guid)) throw exception_service_not_found(); | |
| 28 return ptr->set_data_struct_t<T>(p_in); | |
| 29 } | |
| 30 | |
| 31 #if FOOBAR2020 | |
| 32 class config_object_impl : public config_object, private cfg_var_legacy::cfg_var_reader | |
| 33 { | |
| 34 public: | |
| 35 GUID get_guid() const override {return cfg_var_reader::m_guid;} | |
| 36 void get_data(stream_writer * p_stream,abort_callback & p_abort) const override; | |
| 37 void set_data(stream_reader * p_stream,abort_callback & p_abort,bool p_notify) override; | |
| 38 | |
| 39 config_object_impl(const GUID & p_guid,const void * p_data,t_size p_bytes); | |
| 40 private: | |
| 41 #ifdef FOOBAR2000_HAVE_CFG_VAR_LEGACY | |
| 42 void set_data_raw(stream_reader * p_stream,t_size,abort_callback & p_abort) override {set_data(p_stream,p_abort,false);} | |
| 43 #endif | |
| 44 | |
| 45 pfc::string8 formatName() const; | |
| 46 | |
| 47 fb2k::memBlockRef m_initial; | |
| 48 }; | |
| 49 #else | |
| 50 class config_object_impl : public config_object, private cfg_var_legacy::cfg_var | |
| 51 { | |
| 52 public: | |
| 53 GUID get_guid() const { return cfg_var::get_guid(); } | |
| 54 void get_data(stream_writer* p_stream, abort_callback& p_abort) const; | |
| 55 void set_data(stream_reader* p_stream, abort_callback& p_abort, bool p_notify); | |
| 56 | |
| 57 config_object_impl(const GUID& p_guid, const void* p_data, t_size p_bytes); | |
| 58 private: | |
| 59 | |
| 60 //cfg_var methods | |
| 61 void get_data_raw(stream_writer* p_stream, abort_callback& p_abort) { get_data(p_stream, p_abort); } | |
| 62 void set_data_raw(stream_reader* p_stream, t_size p_sizehint, abort_callback& p_abort) { set_data(p_stream, p_abort, false); } | |
| 63 | |
| 64 mutable pfc::readWriteLock m_sync; | |
| 65 pfc::array_t<t_uint8> m_data; | |
| 66 }; | |
| 67 #endif | |
| 68 | |
| 69 typedef service_factory_single_transparent_t<config_object_impl> config_object_factory; | |
| 70 | |
| 71 class config_object_bool_factory : public config_object_factory { | |
| 72 public: | |
| 73 config_object_bool_factory(const GUID& id, bool def) : config_object_factory(id, &def, 1) {} | |
| 74 }; | |
| 75 | |
| 76 class config_object_string_factory : public config_object_factory { | |
| 77 public: | |
| 78 config_object_string_factory(const GUID& id, const char * def) : config_object_factory(id, def, strlen(def)) {} | |
| 79 }; | |
| 80 | |
| 81 | |
| 82 class config_object_notify_impl_simple : public config_object_notify | |
| 83 { | |
| 84 public: | |
| 85 t_size get_watched_object_count() override {return 1;} | |
| 86 GUID get_watched_object(t_size) override {return m_guid;} | |
| 87 void on_watched_object_changed(const service_ptr_t<config_object> & p_object) override {m_func(p_object);} | |
| 88 | |
| 89 typedef void (*t_func)(const service_ptr_t<config_object> &); | |
| 90 | |
| 91 config_object_notify_impl_simple(const GUID & p_guid,t_func p_func) : m_guid(p_guid), m_func(p_func) {} | |
| 92 private: | |
| 93 GUID m_guid; | |
| 94 t_func m_func; | |
| 95 }; | |
| 96 | |
| 97 typedef service_factory_single_transparent_t<config_object_notify_impl_simple> config_object_notify_simple_factory; |
