From 98f14c4cdb837a962083a6702f401d41b4c1ec5c Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 12 Apr 2019 18:11:18 -0400 Subject: [PATCH] Hide symbols in hb-iter Painful. All template methods need to be explicitly hidden :(. Maybe we should switch to -fvisibility=hidden pragma. A LOT more to go. --- src/hb-iter.hh | 88 +++++++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/src/hb-iter.hh b/src/hb-iter.hh index 6f8e7ece1..2f9acf974 100644 --- a/src/hb-iter.hh +++ b/src/hb-iter.hh @@ -58,8 +58,8 @@ struct hb_iter_t private: /* https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern */ - const iter_t* thiz () const { return static_cast (this); } - iter_t* thiz () { return static_cast< iter_t *> (this); } + HB_INTERNAL const iter_t* thiz () const { return static_cast (this); } + HB_INTERNAL iter_t* thiz () { return static_cast< iter_t *> (this); } public: /* TODO: @@ -67,39 +67,39 @@ struct hb_iter_t * an operator and use it, and remove hb_iter_fallback_mixin_t completely. */ /* Operators. */ - iter_t iter () const { return *thiz(); } - iter_t operator + () const { return *thiz(); } - explicit operator bool () const { return thiz()->__more__ (); } - unsigned len () const { return thiz()->__len__ (); } + HB_INTERNAL iter_t iter () const { return *thiz(); } + HB_INTERNAL iter_t operator + () const { return *thiz(); } + HB_INTERNAL explicit operator bool () const { return thiz()->__more__ (); } + HB_INTERNAL unsigned len () const { return thiz()->__len__ (); } /* The following can only be enabled if item_t is reference type. Otherwise * it will be returning pointer to temporary rvalue. */ template - hb_remove_reference (item_t)* operator -> () const { return hb_addressof (**thiz()); } - item_t operator * () const { 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) { return thiz()->__item_at__ (i); } - iter_t& operator += (unsigned count) { thiz()->__forward__ (count); return *thiz(); } - iter_t& operator ++ () { thiz()->__next__ (); return *thiz(); } - iter_t& operator -= (unsigned count) { thiz()->__rewind__ (count); return *thiz(); } - iter_t& operator -- () { thiz()->__prev__ (); return *thiz(); } - iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; } - friend iter_t operator + (unsigned count, const iter_t &it) { return it + count; } - iter_t operator ++ (int) { iter_t c (*thiz()); ++*thiz(); return c; } - iter_t operator - (unsigned count) const { auto c = thiz()->iter (); c -= count; return c; } - iter_t operator -- (int) { iter_t c (*thiz()); --*thiz(); return c; } + HB_INTERNAL hb_remove_reference (item_t)* operator -> () const { return hb_addressof (**thiz()); } + HB_INTERNAL item_t operator * () const { return thiz()->__item__ (); } + HB_INTERNAL item_t operator * () { return thiz()->__item__ (); } + HB_INTERNAL item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); } + HB_INTERNAL item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); } + HB_INTERNAL iter_t& operator += (unsigned count) { thiz()->__forward__ (count); return *thiz(); } + HB_INTERNAL iter_t& operator ++ () { thiz()->__next__ (); return *thiz(); } + HB_INTERNAL iter_t& operator -= (unsigned count) { thiz()->__rewind__ (count); return *thiz(); } + HB_INTERNAL iter_t& operator -- () { thiz()->__prev__ (); return *thiz(); } + HB_INTERNAL iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; } + HB_INTERNAL friend iter_t operator + (unsigned count, const iter_t &it) { return it + count; } + HB_INTERNAL iter_t operator ++ (int) { iter_t c (*thiz()); ++*thiz(); return c; } + HB_INTERNAL iter_t operator - (unsigned count) const { auto c = thiz()->iter (); c -= count; return c; } + HB_INTERNAL iter_t operator -- (int) { iter_t c (*thiz()); --*thiz(); return c; } template - iter_t& operator >> (T &v) { v = **thiz(); ++*thiz(); return *thiz(); } + HB_INTERNAL iter_t& operator >> (T &v) { v = **thiz(); ++*thiz(); return *thiz(); } template - iter_t& operator >> (T &v) const { v = **thiz(); ++*thiz(); return *thiz(); } + HB_INTERNAL iter_t& operator >> (T &v) const { v = **thiz(); ++*thiz(); return *thiz(); } template - iter_t& operator << (const T v) { **thiz() = v; ++*thiz(); return *thiz(); } + HB_INTERNAL iter_t& operator << (const T v) { **thiz() = v; ++*thiz(); return *thiz(); } protected: - hb_iter_t () {} - hb_iter_t (const hb_iter_t &o HB_UNUSED) {} - void operator = (const hb_iter_t &o HB_UNUSED) {} + HB_INTERNAL hb_iter_t () {} + HB_INTERNAL hb_iter_t (const hb_iter_t &o HB_UNUSED) {} + HB_INTERNAL void operator = (const hb_iter_t &o HB_UNUSED) {} }; #define HB_ITER_USING(Name) \ @@ -140,11 +140,11 @@ static const struct /* Specialization for C arrays. */ template inline hb_array_t - operator () (Type *array, unsigned int length) const + HB_INTERNAL operator () (Type *array, unsigned int length) const { return hb_array_t (array, length); } template hb_array_t - operator () (Type (&array)[length]) const + HB_INTERNAL operator () (Type (&array)[length]) const { return hb_array_t (array, length); } } hb_iter HB_UNUSED; @@ -156,31 +156,31 @@ struct hb_iter_fallback_mixin_t { private: /* https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern */ - const iter_t* thiz () const { return static_cast (this); } - iter_t* thiz () { return static_cast< iter_t *> (this); } + HB_INTERNAL const iter_t* thiz () const { return static_cast (this); } + HB_INTERNAL iter_t* thiz () { return static_cast< iter_t *> (this); } public: /* Access: Implement __item__(), or __item_at__() if random-access. */ - item_t __item__ () const { return (*thiz())[0]; } - item_t __item_at__ (unsigned i) const { return *(*thiz() + i); } + HB_INTERNAL item_t __item__ () const { return (*thiz())[0]; } + HB_INTERNAL item_t __item_at__ (unsigned i) const { return *(*thiz() + i); } /* Termination: Implement __more__(), or __len__() if random-access. */ - bool __more__ () const { return thiz()->len (); } - unsigned __len__ () const + HB_INTERNAL bool __more__ () const { return thiz()->len (); } + HB_INTERNAL unsigned __len__ () const { iter_t c (*thiz()); unsigned l = 0; while (c) { c++; l++; }; return l; } /* Advancing: Implement __next__(), or __forward__() if random-access. */ - void __next__ () { *thiz() += 1; } - void __forward__ (unsigned n) { while (n--) ++*thiz(); } + HB_INTERNAL void __next__ () { *thiz() += 1; } + HB_INTERNAL void __forward__ (unsigned n) { while (n--) ++*thiz(); } /* Rewinding: Implement __prev__() or __rewind__() if bidirectional. */ - void __prev__ () { *thiz() -= 1; } - void __rewind__ (unsigned n) { while (n--) --*thiz(); } + HB_INTERNAL void __prev__ () { *thiz() -= 1; } + HB_INTERNAL void __rewind__ (unsigned n) { while (n--) --*thiz(); } protected: - hb_iter_fallback_mixin_t () {} - hb_iter_fallback_mixin_t (const hb_iter_fallback_mixin_t &o HB_UNUSED) {} - void operator = (const hb_iter_fallback_mixin_t &o HB_UNUSED) {} + HB_INTERNAL hb_iter_fallback_mixin_t () {} + HB_INTERNAL hb_iter_fallback_mixin_t (const hb_iter_fallback_mixin_t &o HB_UNUSED) {} + HB_INTERNAL void operator = (const hb_iter_fallback_mixin_t &o HB_UNUSED) {} }; template @@ -189,11 +189,11 @@ struct hb_iter_with_fallback_t : hb_iter_fallback_mixin_t { protected: - hb_iter_with_fallback_t () {} - hb_iter_with_fallback_t (const hb_iter_with_fallback_t &o HB_UNUSED) : + HB_INTERNAL hb_iter_with_fallback_t () {} + HB_INTERNAL hb_iter_with_fallback_t (const hb_iter_with_fallback_t &o HB_UNUSED) : hb_iter_t (o), hb_iter_fallback_mixin_t (o) {} - void operator = (const hb_iter_with_fallback_t &o HB_UNUSED) {} + HB_INTERNAL void operator = (const hb_iter_with_fallback_t &o HB_UNUSED) {} }; /*