[meta] Add hb_reference_wrapper<>

Functionality kinda superset of std:: counterpart.
This commit is contained in:
Behdad Esfahbod 2019-05-07 00:03:35 -07:00
parent 0bf86d9c5d
commit 03a68165d8
1 changed files with 21 additions and 0 deletions

View File

@ -138,6 +138,27 @@ struct
} HB_FUNCOBJ (hb_ref);
template <typename T>
struct hb_reference_wrapper
{
hb_reference_wrapper (T v) : v (v) {}
hb_reference_wrapper (const hb_reference_wrapper& o) : v (o.v) {}
bool operator == (const hb_reference_wrapper& o) const { return v == o.v; }
bool operator != (const hb_reference_wrapper& o) const { return v != o.v; }
T get () const { return v; }
T v;
};
template <typename T>
struct hb_reference_wrapper<T&>
{
hb_reference_wrapper (T& v) : v (&v) {}
hb_reference_wrapper (const hb_reference_wrapper& o) : v (o.v) {}
bool operator == (const hb_reference_wrapper& o) const { return v == o.v; }
bool operator != (const hb_reference_wrapper& o) const { return v != o.v; }
T* get () const { return v; }
T* v;
};
template <bool B, typename T = void> struct hb_enable_if {};
template <typename T> struct hb_enable_if<true, T> { typedef T type; };