| // 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. | |
| #ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_OPERATION_H_ | |
| #define NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_OPERATION_H_ | |
| #include "base/memory/ref_counted.h" | |
| #include "net/base/completion_once_callback.h" | |
| #include "starboard/types.h" | |
| namespace net { | |
| class IOBuffer; | |
| } | |
| namespace disk_cache { | |
| class Entry; | |
| class SimpleEntryImpl; | |
| // SimpleEntryOperation stores the information regarding operations in | |
| // SimpleEntryImpl, between the moment they are issued by users of the backend, | |
| // and the moment when they are executed. | |
| class SimpleEntryOperation { | |
| public: | |
| typedef net::CompletionOnceCallback CompletionOnceCallback; | |
| enum EntryOperationType { | |
| TYPE_OPEN = 0, | |
| TYPE_CREATE = 1, | |
| TYPE_CLOSE = 2, | |
| TYPE_READ = 3, | |
| TYPE_WRITE = 4, | |
| TYPE_READ_SPARSE = 5, | |
| TYPE_WRITE_SPARSE = 6, | |
| TYPE_GET_AVAILABLE_RANGE = 7, | |
| TYPE_DOOM = 8, | |
| }; | |
| SimpleEntryOperation(SimpleEntryOperation&& other); | |
| ~SimpleEntryOperation(); | |
| static SimpleEntryOperation OpenOperation(SimpleEntryImpl* entry, | |
| bool have_index, | |
| CompletionOnceCallback, | |
| Entry** out_entry); | |
| static SimpleEntryOperation CreateOperation(SimpleEntryImpl* entry, | |
| bool have_index, | |
| CompletionOnceCallback callback, | |
| Entry** out_entry); | |
| static SimpleEntryOperation CloseOperation(SimpleEntryImpl* entry); | |
| static SimpleEntryOperation ReadOperation(SimpleEntryImpl* entry, | |
| int index, | |
| int offset, | |
| int length, | |
| net::IOBuffer* buf, | |
| CompletionOnceCallback callback); | |
| static SimpleEntryOperation WriteOperation(SimpleEntryImpl* entry, | |
| int index, | |
| int offset, | |
| int length, | |
| net::IOBuffer* buf, | |
| bool truncate, | |
| bool optimistic, | |
| CompletionOnceCallback callback); | |
| static SimpleEntryOperation ReadSparseOperation( | |
| SimpleEntryImpl* entry, | |
| int64_t sparse_offset, | |
| int length, | |
| net::IOBuffer* buf, | |
| CompletionOnceCallback callback); | |
| static SimpleEntryOperation WriteSparseOperation( | |
| SimpleEntryImpl* entry, | |
| int64_t sparse_offset, | |
| int length, | |
| net::IOBuffer* buf, | |
| CompletionOnceCallback callback); | |
| static SimpleEntryOperation GetAvailableRangeOperation( | |
| SimpleEntryImpl* entry, | |
| int64_t sparse_offset, | |
| int length, | |
| int64_t* out_start, | |
| CompletionOnceCallback callback); | |
| static SimpleEntryOperation DoomOperation(SimpleEntryImpl* entry, | |
| CompletionOnceCallback callback); | |
| EntryOperationType type() const { | |
| return static_cast<EntryOperationType>(type_); | |
| } | |
| CompletionOnceCallback ReleaseCallback() { return std::move(callback_); } | |
| Entry** out_entry() { return out_entry_; } | |
| bool have_index() const { return have_index_; } | |
| int index() const { return index_; } | |
| int offset() const { return offset_; } | |
| int64_t sparse_offset() const { return sparse_offset_; } | |
| int length() const { return length_; } | |
| int64_t* out_start() { return out_start_; } | |
| net::IOBuffer* buf() { return buf_.get(); } | |
| bool truncate() const { return truncate_; } | |
| bool optimistic() const { return optimistic_; } | |
| private: | |
| SimpleEntryOperation(SimpleEntryImpl* entry, | |
| net::IOBuffer* buf, | |
| CompletionOnceCallback callback, | |
| Entry** out_entry, | |
| int offset, | |
| int64_t sparse_offset, | |
| int length, | |
| int64_t* out_start, | |
| EntryOperationType type, | |
| bool have_index, | |
| int index, | |
| bool truncate, | |
| bool optimistic); | |
| // This ensures entry will not be deleted until the operation has ran. | |
| scoped_refptr<SimpleEntryImpl> entry_; | |
| scoped_refptr<net::IOBuffer> buf_; | |
| CompletionOnceCallback callback_; | |
| // Used in open and create operations. | |
| Entry** out_entry_; | |
| // Used in write and read operations. | |
| const int offset_; | |
| const int64_t sparse_offset_; | |
| const int length_; | |
| // Used in get available range operations. | |
| int64_t* const out_start_; | |
| const EntryOperationType type_; | |
| // Used in open and create operations. | |
| const bool have_index_; | |
| // Used in write and read operations. | |
| const unsigned int index_; | |
| // Used only in write operations. | |
| const bool truncate_; | |
| const bool optimistic_; | |
| }; | |
| } // namespace disk_cache | |
| #endif // NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_OPERATION_H_ |