1#ifndef ANDROID_DVR_LOG_HELPERS_H_
2#define ANDROID_DVR_LOG_HELPERS_H_
3
4#include <iomanip>
5#include <ostream>
6
7#include <private/dvr/eigen.h>
8#include <private/dvr/field_of_view.h>
9
10namespace android {
11namespace dvr {
12
13template <typename T>
14inline std::ostream& operator<<(std::ostream& out,
15                                const Eigen::Vector<T, 2>& vec) {
16  return out << "vec2(" << vec.x() << ',' << vec.y() << ')';
17}
18
19template <typename T>
20inline std::ostream& operator<<(std::ostream& out,
21                                const Eigen::Vector<T, 3>& vec) {
22  return out << "vec3(" << vec.x() << ',' << vec.y() << ',' << vec.z() << ')';
23}
24
25template <typename T>
26inline std::ostream& operator<<(std::ostream& out,
27                                const Eigen::Vector<T, 4>& vec) {
28  return out << "vec4(" << vec.x() << ',' << vec.y() << ',' << vec.z() << ','
29             << vec.w() << ')';
30}
31
32template <typename T>
33inline std::ostream& operator<<(std::ostream& out,
34                                const Eigen::AffineMatrix<T, 4>& mat) {
35  out << std::setfill(' ') << std::setprecision(4) << std::fixed
36      << std::showpos;
37  out << "\nmat4[";
38  out << std::setw(10) << mat(0, 0) << " " << std::setw(10) << mat(0, 1) << " "
39      << std::setw(10) << mat(0, 2) << " " << std::setw(10) << mat(0, 3);
40  out << "]\n    [";
41  out << std::setw(10) << mat(1, 0) << " " << std::setw(10) << mat(1, 1) << " "
42      << std::setw(10) << mat(1, 2) << " " << std::setw(10) << mat(1, 3);
43  out << "]\n    [";
44  out << std::setw(10) << mat(2, 0) << " " << std::setw(10) << mat(2, 1) << " "
45      << std::setw(10) << mat(2, 2) << " " << std::setw(10) << mat(2, 3);
46  out << "]\n    [";
47  out << std::setw(10) << mat(3, 0) << " " << std::setw(10) << mat(3, 1) << " "
48      << std::setw(10) << mat(3, 2) << " " << std::setw(10) << mat(3, 3);
49  out << "]\n";
50
51  return out;
52}
53
54inline std::ostream& operator<<(std::ostream& out, const FieldOfView& fov) {
55  return out << "fov(" << (fov.GetLeft() * 180.0f / M_PI) << ','
56             << (fov.GetRight() * 180.0f / M_PI) << ','
57             << (fov.GetBottom() * 180.0f / M_PI) << ','
58             << (fov.GetTop() * 180.0f / M_PI) << ')';
59}
60
61}  // namespace dvr
62}  // namespace android
63
64#endif  // ANDROID_DVR_LOG_HELPERS_H_
65