1 // Copyright 2013 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 #ifndef CHROME_UTILITY_MEDIA_GALLERIES_PMP_COLUMN_READER_H_ 6 #define CHROME_UTILITY_MEDIA_GALLERIES_PMP_COLUMN_READER_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "chrome/common/media_galleries/pmp_constants.h" 14 15 namespace base { 16 class File; 17 class FilePath; 18 } 19 20 namespace picasa { 21 22 // Reads a single PMP column from a file. 23 class PmpColumnReader { 24 public: 25 PmpColumnReader(); 26 virtual ~PmpColumnReader(); 27 28 // Returns true if read successfully. 29 // |rows_read| is undefined if returns false. 30 bool ReadFile(base::File* file, const PmpFieldType expected_type); 31 32 // These functions read the value of that |row| into |result|. 33 // Functions return false if the column is of the wrong type or the row 34 // is out of range. May only be called after successful ReadColumn. 35 bool ReadString(const uint32 row, std::string* result) const; 36 bool ReadUInt32(const uint32 row, uint32* result) const; 37 bool ReadDouble64(const uint32 row, double* result) const; 38 bool ReadUInt8(const uint32 row, uint8* result) const; 39 bool ReadUInt64(const uint32 row, uint64* result) const; 40 41 // May only be called after successful ReadColumn. 42 uint32 rows_read() const; 43 44 private: 45 bool ParseData(const PmpFieldType expected_type); 46 // Returns the number of bytes parsed in the body, or, -1 on failure. 47 int64 IndexStrings(); 48 49 // Source data 50 scoped_ptr<uint8[]> data_; 51 int64 length_; 52 53 // Header data 54 PmpFieldType field_type_; 55 uint32 rows_read_; 56 57 // Index of string start locations if fields are strings. Empty otherwise. 58 std::vector<const char*> strings_; 59 60 DISALLOW_COPY_AND_ASSIGN(PmpColumnReader); 61 }; 62 63 } // namespace picasa 64 65 #endif // CHROME_UTILITY_MEDIA_GALLERIES_PMP_COLUMN_READER_H_ 66