Skip to content
Snippets Groups Projects

rm remaining uses of PolyVector (#914)

Merged Wuttke, Joachim requested to merge j.0 into main
1 file
+ 0
88
Compare changes
  • Side-by-side
  • Inline
+ 0
88
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file GUI/Model/Descriptor/PolyVector.h
//! @brief Defines class PolyVector.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2021
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#ifndef BORNAGAIN_GUI_MODEL_DESCRIPTOR_POLYVECTOR_H
#define BORNAGAIN_GUI_MODEL_DESCRIPTOR_POLYVECTOR_H
#include "GUI/Model/Descriptor/PolyItem.h"
//! An owning vector of PolyItem%s.
template <typename Catalog> class PolyVector {
public:
using BaseType = typename Catalog::BaseType;
void erase_item(const BaseType* t)
{
for (size_t i = 0; i < m_v.size(); i++)
if (m_v[i].certainItem() == t)
m_v.erase(m_v.begin() + i);
}
void delete_polyitem_at(size_t i) { m_v.erase(m_v.begin() + i); }
void insert_item_at(size_t i, BaseType* t)
{
PolyItem<Catalog> p;
p.setCertainItem(t);
m_v.insert(m_v.begin() + i, std::move(p));
}
int index_of(const BaseType* t) const
{
for (size_t i = 0; i < m_v.size(); i++)
if (m_v[i].certainItem() == t)
return int(i);
return -1;
}
void move_polyitem(size_t fromIndex, size_t toIndex)
{
if (fromIndex > toIndex)
std::rotate(m_v.rend() - fromIndex - 1, m_v.rend() - fromIndex, m_v.rend() - toIndex);
else
std::rotate(m_v.begin() + fromIndex, m_v.begin() + fromIndex + 1,
m_v.begin() + toIndex + 1);
}
QVector<BaseType*> toQVector() const
{
QVector<BaseType*> result;
for (const auto& p : m_v)
result.append(p.certainItem());
return result;
}
void emplace_item_back(BaseType* item) { insert_item_at(m_v.size(), item); }
void clear() { m_v.clear(); }
size_t size() const { return m_v.size(); }
bool empty() const { return m_v.empty(); }
PolyItem<Catalog>& operator[](int i) { return m_v[i]; }
PolyItem<Catalog>& at(int i) { return m_v.at(i); }
PolyItem<Catalog>& front() { return m_v.front(); }
PolyItem<Catalog>& back() { return m_v.back(); }
using Iterator = typename std::vector<PolyItem<Catalog>>::iterator;
using ConstIterator = typename std::vector<PolyItem<Catalog>>::const_iterator;
ConstIterator begin() const { return m_v.cbegin(); }
ConstIterator end() const { return m_v.cend(); }
Iterator begin() { return m_v.begin(); }
Iterator end() { return m_v.end(); }
private:
std::vector<PolyItem<Catalog>> m_v;
};
#endif // BORNAGAIN_GUI_MODEL_DESCRIPTOR_POLYVECTOR_H
Loading