aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorThomas Herzog2017-09-05 11:47:51 +0200
committerGitHub2017-09-05 11:47:51 +0200
commitdcdde2f5a9bdb74308c5316affad5af4a3bc2fdb (patch)
treec6330d01dbd935bb8af3e8971c9b1d43f8627382 /core
parent9b9344cab1a01358e5ebdc7efab1c00472b7bf2f (diff)
parent269203a02261d53eb87817c8692bc56f0cf4e3dd (diff)
downloadgodot-dcdde2f5a9bdb74308c5316affad5af4a3bc2fdb.tar.gz
godot-dcdde2f5a9bdb74308c5316affad5af4a3bc2fdb.tar.zst
godot-dcdde2f5a9bdb74308c5316affad5af4a3bc2fdb.zip
Diffstat (limited to 'core')
-rw-r--r--core/list.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/core/list.h b/core/list.h
index a67287a9a..da201e986 100644
--- a/core/list.h
+++ b/core/list.h
@@ -291,6 +291,54 @@ public:
erase(_data->first);
}
+ Element *insert_after(Element *p_element, const T &p_value) {
+ CRASH_COND(p_element && (!_data || p_element->data != _data));
+
+ if (!p_element) {
+ return push_back(p_value);
+ }
+
+ Element *n = memnew_allocator(Element, A);
+ n->value = (T &)p_value;
+ n->prev_ptr = p_element;
+ n->next_ptr = p_element->next_ptr;
+ n->data = _data;
+
+ if (!p_element->next_ptr) {
+ _data->last = n;
+ }
+
+ p_element->next_ptr = n;
+
+ _data->size_cache++;
+
+ return n;
+ }
+
+ Element *insert_before(Element *p_element, const T &p_value) {
+ CRASH_COND(p_element && (!_data || p_element->data != _data));
+
+ if (!p_element) {
+ return push_back(p_value);
+ }
+
+ Element *n = memnew_allocator(Element, A);
+ n->value = (T &)p_value;
+ n->prev_ptr = p_element->prev_ptr;
+ n->next_ptr = p_element;
+ n->data = _data;
+
+ if (!p_element->prev_ptr) {
+ _data->first = n;
+ }
+
+ p_element->prev_ptr = n;
+
+ _data->size_cache++;
+
+ return n;
+ }
+
/**
* find an element in the list,
*/