12 union {
void *
const align_;
char mem_[
sizeof (
void*)]; };
13 void set (tracktion::Selectable*)
noexcept;
16 tracktion::Selectable* get ()
const noexcept;
21 SelectableBaseref& operator= (tracktion::Selectable *obj) { set (obj);
return *
this; }
26template<
typename SelectableType>
33 SelectableType* get ()
const noexcept {
return dynamic_cast<SelectableType*
> (base_.get()); }
34 SelectableType* operator-> ()
const noexcept {
return get(); }
37 bool operator== (SelectableType *obj)
const noexcept {
return base_.get() == obj; }
38 bool operator!= (SelectableType *obj)
const noexcept {
return base_.get() != obj; }
39 bool operator== (
std::nullptr_t)
const noexcept {
return base_.get() ==
nullptr; }
40 bool operator!= (
std::nullptr_t)
const noexcept {
return base_.get() !=
nullptr; }
41 bool operator== (
const SelectableWeakref &ref)
const noexcept {
return base_.get() == ref.base_.get(); }
42 bool operator!= (
const SelectableWeakref &ref)
const noexcept {
return base_.get() != ref.base_.get(); }
52template<
typename AseType>
inline AseType*
58template<
typename AseType>
inline AseType*
61 return selectable ? find_ase_obj<AseType> (*selectable) :
nullptr;
Wrapper for juce::WeakReference<tracktion::Selectable>
Mimick tracktion::engine::SafeSelectable<> for tracktion::Selectable descendants.
The Anklang C++ API namespace.
void register_ase_obj(VirtualBase *ase_impl, tracktion::Selectable &selectable)
Helper: register AseImpl with a tracktion Selectable via ase_obj_.
AseType * find_ase_obj(tracktion::Selectable &selectable)
Helper: lookup AseType from tracktion Selectable via ase_obj_.
VirtualBase * find_ase_obj_virtual_base(tracktion::Selectable *selectable)
Helper: lookup Ase::VirtualBase from tracktion Selectable via ase_obj_.
void unregister_ase_obj(VirtualBase *ase_impl, tracktion::Selectable *selectable)
Helper: unregister AseImpl from a tracktion Selectable (selectable may be nullptr)
Common base type to allow casting between polymorphic classes.