| // 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_ |