struct SPStyle { float value; float computed; }; template < typename _Iterator > class __normal_iterator { _Iterator _M_current; public:explicit __normal_iterator(const _Iterator & __i):_M_current(__i) { } const _Iterator & base() const { return _M_current; } }; template < typename _Iterator > inline int operator-(const __normal_iterator < _Iterator > &__lhs, const __normal_iterator < _Iterator > &__rhs) { return __lhs.base() - __rhs.base(); } template < typename _Tp > struct _Vector_base { struct _Vector_impl { _Tp *finish; }; public: _Vector_impl _M_impl; }; template < typename _Tp > class vector:protected _Vector_base < _Tp > { public: unsigned int size() const { return __normal_iterator < const _Tp *>(this->_M_impl.finish) - __normal_iterator < const _Tp *>(this->_M_impl.finish); } const _Tp & operator[] (unsigned int __n)const { } }; class Layout { public:class iterator; iterator end() const; unsigned lineIndex(iterator const &) const; struct Chunk { unsigned in_line; }; struct Character { Chunk const &chunk(Layout const *l) const { } }; vector < Character > _characters; }; class Layout::iterator { public:unsigned _char_index; iterator(Layout const *p, unsigned c, int g):_char_index(c) { } }; inline Layout::iterator Layout::end() const { return iterator(this, _characters.size(), _characters.size()); } inline unsigned Layout::lineIndex(iterator const &it) const { return it._char_index == _characters.size()? 1 : _characters[0].chunk(this).in_line; }; void sp_te_adjust_linespacing_screen() { double by; Layout *layout; SPStyle *style; unsigned line_count = layout->lineIndex(layout->end()); double average_line_height = by / line_count; style->computed = (style->computed ? by : (average_line_height) / average_line_height); style->value = (style->value ? by : (average_line_height) / average_line_height); }