macro.h 1.1 KB

1234567891011121314151617181920212223242526
  1. //
  2. // macro.h
  3. // matrix
  4. //
  5. // Created by Sam Jaffe on 2/17/24.
  6. // Copyright © 2024 Sam Jaffe. All rights reserved.
  7. //
  8. #include <math/vector/macro.h>
  9. #define MATRIX_DISABLE_IF_MATRIX(_type, t, r, c) \
  10. std::enable_if_t<!is_matrix_v<_type>, matrix<t, r, c>>
  11. #define MATRIX_FOR_EACH_RANGE(i, i_max, j, j_max) \
  12. for (size_t i = 0; i < i_max; ++i) \
  13. for (size_t j = 0; j < j_max; ++j)
  14. #define MATRIX_FOR_EACH(i, j) MATRIX_FOR_EACH_RANGE(i, R, j, C)
  15. #define MATRIX_CTOR_N_ARGS(N_IN) \
  16. DEFER_RESOLUTION matrix(REPEAT(N_IN, ARGN, COMMA, vector::vector<T, C>), \
  17. DEFERRED_ENABLE_IF_T(N_IN == R, bool) = true) \
  18. : matrix(std::array{REPEAT(N_IN, ARGN, COMMA)})
  19. #define MATRIX_CTOR_DEDUCTION(N_IN) \
  20. template <typename T, size_t N> \
  21. matrix(REPEAT(N_IN, ARGN, COMMA, vector::vector<T, N>))->matrix<T, N_IN, N>