1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // DataPack represents a read-only view onto an on-disk file that contains 6 // (key, value) pairs of data. It's used to store static resources like 7 // translation strings and images. 8 9 #ifndef BASE_DATA_PACK_H_ 10 #define BASE_DATA_PACK_H_ 11 12 #include <map> 13 14 #include "base/basictypes.h" 15 #include "base/ref_counted_memory.h" 16 #include "base/scoped_ptr.h" 17 18 namespace file_util { 19 class MemoryMappedFile; 20 } 21 class FilePath; 22 23 namespace base { 24 25 class StringPiece; 26 27 class DataPack { 28 public: 29 DataPack(); 30 ~DataPack(); 31 32 // Load a pack file from |path|, returning false on error. 33 bool Load(const FilePath& path); 34 35 // Get resource by id |resource_id|, filling in |data|. 36 // The data is owned by the DataPack object and should not be modified. 37 // Returns false if the resource id isn't found. 38 bool GetStringPiece(uint32 resource_id, StringPiece* data); 39 40 // Like GetStringPiece(), but returns a reference to memory. This interface 41 // is used for image data, while the StringPiece interface is usually used 42 // for localization strings. 43 RefCountedStaticMemory* GetStaticMemory(uint32 resource_id); 44 45 // Writes a pack file containing |resources| to |path|. 46 static bool WritePack(const FilePath& path, 47 const std::map<uint32, StringPiece>& resources); 48 49 private: 50 // The memory-mapped data. 51 scoped_ptr<file_util::MemoryMappedFile> mmap_; 52 53 // Number of resources in the data. 54 size_t resource_count_; 55 56 DISALLOW_COPY_AND_ASSIGN(DataPack); 57 }; 58 59 } // namespace base 60 61 #endif // BASE_DATA_PACK_H_ 62