// Copyright 2026, University of Freiburg,
// Chair of Algorithms and Data Structures
// Author: Christoph Ullinger <ullingec@cs.uni-freiburg.de>
#include "./Array.h"
// ____________________________________________________________________________
template<typename T>
Array<T>::Array(T *array, int n) {
size_ = n;
elements_ = new T[n];
for (int i = 0; i < n; ++i) {
elements_[i] = array[i];
}
}
// ____________________________________________________________________________
template<typename T>
Array<T>::~Array() { delete[] elements_; }
// ____________________________________________________________________________
template<typename T>
T Array<T>::operator[](int i) const { return elements_[i]; }
// Explicit instatiation.
template class Array<int>;
template class Array<float>;
// ____________________________________________________________________________
Array<bool>::Array(bool *array, int n) {
size_ = n;
elements_ = 0;
for (int i = 0; i < n; ++i) {
if (array[i]) {
elements_ |= 1 << i;
}
}
}
// ____________________________________________________________________________
Array<bool>::~Array() {}
// ____________________________________________________________________________
bool Array<bool>::operator[](int i) const {
return elements_ >> i & 1;
}
// ____________________________________________________________________________
ArrayInt::ArrayInt(int *array, int n) {
size_ = n;
elements_ = new int[n];
for (int i = 0; i < n; ++i) {
elements_[i] = array[i];
}
}
// ____________________________________________________________________________
ArrayInt::~ArrayInt() { delete[] elements_; }
// ____________________________________________________________________________
int ArrayInt::operator[](int i) const { return elements_[i]; }
// ____________________________________________________________________________
ArrayFloat::ArrayFloat(float *array, int n) {
size_ = n;
elements_ = new float[n];
for (int i = 0; i < n; ++i) {
elements_[i] = array[i];
}
}
// ____________________________________________________________________________
ArrayFloat::~ArrayFloat() { delete[] elements_; }
// ____________________________________________________________________________
float ArrayFloat::operator[](int i) const { return elements_[i]; }