Use type aliasing for meta-functions, ie. those returning a type
This commit is contained in:
parent
1ce11b4437
commit
54ece299bc
|
@ -42,7 +42,8 @@ struct
|
||||||
//{ return hb_deref_pointer (v).hash (); }
|
//{ return hb_deref_pointer (v).hash (); }
|
||||||
/* Instead, the following ugly soution: */
|
/* Instead, the following ugly soution: */
|
||||||
template <typename T,
|
template <typename T,
|
||||||
hb_enable_if (!hb_is_integer (hb_remove_const (hb_remove_reference (T))) && !hb_is_pointer (T))>
|
hb_enable_if (!hb_is_integer (hb_remove_const<hb_remove_reference<T> >) &&
|
||||||
|
!hb_is_pointer (T))>
|
||||||
uint32_t operator () (T&& v) const { return v.hash (); }
|
uint32_t operator () (T&& v) const { return v.hash (); }
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
|
@ -47,13 +47,13 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
|
||||||
hb_iter_with_fallback_t<hb_array_t<Type>, Type&> (),
|
hb_iter_with_fallback_t<hb_array_t<Type>, Type&> (),
|
||||||
arrayZ (o.arrayZ), length (o.length) {}
|
arrayZ (o.arrayZ), length (o.length) {}
|
||||||
template <typename U = Type, hb_enable_if (hb_is_const (U))>
|
template <typename U = Type, hb_enable_if (hb_is_const (U))>
|
||||||
hb_array_t (const hb_array_t<hb_remove_const (Type)> &o) : arrayZ (o.arrayZ), length (o.length) {}
|
hb_array_t (const hb_array_t<hb_remove_const<Type> > &o) : arrayZ (o.arrayZ), length (o.length) {}
|
||||||
|
|
||||||
hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
|
hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {}
|
||||||
template <unsigned int length_> hb_array_t (Type (&array_)[length_]) : arrayZ (array_), length (length_) {}
|
template <unsigned int length_> hb_array_t (Type (&array_)[length_]) : arrayZ (array_), length (length_) {}
|
||||||
|
|
||||||
template <typename U = Type, hb_enable_if (hb_is_const (U))>
|
template <typename U = Type, hb_enable_if (hb_is_const (U))>
|
||||||
hb_array_t& operator = (const hb_array_t<hb_remove_const (Type)> &o)
|
hb_array_t& operator = (const hb_array_t<hb_remove_const<Type> > &o)
|
||||||
{ arrayZ = o.arrayZ; length = o.length; return *this; }
|
{ arrayZ = o.arrayZ; length = o.length; return *this; }
|
||||||
hb_array_t& operator = (const hb_array_t &o)
|
hb_array_t& operator = (const hb_array_t &o)
|
||||||
{ arrayZ = o.arrayZ; length = o.length; return *this; }
|
{ arrayZ = o.arrayZ; length = o.length; return *this; }
|
||||||
|
@ -214,7 +214,7 @@ struct hb_sorted_array_t :
|
||||||
hb_sorted_array_t () : hb_array_t<Type> () {}
|
hb_sorted_array_t () : hb_array_t<Type> () {}
|
||||||
hb_sorted_array_t (const hb_array_t<Type> &o) : hb_array_t<Type> (o) {}
|
hb_sorted_array_t (const hb_array_t<Type> &o) : hb_array_t<Type> (o) {}
|
||||||
template <typename U = Type, hb_enable_if (hb_is_const (U))>
|
template <typename U = Type, hb_enable_if (hb_is_const (U))>
|
||||||
hb_sorted_array_t (const hb_sorted_array_t<hb_remove_const (Type)> &o) : hb_array_t<Type> (o) {}
|
hb_sorted_array_t (const hb_sorted_array_t<hb_remove_const<Type> > &o) : hb_array_t<Type> (o) {}
|
||||||
hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
|
hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t<Type> (array_, length_) {}
|
||||||
template <unsigned int length_> hb_sorted_array_t (Type (&array_)[length_]) : hb_array_t<Type> (array_) {}
|
template <unsigned int length_> hb_sorted_array_t (Type (&array_)[length_]) : hb_array_t<Type> (array_) {}
|
||||||
|
|
||||||
|
|
|
@ -283,7 +283,7 @@ struct hb_atomic_int_t
|
||||||
template <typename P>
|
template <typename P>
|
||||||
struct hb_atomic_ptr_t
|
struct hb_atomic_ptr_t
|
||||||
{
|
{
|
||||||
typedef hb_remove_pointer (P) T;
|
typedef hb_remove_pointer<P> T;
|
||||||
|
|
||||||
void init (T* v_ = nullptr) { set_relaxed (v_); }
|
void init (T* v_ = nullptr) { set_relaxed (v_); }
|
||||||
void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
|
void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); }
|
||||||
|
|
|
@ -81,7 +81,7 @@ struct hb_blob_t
|
||||||
template <typename P>
|
template <typename P>
|
||||||
struct hb_blob_ptr_t
|
struct hb_blob_ptr_t
|
||||||
{
|
{
|
||||||
typedef hb_remove_pointer (P) T;
|
typedef hb_remove_pointer<P> T;
|
||||||
|
|
||||||
hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
|
hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {}
|
||||||
hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
|
hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; }
|
||||||
|
|
|
@ -783,7 +783,7 @@ parse_uint32 (const char **pp, const char *end, uint32_t *pv)
|
||||||
static void free_static_C_locale ();
|
static void free_static_C_locale ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct hb_C_locale_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer (HB_LOCALE_T),
|
static struct hb_C_locale_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<HB_LOCALE_T>,
|
||||||
hb_C_locale_lazy_loader_t>
|
hb_C_locale_lazy_loader_t>
|
||||||
{
|
{
|
||||||
static HB_LOCALE_T create ()
|
static HB_LOCALE_T create ()
|
||||||
|
|
|
@ -748,7 +748,7 @@ hb_ft_font_create_referenced (FT_Face ft_face)
|
||||||
static void free_static_ft_library ();
|
static void free_static_ft_library ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer (FT_Library),
|
static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<FT_Library>,
|
||||||
hb_ft_library_lazy_loader_t>
|
hb_ft_library_lazy_loader_t>
|
||||||
{
|
{
|
||||||
static FT_Library create ()
|
static FT_Library create ()
|
||||||
|
|
|
@ -78,7 +78,7 @@ struct hb_iter_t
|
||||||
* it will be returning pointer to temporary rvalue. */
|
* it will be returning pointer to temporary rvalue. */
|
||||||
template <typename T = item_t,
|
template <typename T = item_t,
|
||||||
hb_enable_if (hb_is_reference (T))>
|
hb_enable_if (hb_is_reference (T))>
|
||||||
hb_remove_reference (item_t)* operator -> () const { return hb_addressof (**thiz()); }
|
hb_remove_reference<item_t>* operator -> () const { return hb_addressof (**thiz()); }
|
||||||
item_t operator * () const { return thiz()->__item__ (); }
|
item_t operator * () const { return thiz()->__item__ (); }
|
||||||
item_t operator * () { return thiz()->__item__ (); }
|
item_t operator * () { return thiz()->__item__ (); }
|
||||||
item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
|
item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
|
||||||
|
|
|
@ -56,15 +56,15 @@ template <typename T> static inline T hb_declval ();
|
||||||
|
|
||||||
template <typename T> struct hb_match_const { typedef T type; enum { value = false }; };
|
template <typename T> struct hb_match_const { typedef T type; enum { value = false }; };
|
||||||
template <typename T> struct hb_match_const<const T> { typedef T type; enum { value = true }; };
|
template <typename T> struct hb_match_const<const T> { typedef T type; enum { value = true }; };
|
||||||
#define hb_remove_const(T) typename hb_match_const<T>::type
|
template <typename T> using hb_remove_const = typename hb_match_const<T>::type;
|
||||||
#define hb_is_const(T) hb_match_const<T>::value
|
#define hb_is_const(T) hb_match_const<T>::value
|
||||||
template <typename T> struct hb_match_reference { typedef T type; enum { value = false }; };
|
template <typename T> struct hb_match_reference { typedef T type; enum { value = false }; };
|
||||||
template <typename T> struct hb_match_reference<T &> { typedef T type; enum { value = true }; };
|
template <typename T> struct hb_match_reference<T &> { typedef T type; enum { value = true }; };
|
||||||
#define hb_remove_reference(T) typename hb_match_reference<T>::type
|
template <typename T> using hb_remove_reference = typename hb_match_reference<T>::type;
|
||||||
#define hb_is_reference(T) hb_match_reference<T>::value
|
#define hb_is_reference(T) hb_match_reference<T>::value
|
||||||
template <typename T> struct hb_match_pointer { typedef T type; enum { value = false }; };
|
template <typename T> struct hb_match_pointer { typedef T type; enum { value = false }; };
|
||||||
template <typename T> struct hb_match_pointer<T *> { typedef T type; enum { value = true }; };
|
template <typename T> struct hb_match_pointer<T *> { typedef T type; enum { value = true }; };
|
||||||
#define hb_remove_pointer(T) typename hb_match_pointer<T>::type
|
template <typename T> using hb_remove_pointer = typename hb_match_pointer<T>::type;
|
||||||
#define hb_is_pointer(T) hb_match_pointer<T>::value
|
#define hb_is_pointer(T) hb_match_pointer<T>::value
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
@ -79,12 +79,12 @@ struct
|
||||||
/* std::move and std::forward */
|
/* std::move and std::forward */
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static hb_remove_reference (T)&& hb_move (T&& t) { return (hb_remove_reference (T)&&) (t); }
|
static hb_remove_reference<T>&& hb_move (T&& t) { return (hb_remove_reference<T>&&) (t); }
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static T&& hb_forward (hb_remove_reference (T)& t) { return (T&&) t; }
|
static T&& hb_forward (hb_remove_reference<T>& t) { return (T&&) t; }
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static T&& hb_forward (hb_remove_reference (T)&& t) { return (T&&) t; }
|
static T&& hb_forward (hb_remove_reference<T>&& t) { return (T&&) t; }
|
||||||
|
|
||||||
|
|
||||||
/* Void! For when we need a expression-type of void. */
|
/* Void! For when we need a expression-type of void. */
|
||||||
|
|
|
@ -95,7 +95,7 @@ struct Null {
|
||||||
template <typename QType>
|
template <typename QType>
|
||||||
struct NullHelper
|
struct NullHelper
|
||||||
{
|
{
|
||||||
typedef hb_remove_const (hb_remove_reference (QType)) Type;
|
typedef hb_remove_const<hb_remove_reference<QType> > Type;
|
||||||
static const Type & get_null () { return Null<Type>::get_null (); }
|
static const Type & get_null () { return Null<Type>::get_null (); }
|
||||||
};
|
};
|
||||||
#define Null(Type) NullHelper<Type>::get_null ()
|
#define Null(Type) NullHelper<Type>::get_null ()
|
||||||
|
@ -148,7 +148,7 @@ static inline Type& Crap () {
|
||||||
template <typename QType>
|
template <typename QType>
|
||||||
struct CrapHelper
|
struct CrapHelper
|
||||||
{
|
{
|
||||||
typedef hb_remove_const (hb_remove_reference (QType)) Type;
|
typedef hb_remove_const<hb_remove_reference<QType> > Type;
|
||||||
static Type & get_crap () { return Crap<Type> (); }
|
static Type & get_crap () { return Crap<Type> (); }
|
||||||
};
|
};
|
||||||
#define Crap(Type) CrapHelper<Type>::get_crap ()
|
#define Crap(Type) CrapHelper<Type>::get_crap ()
|
||||||
|
@ -171,7 +171,7 @@ struct CrapOrNullHelper<const Type> {
|
||||||
template <typename P>
|
template <typename P>
|
||||||
struct hb_nonnull_ptr_t
|
struct hb_nonnull_ptr_t
|
||||||
{
|
{
|
||||||
typedef hb_remove_pointer (P) T;
|
typedef hb_remove_pointer<P> T;
|
||||||
|
|
||||||
hb_nonnull_ptr_t (T *v_ = nullptr) : v (v_) {}
|
hb_nonnull_ptr_t (T *v_ = nullptr) : v (v_) {}
|
||||||
T * operator = (T *v_) { return v = v_; }
|
T * operator = (T *v_) { return v = v_; }
|
||||||
|
|
Loading…
Reference in New Issue