diff options
Diffstat (limited to 'src/emu/netlist/plib/plists.h')
-rw-r--r-- | src/emu/netlist/plib/plists.h | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/emu/netlist/plib/plists.h b/src/emu/netlist/plib/plists.h index fbc839b3757..0f71a35c9e4 100644 --- a/src/emu/netlist/plib/plists.h +++ b/src/emu/netlist/plib/plists.h @@ -97,7 +97,7 @@ public: plist_t() : std::vector<_ListClass>() {} plist_t(const int numElements) : std::vector<_ListClass>(numElements) {} - void add(const _ListClass &elem) { this->push_back(elem); } + void add(const _ListClass &elem) { this->push_back(elem); } void clear_and_free() { for (_ListClass *i = this->data(); i < this->data() + this->size(); i++) @@ -106,7 +106,7 @@ public: } this->clear(); } - bool contains(const _ListClass &elem) const + bool contains(const _ListClass &elem) const { for (const _ListClass *i = this->data(); i < this->data() + this->size(); i++) { @@ -116,7 +116,7 @@ public: return false; } - void remove(const _ListClass &elem) + void remove(const _ListClass &elem) { for (int i = 0; i < this->size(); i++) { @@ -127,12 +127,12 @@ public: } } } - void remove_at(const int pos) + void remove_at(const int pos) { this->erase(this->begin() + pos); } - int indexof(const _ListClass &elem) const + int indexof(const _ListClass &elem) const { for (int i = 0; i < this->size(); i++) { @@ -218,6 +218,20 @@ public: m_list[m_count++] = elem; } + ATTR_HOT void insert_at(const _ListClass &elem, const std::size_t index) + { + if (m_count >= m_capacity){ + std::size_t new_size = m_capacity * 2; + if (new_size < 32) + new_size = 32; + set_capacity(new_size); + } + for (std::size_t i = m_count; i>index; i--) + m_list[i] = m_list[i-1]; + m_list[index] = elem; + m_count++; + } + ATTR_HOT void remove(const _ListClass &elem) { for (std::size_t i = 0; i < m_count; i++) @@ -525,7 +539,6 @@ public: pstring_list_t(const pstring &str, const pstring &onstr, bool ignore_empty = false) : plist_t<pstring>() { - int p = 0; int pn; @@ -593,9 +606,9 @@ static inline void psort_list(Class &sl) { for(int i = 0; i < (int) sl.size() - 1; i++) { - for(int j = i + 1; j < sl.size(); j++) - if(sl[i] > sl[j]) - std::swap(sl[i], sl[j]); + for(int j = i + 1; j < sl.size(); j++) + if(sl[i] > sl[j]) + std::swap(sl[i], sl[j]); } } |