More tweaks to previous commit
Delete assignment operator of OffsetTo<> instead of Offset<>. In simple ArrayOf<>::sanitize() assert that Type has assignment operator. Ideally we should SFINAE this and fallback to calling Type::sanitize() if assignment operator is not available. But we don't have a case of that in the codebase.
This commit is contained in:
parent
699de689e9
commit
07776b6096
|
@ -86,8 +86,8 @@ typedef struct OffsetTable
|
||||||
const TableRecord& get_table (unsigned int i) const
|
const TableRecord& get_table (unsigned int i) const
|
||||||
{ return tables[i]; }
|
{ return tables[i]; }
|
||||||
unsigned int get_table_tags (unsigned int start_offset,
|
unsigned int get_table_tags (unsigned int start_offset,
|
||||||
unsigned int *table_count, /* IN/OUT */
|
unsigned int *table_count, /* IN/OUT */
|
||||||
hb_tag_t *table_tags /* OUT */) const
|
hb_tag_t *table_tags /* OUT */) const
|
||||||
{
|
{
|
||||||
if (table_count)
|
if (table_count)
|
||||||
{
|
{
|
||||||
|
|
|
@ -173,9 +173,6 @@ typedef Index NameID;
|
||||||
template <typename Type, bool has_null=true>
|
template <typename Type, bool has_null=true>
|
||||||
struct Offset : Type
|
struct Offset : Type
|
||||||
{
|
{
|
||||||
HB_DELETE_COPY_ASSIGN (Offset);
|
|
||||||
Offset () = default;
|
|
||||||
|
|
||||||
Offset& operator = (typename Type::type i) { Type::operator= (i); return *this; }
|
Offset& operator = (typename Type::type i) { Type::operator= (i); return *this; }
|
||||||
|
|
||||||
typedef Type type;
|
typedef Type type;
|
||||||
|
@ -266,6 +263,9 @@ struct _hb_has_null<Type, true>
|
||||||
template <typename Type, typename OffsetType=HBUINT16, bool has_null=true>
|
template <typename Type, typename OffsetType=HBUINT16, bool has_null=true>
|
||||||
struct OffsetTo : Offset<OffsetType, has_null>
|
struct OffsetTo : Offset<OffsetType, has_null>
|
||||||
{
|
{
|
||||||
|
HB_DELETE_COPY_ASSIGN (OffsetTo);
|
||||||
|
OffsetTo () = default;
|
||||||
|
|
||||||
OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
|
OffsetTo& operator = (typename OffsetType::type i) { OffsetType::operator= (i); return *this; }
|
||||||
|
|
||||||
const Type& operator () (const void *base) const
|
const Type& operator () (const void *base) const
|
||||||
|
@ -609,10 +609,16 @@ struct ArrayOf
|
||||||
* we do not need to call their sanitize() as we already did
|
* we do not need to call their sanitize() as we already did
|
||||||
* a bound check on the aggregate array size. We just include
|
* a bound check on the aggregate array size. We just include
|
||||||
* a small unreachable expression to make sure the structs
|
* a small unreachable expression to make sure the structs
|
||||||
* pointed to do have a simple sanitize(), ie. they do not
|
* pointed to do have a simple sanitize() as well as an
|
||||||
|
* assignment opreator. This ensures that they do not
|
||||||
* reference other structs via offsets.
|
* reference other structs via offsets.
|
||||||
*/
|
*/
|
||||||
(void) (false && arrayZ[0].sanitize (c));
|
if (false)
|
||||||
|
{
|
||||||
|
arrayZ[0].sanitize (c);
|
||||||
|
Type v;
|
||||||
|
v = arrayZ[0];
|
||||||
|
}
|
||||||
|
|
||||||
return_trace (true);
|
return_trace (true);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue