mirror of
https://github.com/data61/MP-SPDZ.git
synced 2026-04-20 03:01:31 -04:00
128 lines
2.1 KiB
C++
128 lines
2.1 KiB
C++
/*
|
|
* FixedVector.h
|
|
*
|
|
*/
|
|
|
|
#ifndef TOOLS_FIXEDVECTOR_H_
|
|
#define TOOLS_FIXEDVECTOR_H_
|
|
|
|
#include <array>
|
|
#include <vector>
|
|
#include <assert.h>
|
|
using namespace std;
|
|
|
|
template<class T, size_t L>
|
|
class FixedVector : array<T, L>
|
|
{
|
|
size_t used_size;
|
|
|
|
public:
|
|
static const size_t MAX_SIZE = L;
|
|
|
|
FixedVector()
|
|
{
|
|
used_size = 0;
|
|
}
|
|
|
|
FixedVector(const vector<T>& other)
|
|
{
|
|
reserve(other.size());
|
|
std::copy(other.begin(), other.end(), this->begin());
|
|
used_size = other.size();
|
|
}
|
|
|
|
void reserve(size_t size)
|
|
{
|
|
if (size > L)
|
|
throw runtime_error("too large: " + to_string(size));
|
|
}
|
|
|
|
void push_back(const T& x)
|
|
{
|
|
assert(used_size < L);
|
|
push_back_no_check(x);
|
|
}
|
|
|
|
void push_back_no_check(const T& x)
|
|
{
|
|
(*this)[used_size] = x;
|
|
used_size++;
|
|
}
|
|
|
|
T pop()
|
|
{
|
|
assert(used_size > 0);
|
|
return (*this)[--used_size];
|
|
}
|
|
|
|
bool empty()
|
|
{
|
|
return used_size == 0;
|
|
}
|
|
|
|
bool full()
|
|
{
|
|
return used_size == L;
|
|
}
|
|
|
|
size_t size() const
|
|
{
|
|
return used_size;
|
|
}
|
|
|
|
void resize(size_t size, const T& def = {})
|
|
{
|
|
assert(size <= L);
|
|
for (size_t i = used_size; i < size; i++)
|
|
(*this)[i] = def;
|
|
used_size = size;
|
|
}
|
|
|
|
void clear()
|
|
{
|
|
used_size = 0;
|
|
}
|
|
|
|
typename array<T, L>::iterator begin()
|
|
{
|
|
return array<T, L>::begin();
|
|
}
|
|
|
|
typename array<T, L>::iterator end()
|
|
{
|
|
return begin() + used_size;
|
|
}
|
|
|
|
typename array<T, L>::const_iterator begin() const
|
|
{
|
|
return array<T, L>::begin();
|
|
}
|
|
|
|
typename array<T, L>::const_iterator end() const
|
|
{
|
|
return begin() + used_size;
|
|
}
|
|
|
|
T& operator[](size_t i)
|
|
{
|
|
return array<T, L>::operator[](i);
|
|
}
|
|
|
|
const T& operator[](size_t i) const
|
|
{
|
|
return array<T, L>::operator[](i);
|
|
}
|
|
|
|
T& at(size_t i)
|
|
{
|
|
return array<T, L>::at(i);
|
|
}
|
|
|
|
const T& at(size_t i) const
|
|
{
|
|
return array<T, L>::at(i);
|
|
}
|
|
};
|
|
|
|
#endif /* TOOLS_FIXEDVECTOR_H_ */
|