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