1#ifndef __MULTI_DIM_ARRAY_H__
2#define __MULTI_DIM_ARRAY_H__
31#include "CiftiAssert.h"
42 std::vector<int64_t> m_dims, m_skip;
43 std::vector<T> m_data;
45 int64_t index(
const int& fullDims,
const std::vector<I>& indexSelect)
const;
47 const std::vector<int64_t>& getDimensions()
const {
return m_dims; }
49 void resize(
const std::vector<I>& dims);
51 T& at(
const std::vector<I>& pos);
53 const T& at(
const std::vector<I>& pos)
const;
55 T* get(
const int& fullDims,
const std::vector<I>& indexSelect);
57 const T* get(
const int& fullDims,
const std::vector<I>& indexSelect)
const;
64 m_dims = std::vector<int64_t>(dims.begin(), dims.end());
65 m_skip.resize(m_dims.size());
72 for (
int i = 0; i < (int)m_dims.size(); ++i)
74 CiftiAssert(m_dims[i] > 0);
76 numElems *= m_dims[i];
78 m_data.resize(numElems);
83 int64_t MultiDimArray<T>::index(
const int& fullDims,
const std::vector<I>& indexSelect)
const
85 CiftiAssert(fullDims + indexSelect.size() == m_dims.size());
87 for (
int i = fullDims; i < (int)m_dims.size(); ++i)
89 CiftiAssert(indexSelect[i - fullDims] >= 0 && indexSelect[i - fullDims] < m_dims[i]);
90 ret += m_skip[i] * indexSelect[i - fullDims];
97 T& MultiDimArray<T>::at(
const std::vector<I>& pos)
99 return m_data[index(0, pos)];
104 const T& MultiDimArray<T>::at(
const std::vector<I>& pos)
const
106 return m_data[index(0, pos)];
111 T* MultiDimArray<T>::get(
const int& fullDims,
const std::vector<I>& indexSelect)
113 return m_data.data() + index(fullDims, indexSelect);
118 const T* MultiDimArray<T>::get(
const int& fullDims,
const std::vector<I>& indexSelect)
const
120 return m_data.data() + index(fullDims, indexSelect);
Definition MultiDimArray.h:41
namespace for all CiftiLib functionality
Definition CiftiBrainModelsMap.h:42