// Copyright 2018 The Chromium 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 "media/learning/common/value.h"

#include <cstring>

#include "base/hash/hash.h"

namespace media {
namespace learning {

Value::Value() = default;

Value::Value(const char* x) {
  // std::hash would be nice, but it can (and does) change values between
  // different instances of the class.  In other words, Value("foo") !=
  // Value("foo") necessarily.
  if (x)
    value_ = base::PersistentHash(x, strlen(x));
}

Value::Value(const std::string& x) : value_(base::PersistentHash(x)) {}

Value::Value(bool x) : value_(static_cast<int>(x)) {}

Value::Value(const Value& other) : value_(other.value_) {}

Value::Value(Value&& rhs) noexcept = default;

Value& Value::operator=(const Value& rhs) = default;

Value& Value::operator=(Value&& rhs) noexcept = default;

bool Value::operator==(const Value& rhs) const {
  return value_ == rhs.value_;
}

bool Value::operator!=(const Value& rhs) const {
  return value_ != rhs.value_;
}

bool Value::operator<(const Value& rhs) const {
  return value_ < rhs.value_;
}

bool Value::operator>(const Value& rhs) const {
  return value_ > rhs.value_;
}

bool Value::operator>=(const Value& rhs) const {
  return value_ >= rhs.value_;
}

std::ostream& operator<<(std::ostream& out, const Value& value) {
  return out << value.value_;
}

}  // namespace learning
}  // namespace media
