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 
10 namespace android {
11 namespace dvr {
12 
13 template <typename T>
14 inline std::ostream& operator<<(std::ostream& out,
15                                 const Eigen::Vector<T, 2>& vec) {
16   return out << "vec2(" << vec.x() << ',' << vec.y() << ')';
17 }
18 
19 template <typename T>
20 inline 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 
25 template <typename T>
26 inline 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 
32 template <typename T>
33 inline 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 
54 inline 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