blob: 81d5f7c888b1d020bfa23d601e89dae0e4aa8f56 [file] [log] [blame]
// Copyright 2013 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 "net/disk_cache/simple/simple_entry_operation.h"
#include "base/logging.h"
#include "net/base/io_buffer.h"
#include "net/disk_cache/disk_cache.h"
#include "net/disk_cache/simple/simple_entry_impl.h"
namespace disk_cache {
SimpleEntryOperation::SimpleEntryOperation(const SimpleEntryOperation& other)
: entry_(other.entry_.get()),
buf_(other.buf_),
callback_(other.callback_),
out_entry_(other.out_entry_),
offset_(other.offset_),
length_(other.length_),
type_(other.type_),
have_index_(other.have_index_),
index_(other.index_),
truncate_(other.truncate_),
optimistic_(other.optimistic_),
alone_in_queue_(other.alone_in_queue_) {
}
SimpleEntryOperation::~SimpleEntryOperation() {}
// Static.
SimpleEntryOperation SimpleEntryOperation::OpenOperation(
SimpleEntryImpl* entry,
bool have_index,
const CompletionCallback& callback,
Entry** out_entry) {
return SimpleEntryOperation(entry,
NULL,
callback,
out_entry,
0,
0,
TYPE_OPEN,
have_index,
0,
false,
false,
false);
}
// Static.
SimpleEntryOperation SimpleEntryOperation::CreateOperation(
SimpleEntryImpl* entry,
bool have_index,
const CompletionCallback& callback,
Entry** out_entry) {
return SimpleEntryOperation(entry,
NULL,
callback,
out_entry,
0,
0,
TYPE_CREATE,
have_index,
0,
false,
false,
false);
}
// Static.
SimpleEntryOperation SimpleEntryOperation::CloseOperation(
SimpleEntryImpl* entry) {
return SimpleEntryOperation(entry,
NULL,
CompletionCallback(),
NULL,
0,
0,
TYPE_CLOSE,
false,
0,
false,
false,
false);
}
// Static.
SimpleEntryOperation SimpleEntryOperation::ReadOperation(
SimpleEntryImpl* entry,
int index,
int offset,
int length,
net::IOBuffer* buf,
const CompletionCallback& callback,
bool alone_in_queue) {
return SimpleEntryOperation(entry,
buf,
callback,
NULL,
offset,
length,
TYPE_READ,
false,
index,
false,
false,
alone_in_queue);
}
// Static.
SimpleEntryOperation SimpleEntryOperation::WriteOperation(
SimpleEntryImpl* entry,
int index,
int offset,
int length,
net::IOBuffer* buf,
bool truncate,
bool optimistic,
const CompletionCallback& callback) {
return SimpleEntryOperation(entry,
buf,
callback,
NULL,
offset,
length,
TYPE_WRITE,
false,
index,
truncate,
optimistic,
false);
}
bool SimpleEntryOperation::ConflictsWith(
const SimpleEntryOperation& other_op) const {
if (type_ != TYPE_READ && type_ != TYPE_WRITE)
return true;
if (other_op.type() != TYPE_READ && other_op.type() != TYPE_WRITE)
return true;
if (type() == TYPE_READ && other_op.type() == TYPE_READ)
return false;
if (index_ != other_op.index_)
return false;
int end = (type_ == TYPE_WRITE && truncate_) ? INT_MAX : offset_ + length_;
int other_op_end = (other_op.type() == TYPE_WRITE && other_op.truncate())
? INT_MAX
: other_op.offset() + other_op.length();
return (offset_ < other_op_end && other_op.offset() < end);
}
void SimpleEntryOperation::ReleaseReferences() {
callback_ = CompletionCallback();
buf_ = NULL;
entry_ = NULL;
}
SimpleEntryOperation::SimpleEntryOperation(SimpleEntryImpl* entry,
net::IOBuffer* buf,
const CompletionCallback& callback,
Entry** out_entry,
int offset,
int length,
EntryOperationType type,
bool have_index,
int index,
bool truncate,
bool optimistic,
bool alone_in_queue)
: entry_(entry),
buf_(buf),
callback_(callback),
out_entry_(out_entry),
offset_(offset),
length_(length),
type_(type),
have_index_(have_index),
index_(index),
truncate_(truncate),
optimistic_(optimistic),
alone_in_queue_(alone_in_queue) {
}
} // namespace disk_cache