LCOV - code coverage report
Current view: top level - core - strides.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 27 27 100.0 %
Date: 2024-11-17 01:47:58 Functions: 10 10 100.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: BSD-3-Clause
       2             : // Copyright (c) 2023 Scipp contributors (https://github.com/scipp)
       3             : /// @file
       4             : /// @author Simon Heybrock
       5             : #include "scipp/core/strides.h"
       6             : 
       7             : namespace scipp::core {
       8             : 
       9      192282 : Strides::Strides(const scipp::span<const scipp::index> &strides)
      10      192282 :     : m_strides(strides.begin(), strides.end()) {}
      11             : 
      12         139 : Strides::Strides(const std::initializer_list<scipp::index> strides)
      13         139 :     : m_strides(strides) {}
      14             : 
      15     2583376 : Strides::Strides(const Dimensions &dims) {
      16     2583376 :   scipp::index offset{1};
      17     2583376 :   resize(dims.ndim());
      18     3817733 :   for (scipp::index i = dims.ndim() - 1; i >= 0; --i) {
      19     1234357 :     m_strides[i] = offset;
      20     1234357 :     offset *= dims.size(i);
      21             :   }
      22     2583376 : }
      23             : 
      24       82739 : bool Strides::operator==(const Strides &other) const noexcept {
      25       82739 :   return m_strides == other.m_strides;
      26             : }
      27             : 
      28       76332 : bool Strides::operator!=(const Strides &other) const noexcept {
      29       76332 :   return !operator==(other);
      30             : }
      31             : 
      32       72529 : void Strides::push_back(const scipp::index i) { m_strides.push_back(i); }
      33             : 
      34       83271 : void Strides::clear() { m_strides.clear(); }
      35             : 
      36     6202468 : void Strides::resize(const scipp::index size) { m_strides.resize(size); }
      37             : 
      38      135480 : void Strides::erase(const scipp::index i) {
      39      135480 :   m_strides.erase(m_strides.begin() + i);
      40      135480 : }
      41             : 
      42        6559 : Strides transpose(const Strides &strides, Dimensions from,
      43             :                   const scipp::span<const Dim> order) {
      44        6559 :   scipp::index i = 0;
      45       21544 :   for (const auto &dim : from)
      46       14985 :     from.resize(dim, strides[i++]);
      47        6559 :   from = core::transpose(from, order);
      48       13102 :   return Strides(from.shape());
      49             : }
      50             : 
      51             : } // namespace scipp::core

Generated by: LCOV version 1.14