blob: 1b687396dafc8550bb709da308a4bda6744b5044 [file] [log] [blame]
// 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 "content/browser/indexed_db/scopes/scopes_lock_manager.h"
#include <ostream>
namespace content {
ScopesLockManager::LockRange::LockRange(std::string begin, std::string end)
: begin(std::move(begin)), end(std::move(end)) {}
ScopesLockManager::ScopeLock::ScopeLock() = default;
ScopesLockManager::ScopeLock::ScopeLock(ScopeLock&& other) noexcept {
DCHECK(!this->is_locked_) << "Cannot move a lock onto an active lock.";
this->is_locked_ = other.is_locked_;
this->range_ = std::move(other.range_);
this->level_ = other.level_;
this->closure_runner_ = std::move(other.closure_runner_);
other.is_locked_ = false;
}
ScopesLockManager::ScopeLock::ScopeLock(LockRange range,
int level,
base::OnceClosure closure)
: is_locked_(!closure.is_null()),
range_(std::move(range)),
level_(level),
closure_runner_(std::move(closure)) {}
ScopesLockManager::ScopeLock& ScopesLockManager::ScopeLock::operator=(
ScopesLockManager::ScopeLock&& other) noexcept {
DCHECK(!this->is_locked_);
this->is_locked_ = other.is_locked_;
this->range_ = std::move(other.range_);
this->level_ = other.level_;
this->closure_runner_ = std::move(other.closure_runner_);
other.is_locked_ = false;
return *this;
};
void ScopesLockManager::ScopeLock::Release() {
is_locked_ = false;
closure_runner_.RunAndReset();
}
std::ostream& operator<<(std::ostream& out,
const ScopesLockManager::LockRange& range) {
return out << "<ScopesLockManager::ScopeLock>{begin: " << range.begin
<< ", end: " << range.end << "}";
}
bool operator==(const ScopesLockManager::LockRange& x,
const ScopesLockManager::LockRange& y) {
return x.begin == y.begin && x.end == y.end;
}
bool operator!=(const ScopesLockManager::LockRange& x,
const ScopesLockManager::LockRange& y) {
return !(x == y);
}
} // namespace content