1 #ifndef _TCURESOURCE_HPP 2 #define _TCURESOURCE_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements Quality Program Tester Core 5 * ---------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Resource system. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "tcuDefs.hpp" 27 28 #include <string> 29 30 // \todo [2010-07-31 pyry] Move Archive and File* to separate files 31 32 namespace tcu 33 { 34 35 /*--------------------------------------------------------------------*//*! 36 * \brief Resource object 37 * 38 * Test framework uses abstraction for data access instead of using 39 * files directly to better support platforms where application resources 40 * are not available directly in the filesystem. 41 * 42 * Resource objects are requested from Archive object provided by Platform. 43 * The user is responsible of disposing the objects afterwards. 44 *//*--------------------------------------------------------------------*/ 45 class Resource 46 { 47 public: ~Resource(void)48 virtual ~Resource (void) {} 49 50 virtual void read (deUint8* dst, int numBytes) = 0; 51 virtual int getSize (void) const = 0; 52 virtual int getPosition (void) const = 0; 53 virtual void setPosition (int position) = 0; 54 getName(void) const55 const std::string& getName (void) const { return m_name; } 56 57 protected: Resource(const std::string & name)58 Resource (const std::string& name) : m_name(name) {} 59 60 private: 61 std::string m_name; 62 }; 63 64 /*--------------------------------------------------------------------*//*! 65 * \brief Abstract resource archive 66 *//*--------------------------------------------------------------------*/ 67 class Archive 68 { 69 public: ~Archive(void)70 virtual ~Archive (void) {} 71 72 /*--------------------------------------------------------------------*//*! 73 * \brief Open resource 74 * 75 * Throws resource error if no resource with given name exists. 76 * 77 * Resource object must be deleted after use 78 * 79 * \param name Resource path 80 * \return Resource object 81 *//*--------------------------------------------------------------------*/ 82 virtual Resource* getResource (const char* name) const = 0; 83 84 protected: Archive()85 Archive () {} 86 }; 87 88 /*--------------------------------------------------------------------*//*! 89 * \brief Directory-based archive implementation 90 *//*--------------------------------------------------------------------*/ 91 class DirArchive : public Archive 92 { 93 public: 94 DirArchive (const char* path); 95 ~DirArchive (void); 96 97 Resource* getResource (const char* name) const; 98 99 // \note Assignment and copy allowed DirArchive(const DirArchive & other)100 DirArchive (const DirArchive& other) : Archive(), m_path(other.m_path) {} operator =(const DirArchive & other)101 DirArchive& operator= (const DirArchive& other) { m_path = other.m_path; return *this; } 102 103 private: 104 std::string m_path; 105 106 }; 107 108 class FileResource : public Resource 109 { 110 public: 111 FileResource (const char* filename); 112 ~FileResource (void); 113 114 void read (deUint8* dst, int numBytes); 115 int getSize (void) const; 116 int getPosition (void) const; 117 void setPosition (int position); 118 119 private: 120 FileResource (const FileResource& other); 121 FileResource& operator= (const FileResource& other); 122 123 FILE* m_file; 124 }; 125 126 class ResourcePrefix : public Archive 127 { 128 public: 129 ResourcePrefix (const Archive& archive, const char* prefix); ~ResourcePrefix(void)130 virtual ~ResourcePrefix (void) {} 131 132 virtual Resource* getResource (const char* name) const; 133 134 private: 135 const Archive& m_archive; 136 std::string m_prefix; 137 }; 138 139 } // tcu 140 141 #endif // _TCURESOURCE_HPP 142