// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "src/lib/fostr/fidl/fuchsia.math/amendments.h"

#include <zircon/assert.h>

#include <ostream>

namespace fuchsia {
namespace math {

std::ostream& operator<<(std::ostream& os, const Point& value) {
  return os << "{x=" << value.x << ", y=" << value.y << "}";
}

std::ostream& operator<<(std::ostream& os, const PointF& value) {
  return os << "{x=" << value.x << ", y=" << value.y << "}";
}

std::ostream& operator<<(std::ostream& os, const Point3F& value) {
  return os << "{x=" << value.x << ", y=" << value.y << ", z=" << value.z << "}";
}

std::ostream& operator<<(std::ostream& os, const Rect& value) {
  return os << "{x=" << value.x << ", y=" << value.y << ", width=" << value.width
            << ", height=" << value.height << "}";
}

std::ostream& operator<<(std::ostream& os, const RectF& value) {
  return os << "{x=" << value.x << ", y=" << value.y << ", width=" << value.width
            << ", height=" << value.height << "}";
}

std::ostream& operator<<(std::ostream& os, const RRectF& value) {
  return os << "{x=" << value.x << ", y=" << value.y << ", width=" << value.width
            << ", height=" << value.height << ", top_left_radius_x=" << value.top_left_radius_x
            << ", top_left_radius_y=" << value.top_left_radius_y
            << ", top_right_radius_x=" << value.top_right_radius_x
            << ", top_right_radius_y=" << value.top_right_radius_y
            << ", bottom_left_radius_x=" << value.bottom_left_radius_x
            << ", bottom_left_radius_y=" << value.bottom_left_radius_y
            << ", bottom_right_radius_x=" << value.bottom_right_radius_x
            << ", bottom_right_radius_y=" << value.bottom_right_radius_y << "}";
}

std::ostream& operator<<(std::ostream& os, const Size& value) {
  return os << "{width=" << value.width << ", height=" << value.height << "}";
}

std::ostream& operator<<(std::ostream& os, const SizeF& value) {
  return os << "{width=" << value.width << ", height=" << value.height << "}";
}

std::ostream& operator<<(std::ostream& os, const Inset& value) {
  return os << "{left=" << value.left << ", top=" << value.top << ", right=" << value.right
            << ", bottom=" << value.bottom << "}";
}

std::ostream& operator<<(std::ostream& os, const InsetF& value) {
  return os << "{left=" << value.left << ", top=" << value.top << ", right=" << value.right
            << ", bottom=" << value.bottom << "}";
}

std::ostream& operator<<(std::ostream& os, const Transform& value) {
  ZX_DEBUG_ASSERT(value.matrix.size() == 16);
  os << "[";
  for (size_t i = 0; i < 4; i++) {
    if (i != 0)
      os << ", ";
    os << "[";
    for (size_t j = 0; j < 4; j++) {
      if (j != 0)
        os << ", ";
      os << value.matrix.at(i * 4 + j);
    }
    os << "]";
  }
  os << "]";
  return os;
}

}  // namespace math
}  // namespace fuchsia
