// Copyright 2014 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 <stddef.h>

#include "mojo/public/cpp/bindings/tests/container_test_util.h"

namespace mojo {

size_t CopyableType::num_instances_ = 0;
size_t MoveOnlyType::num_instances_ = 0;

CopyableType::CopyableType() : copied_(false), ptr_(this) {
  num_instances_++;
}

CopyableType::CopyableType(const CopyableType& other)
    : copied_(true), ptr_(other.ptr()) {
  num_instances_++;
}

CopyableType& CopyableType::operator=(const CopyableType& other) {
  copied_ = true;
  ptr_ = other.ptr();
  return *this;
}

CopyableType::~CopyableType() {
  num_instances_--;
}

MoveOnlyType::MoveOnlyType() : moved_(false), ptr_(this) {
  num_instances_++;
}

MoveOnlyType::MoveOnlyType(MoveOnlyType&& other)
    : moved_(true), ptr_(other.ptr()) {
  num_instances_++;
}

MoveOnlyType& MoveOnlyType::operator=(MoveOnlyType&& other) {
  moved_ = true;
  ptr_ = other.ptr();
  return *this;
}

MoveOnlyType::~MoveOnlyType() {
  num_instances_--;
}

}  // namespace mojo
