Home | History | Annotate | Download | only in base
      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