[AAT.feat] Use lsearch for looking up SettingName's

They are not sorted.
This commit is contained in:
Behdad Esfahbod 2018-11-24 10:46:56 -05:00
parent 44b9331f66
commit 52ae9867ef
3 changed files with 19 additions and 23 deletions

View File

@ -39,12 +39,10 @@ namespace AAT {
struct SettingName struct SettingName
{ {
static int cmp (const void *key_, const void *entry_) int cmp (hb_aat_layout_feature_selector_t key) const
{ {
hb_aat_layout_feature_selector_t key = * (hb_aat_layout_feature_selector_t *) key_; return key < setting ? -1 :
const SettingName * entry = (const SettingName *) entry_; key > setting ? +1 :
return key < entry->setting ? -1 :
key > entry->setting ? +1 :
0; 0;
} }
@ -65,6 +63,7 @@ struct SettingName
public: public:
DEFINE_SIZE_STATIC (4); DEFINE_SIZE_STATIC (4);
}; };
DECLARE_NULL_NAMESPACE_BYTES (AAT, SettingName);
struct feat; struct feat;
@ -126,12 +125,7 @@ struct FeatureName
inline hb_ot_name_id_t get_feature_selector_name_id (const feat *feat, inline hb_ot_name_id_t get_feature_selector_name_id (const feat *feat,
hb_aat_layout_feature_selector_t key) const hb_aat_layout_feature_selector_t key) const
{ {
const SettingName* setting = (SettingName*) hb_bsearch (&key, feat+settingTableZ, return (feat+settingTableZ).lsearch (nSettings, key).get_name_id ();
nSettings,
SettingName::static_size,
SettingName::cmp);
return setting ? setting->get_name_id () : (hb_ot_name_id_t) HB_OT_NAME_ID_INVALID;
} }
inline bool sanitize (hb_sanitize_context_t *c, const void *base) const inline bool sanitize (hb_sanitize_context_t *c, const void *base) const

View File

@ -376,11 +376,11 @@ struct UnsizedArrayOf
{ return hb_array (arrayZ, len); } { return hb_array (arrayZ, len); }
template <typename T> template <typename T>
inline Type &lsearch (unsigned int len, const T &x) inline Type &lsearch (unsigned int len, const T &x, Type &not_found = Crap (Type))
{ return *as_array (len).lsearch (x, &Crap (T)); } { return *as_array (len).lsearch (x, &not_found); }
template <typename T> template <typename T>
inline const Type &lsearch (unsigned int len, const T &x) const inline const Type &lsearch (unsigned int len, const T &x, const Type &not_found = Null (Type)) const
{ return *as_array (len).lsearch (x, &Null (T)); } { return *as_array (len).lsearch (x, &not_found); }
inline void qsort (unsigned int len, unsigned int start = 0, unsigned int end = (unsigned int) -1) inline void qsort (unsigned int len, unsigned int start = 0, unsigned int end = (unsigned int) -1)
{ as_array (len).qsort (start, end); } { as_array (len).qsort (start, end); }
@ -589,11 +589,11 @@ struct ArrayOf
} }
template <typename T> template <typename T>
inline Type &lsearch (const T &x) inline Type &lsearch (const T &x, Type &not_found = Crap (Type))
{ return *as_array ().lsearch (x, &Crap (T)); } { return *as_array ().lsearch (x, &not_found); }
template <typename T> template <typename T>
inline const Type &lsearch (const T &x) const inline const Type &lsearch (const T &x, const Type &not_found = Null (Type)) const
{ return *as_array ().lsearch (x, &Null (T)); } { return *as_array ().lsearch (x, &not_found); }
inline void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1) inline void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1)
{ as_array ().qsort (start, end); } { as_array ().qsort (start, end); }

View File

@ -27,10 +27,11 @@
#include "hb.hh" #include "hb.hh"
#include "hb-open-type.hh" #include "hb-open-type.hh"
#include "hb-aat-layout-common.hh"
#include "hb-ot-layout-common.hh"
#include "hb-face.hh" #include "hb-face.hh"
#include "hb-aat-layout-common.hh"
#include "hb-aat-layout-feat-table.hh"
#include "hb-ot-layout-common.hh"
#include "hb-ot-cmap-table.hh" #include "hb-ot-cmap-table.hh"
#include "hb-ot-head-table.hh" #include "hb-ot-head-table.hh"
#include "hb-ot-maxp-table.hh" #include "hb-ot-maxp-table.hh"
@ -44,6 +45,7 @@ DEFINE_NULL_NAMESPACE_BYTES (OT, Index) = {0xFF,0xFF};
DEFINE_NULL_NAMESPACE_BYTES (OT, LangSys) = {0x00,0x00, 0xFF,0xFF, 0x00,0x00}; DEFINE_NULL_NAMESPACE_BYTES (OT, LangSys) = {0x00,0x00, 0xFF,0xFF, 0x00,0x00};
DEFINE_NULL_NAMESPACE_BYTES (OT, RangeRecord) = {0x00,0x01, 0x00,0x00, 0x00, 0x00}; DEFINE_NULL_NAMESPACE_BYTES (OT, RangeRecord) = {0x00,0x01, 0x00,0x00, 0x00, 0x00};
DEFINE_NULL_NAMESPACE_BYTES (OT, CmapSubtableLongGroup) = {0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00}; DEFINE_NULL_NAMESPACE_BYTES (OT, CmapSubtableLongGroup) = {0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00};
DEFINE_NULL_NAMESPACE_BYTES (AAT, SettingName) = {0xFF,0xFF, 0xFF,0xFF};
/* Hand-coded because Lookup is a template. Sad. */ /* Hand-coded because Lookup is a template. Sad. */
const unsigned char _hb_Null_AAT_Lookup[2] = {0xFF, 0xFF}; const unsigned char _hb_Null_AAT_Lookup[2] = {0xFF, 0xFF};