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