• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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