hexed 0.3.0
 
Loading...
Searching...
No Matches
Array.hpp File Reference

Defines `Array` and related macros, functions, and constants. More...

#include <vector>
#include "assert.hpp"
#include "math.hpp"
#include "Iterator.hpp"

Classes

class  hexed::Array< T >
 Represents a dynamic-sized multidimensional array. More...
 

Namespaces

namespace  hexed
 Global namespace for all of the C++ API of Hexed.
 

Macros

#define HEXED_ARRAY_BOUNDS_CHECK   false
 Controls whether bounds-checking assertions are used in hexed::Array.
 
#define HEXED_ARRAY_ASSERT(...)
 Enforces an assertion iff HEXED_ARRAY_BOUNDS_CHECK is true.
 
#define QUALIFIED(CONST)
 
#define DEFINE_OPERATOR(BIN_OP)
 
#define DEFINE_OPERATOR(BIN_OP)
 
#define DEFINE_OPERATOR(UN_OP)
 

Functions

template<typename T >
Array< T > hexed::operator- (const Array< T > &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator- (const Array< T > &op0, const T &op1)
 
template<typename T >
Array< T > hexed::operator- (const T &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator+ (const Array< T > &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator+ (const Array< T > &op0, const T &op1)
 
template<typename T >
Array< T > hexed::operator+ (const T &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator/ (const Array< T > &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator/ (const Array< T > &op0, const T &op1)
 
template<typename T >
Array< T > hexed::operator/ (const T &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator* (const Array< T > &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator* (const Array< T > &op0, const T &op1)
 
template<typename T >
Array< T > hexed::operator* (const T &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator% (const Array< T > &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator% (const Array< T > &op0, const T &op1)
 
template<typename T >
Array< T > hexed::operator% (const T &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator&& (const Array< T > &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator&& (const Array< T > &op0, const T &op1)
 
template<typename T >
Array< T > hexed::operator&& (const T &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator|| (const Array< T > &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator|| (const Array< T > &op0, const T &op1)
 
template<typename T >
Array< T > hexed::operator|| (const T &op0, const Array< T > &op1)
 
template<typename T >
Array< T > hexed::operator- (const Array< T > &op0)
 
template<typename T >
Array< T > hexed::operator+ (const Array< T > &op0)
 

Variables

constexpr int hexed::whatever = -1
 used in Array<T>::reshaped()
 
constexpr int hexed::same = -2
 used in Array<T>::reshaped()
 

Detailed Description

Defines `Array` and related macros, functions, and constants.

Macro Definition Documentation

◆ DEFINE_OPERATOR [1/3]

#define DEFINE_OPERATOR ( BIN_OP)
Value:
Array<T>& operator BIN_OP(const Array<T>& that) { \
HEXED_ARRAY_ASSERT(that.size() == size(), "array sizes must match for arithmetic"); \
for (int i = 0; i < size(); ++i) { \
_data[i] BIN_OP that[i]; \
} \
return *this; \
} \
template <typename Scalar> \
Array<T>& operator BIN_OP(Scalar s) { \
for (int i = 0; i < size(); ++i) { \
_data[i] BIN_OP s; \
} \
return *this; \
} \

◆ DEFINE_OPERATOR [2/3]

#define DEFINE_OPERATOR ( BIN_OP)
Value:
template <typename T> \
Array<T> operator BIN_OP(const Array<T>& op0, const Array<T>& op1) { \
HEXED_ARRAY_ASSERT(op0.size() == op1.size(), "array sizes must match for arithmetic"); \
Array<T> result = op0.copy(); \
for (int i = 0; i < op0.size(); ++i) result[i] = op0[i] BIN_OP op1[i]; \
return result; \
} \
template <typename T> \
Array<T> operator BIN_OP(const Array<T>& op0, const T& op1) { \
Array<T> result = op0.copy(); \
for (int i = 0; i < op0.size(); ++i) result[i] = op0[i] BIN_OP op1; \
return result; \
} \
template <typename T> \
Array<T> operator BIN_OP(const T& op0, const Array<T>& op1) { \
Array<T> result = op1.copy(); \
for (int i = 0; i < op1.size(); ++i) result[i] = op0 BIN_OP op1[i]; \
return result; \
}

◆ DEFINE_OPERATOR [3/3]

#define DEFINE_OPERATOR ( UN_OP)
Value:
template <typename T> \
Array<T> operator UN_OP(const Array<T>& op0) { \
Array<T> result = op0.copy(); \
for (int i = 0; i < op0.size(); ++i) result[i] = UN_OP op0[i]; \
return result; \
}

◆ HEXED_ARRAY_ASSERT

#define HEXED_ARRAY_ASSERT ( ...)
Value:
if constexpr (HEXED_ARRAY_BOUNDS_CHECK) { \
HEXED_ASSERT(__VA_ARGS__); \
} \
#define HEXED_ARRAY_BOUNDS_CHECK
Controls whether bounds-checking assertions are used in hexed::Array.
Definition Array.hpp:11

Enforces an assertion iff HEXED_ARRAY_BOUNDS_CHECK is true.