Skip to content
Snippets Groups Projects

Untemplify Powerfield

Merged Wuttke, Joachim requested to merge pf3 into main
Files
134
+ 39
7
@@ -20,11 +20,23 @@
Frame::Frame(const std::vector<IAxis*>& axes)
: m_axes(axes)
{
m_size = 1;
for (size_t k = 0; k < rank(); ++k) {
ASSERT(axis(k).size() > 0);
m_size *= axis(k).size();
}
}
const IAxis& Frame::axis(size_t k_axis) const
Frame::~Frame() = default;
std::vector<IAxis*> Frame::cloned_axes() const
{
return *m_axes.at(k_axis);
return m_axes.cloned_vector();
}
size_t Frame::projectedSize(size_t k_axis) const
{
return m_axes[k_axis]->size();
}
double Frame::projectedCoord(size_t i_flat, size_t k_axis) const
@@ -43,13 +55,13 @@ std::vector<int> Frame::allIndices(size_t i_flat) const
size_t Frame::projectedIndex(size_t i_flat, size_t k_axis) const
{
if (rank()==1) {
if (rank() == 1) {
return i_flat;
} else if (rank()==2) {
if (k_axis==0)
} else if (rank() == 2) {
if (k_axis == 0)
return (i_flat / m_axes[1]->size()) % m_axes[0]->size();
if (k_axis==1)
return i_flat % m_axes[1]->size();
if (k_axis == 1)
return i_flat % m_axes[1]->size();
ASSERT(0);
}
ASSERT(0);
@@ -86,3 +98,23 @@ size_t Frame::findGlobalIndex(const std::vector<double>& coordinates) const
axes_indexes[k] = static_cast<unsigned>(m_axes[k]->findClosestIndex(coordinates[k]));
return toGlobalIndex(axes_indexes);
}
bool Frame::operator==(const Frame& o) const
{
if (rank() != o.rank())
return false;
for (size_t k = 0; k < rank(); ++k)
if (axis(k) != o.axis(k))
return false;
return true;
}
bool Frame::hasSameSizes(const Frame& o) const
{
if (rank() != o.rank())
return false;
for (size_t k = 0; k < rank(); ++k)
if (axis(k).size() != o.axis(k).size())
return false;
return true;
}
Loading