diff options
| author | Juan Linietsky <reduzio@gmail.com> | 2018-05-07 15:39:25 -0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-07 15:39:25 -0300 | 
| commit | 3f3b4703e4e48aa7cbcce44c03e2e45b708c8b47 (patch) | |
| tree | dbaff036dbf379332061233bd5c6c8c149d78b14 | |
| parent | 4897373015cf984d5a57344d9933980e53cb96e6 (diff) | |
| parent | 68dda540fd95405c19649b40a93430629e61556d (diff) | |
Merge pull request #18121 from Crazy-P/Resolves-Freeze-on-change-reflection-probe
Resolves editor freezes on change of reflection probe
| -rw-r--r-- | core/self_list.h | 41 | 
1 files changed, 26 insertions, 15 deletions
diff --git a/core/self_list.h b/core/self_list.h index e83afb66ef..6e84e1cd5f 100644 --- a/core/self_list.h +++ b/core/self_list.h @@ -39,6 +39,7 @@ public:  	class List {  		SelfList<T> *_first; +		SelfList<T> *_last;  	public:  		void add(SelfList<T> *p_elem) { @@ -48,47 +49,54 @@ public:  			p_elem->_root = this;  			p_elem->_next = _first;  			p_elem->_prev = NULL; -			if (_first) + +			if (_first) {  				_first->_prev = p_elem; + +			} else { +				_last = p_elem; +			} +  			_first = p_elem;  		} +  		void add_last(SelfList<T> *p_elem) {  			ERR_FAIL_COND(p_elem->_root); -			if (!_first) { -				add(p_elem); -				return; -			} +			p_elem->_root = this; +			p_elem->_next = NULL; +			p_elem->_prev = _last; -			SelfList<T> *e = _first; +			if (_last) { +				_last->_next = p_elem; -			while (e->next()) { -				e = e->next(); +			} else { +				_first = p_elem;  			} -			e->_next = p_elem; -			p_elem->_prev = e->_next; -			p_elem->_root = this; +			_last = p_elem;  		}  		void remove(SelfList<T> *p_elem) {  			ERR_FAIL_COND(p_elem->_root != this);  			if (p_elem->_next) { -  				p_elem->_next->_prev = p_elem->_prev;  			} -			if (p_elem->_prev) { +			if (p_elem->_prev) {  				p_elem->_prev->_next = p_elem->_next;  			}  			if (_first == p_elem) { -  				_first = p_elem->_next;  			} +			if (_last == p_elem) { +				_last = p_elem->_prev; +			} +  			p_elem->_next = NULL;  			p_elem->_prev = NULL;  			p_elem->_root = NULL; @@ -96,7 +104,10 @@ public:  		_FORCE_INLINE_ SelfList<T> *first() { return _first; }  		_FORCE_INLINE_ const SelfList<T> *first() const { return _first; } -		_FORCE_INLINE_ List() { _first = NULL; } +		_FORCE_INLINE_ List() { +			_first = NULL; +			_last = NULL; +		}  		_FORCE_INLINE_ ~List() { ERR_FAIL_COND(_first != NULL); }  	};  |